# Mappls Developer Platform — full AI context > Canonical repository-backed context for retrieval, planning, implementation, and evaluation. This is not a credential, entitlement, provider response, compatibility promise, or production approval. ## Corpus manifest ```json { "schemaVersion": "mappls.ai-context-corpus.v1", "generatedAt": "2026-08-18T00:00:00Z", "sourceSnapshotAt": "2026-08-18T03:05:03.406Z", "records": 1992, "jsonlLines": 1993, "kinds": 43, "counts": { "a2a-authority": 1, "agent-pattern": 6, "agent-skill": 1, "ai-evaluation-suite": 1, "api-generation": 17, "api-operation": 162, "authentication": 14, "automotive": 1, "capability-decision": 130, "capability-qualification": 130, "client-library-studio": 1, "deep-link-evidence": 1, "deep-link-intent": 4, "developer-experience-benchmark": 1, "developer-platform-release": 4, "documentation-coverage": 105, "environment": 4, "error-diagnostic": 11, "event-contract": 138, "implementation-recipe": 48, "industry-solution": 16, "journey-simulation": 18, "journey-workshop": 18, "marketing-evidence": 6, "mcp-authority": 1, "migration": 13, "native-widget-capability": 5, "native-widget-platform": 4, "platform": 13, "product": 10, "quickstart": 13, "sample-application": 21, "sdk-or-distribution": 58, "search-destination": 714, "source-launchpad": 60, "source-lifecycle": 82, "source-reference": 82, "stateful-journey": 18, "stateful-product": 9, "tutorial": 40, "vision": 1, "webhook-guide": 1, "widget": 9 }, "recordSetSha256": "f1b9eb749e6bfb11ef647aee78bf6451bdcff740e9b357b8beb1abe5478e37e8", "authority": { "providerCredentialsAccepted": false, "providerPayloadsAccepted": false, "providerCalls": 0, "writesExposed": false, "productionApprovalGranted": false, "boundary": "This corpus packages repository-backed public developer evidence for offline AI retrieval. It does not prove Mappls product entitlement, live provider behavior, compatibility, support, customer authority, or production approval." } } ``` ## Consumption rules - Select records by `kind` and `id`; retain the canonical `href` in citations and handoffs. - Treat `stateModel` as an integration-design signal, not evidence that the provider owns every durable state. - Never promote a repository, sample, fixture, generated plan, or adjacent SDK into entitlement or live-product proof. - Use the JSONL SHA-256 sidecar before caching or indexing an offline copy. - Reconcile state-changing uncertainty by stable business/provider identity before retry; never infer success from a fixture. ## product · Maps - Identity: `product:maps` - Canonical: https://developer.mappls.com/docs/maps - State model: stateless ```json { "slug": "maps", "name": "Maps", "eyebrow": "Render the world", "category": "Core location", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "description": "Build location experiences with global basemaps, India-first detail, 3D buildings, traffic, custom styles, annotations, GeoJSON, KML, heatmaps, raster catalogues, and camera controls. Use native SDKs for deep platform integration or Web Maps JS for the fastest path to an interactive map.", "accent": "#7c5cff", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "repositories": [ "mappls-web-maps-js", "mappls-android-sdk", "mappls-ios-sdk", "mappls-flutter-sdk", "mappls-react-native-sdk", "mappls-map-ios-distribution" ], "auth": { "type": "Static key or access token", "guidance": "Use a domain-restricted static key for browser SDKs and server-issued credentials for trusted backends." }, "samples": [ { "language": "html", "label": "Web Maps JS", "code": "\n\n \n \n \n \n \n
\n \n \n" }, { "language": "kotlin", "label": "Android", "code": "// app/build.gradle.kts\ndependencies {\n implementation(platform(\"com.mappls.sdk:mappls-bom:VERSION\"))\n implementation(\"com.mappls.sdk:mappls-android-sdk\")\n}\n\n// Application.kt\nclass Application : android.app.Application() {\n override fun onCreate() {\n super.onCreate()\n Mappls.getInstance(this)\n }\n}" } ] } ``` ## product · Search & Places - Identity: `product:search-places` - Canonical: https://developer.mappls.com/docs/search-places - State model: stateless ```json { "slug": "search-places", "name": "Search & Places", "eyebrow": "Turn intent into place", "category": "Core location", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "description": "Resolve messy human intent into precise places. Search as a user types, convert addresses to coordinates, reverse coordinates into addresses, discover relevant POIs, inspect place details, search along a route, and use compact Mappls Pins instead of error-prone latitude and longitude pairs.", "accent": "#00a88f", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "repositories": [ "mappls-rest-apis", "mappls-android-sdk", "mappls-ios-sdk", "mappls-web-plugins" ], "auth": { "type": "Restricted static key (current) or OAuth bearer (legacy)", "guidance": "Current core REST uses a restricted static key in the documented access_token query contract. The pre-August-2025 line uses OAuth bearer with legacy hosts and paths. Never mix generations; keep server-use keys off untrusted clients and request logs." }, "samples": [ { "language": "javascript", "label": "Autosuggest", "code": "import { createMapplsClientFromEnvironment } from \"@mappls/server-sdk\";\n\n// MAPPLS_STATIC_KEY is applied using the current documented query contract.\n// Keep the restricted key inside this trusted server process.\nconst mappls = createMapplsClientFromEnvironment();\nconst suggestions = await mappls.autosuggest({\n query: \"coffee\",\n region: \"IND\"\n});" } ] } ``` ## product · Routes & Navigation - Identity: `product:routes-navigation` - Canonical: https://developer.mappls.com/docs/routes-navigation - State model: hybrid ```json { "slug": "routes-navigation", "name": "Routes & Navigation", "eyebrow": "Move with confidence", "category": "Mobility", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "description": "Plan and operate journeys for cars, bikes, trucks, pedestrians, and fleets. Choose between single-shot route calculations and a stateful navigation session that continuously responds to progress, traffic, deviations, incidents, and destination changes.", "accent": "#ff7a45", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "repositories": [ "mappls-rest-apis", "mappls-android-sdk", "mappls-ios-sdk", "mapmyindia-navigation-sdk", "mappls-routenet", "mappls-telecons-offline-sdk" ], "auth": { "type": "Restricted static key (current) or legacy OAuth, plus SDK entitlement", "guidance": "Current core REST routing uses the restricted static-key query contract; legacy OAuth requires its issued host/path generation. Route calls are stateless, while navigation requires an entitled, lifecycle-aware SDK session." }, "samples": [ { "language": "kotlin", "label": "Route request", "code": "val route = MapplsDirections.builder()\n .origin(\"MMI000\")\n .destination(\"MMI001\")\n .profile(DirectionsCriteria.PROFILE_DRIVING)\n .resource(DirectionsCriteria.RESOURCE_ROUTE)\n .steps(true)\n .build()\n\nroute.enqueueCall(object : Callback {\n override fun onResponse(call: Call, response: Response) {\n val primaryRoute = response.body()?.routes()?.firstOrNull()\n }\n override fun onFailure(call: Call, error: Throwable) = Unit\n})" } ], "journey": { "title": "A complete navigation session", "description": "Treat navigation as a durable state machine, not a route polyline with voice prompts.", "steps": [ { "title": "Plan", "description": "Resolve origin, stops, vehicle profile, constraints, and alternatives.", "state": "draft" }, { "title": "Preview", "description": "Present ETA, distance, tolls, incidents, and route trade-offs.", "state": "ready", "event": "route.calculated" }, { "title": "Start", "description": "Acquire location, initialize guidance, and begin progress tracking.", "state": "navigating", "event": "navigation.started" }, { "title": "Respond", "description": "Refresh progress, reroute on deviation, and surface traffic events safely.", "state": "navigating", "event": "route.updated" }, { "title": "Arrive", "description": "Confirm arrival, stop sensors, persist trip summary, and release the session.", "state": "completed", "event": "navigation.arrived" } ] } } ``` ## product · InTouch Telematics - Identity: `product:intouch-telematics` - Canonical: https://developer.mappls.com/docs/intouch-telematics - State model: stateful ```json { "slug": "intouch-telematics", "name": "InTouch Telematics", "eyebrow": "Understand every moving asset", "category": "Operations", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "description": "Connect vehicles, phones, and IoT devices to a longitudinal operational model. InTouch combines ingestion, identity, asset assignment, trip construction, event detection, live state, historical playback, and reporting. Integrations should model provisioning and lifecycle transitions explicitly.", "accent": "#e052a0", "stateModel": "stateful", "platforms": [ "REST", "Android", "iOS", "React Native", "Web", "Widgets" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "repositories": [ "mappls-intouch-rest-apis", "mappls-intouch-android-sdk", "mappls-intouch-ios-sdk", "mappls-react-native-intouch-sdk" ], "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." }, "samples": [ { "language": "typescript", "label": "Asset event consumer", "code": "type AssetEvent = {\n id: string;\n assetId: string;\n occurredAt: string;\n type: \"position\" | \"ignition\" | \"geofence.entered\" | \"geofence.exited\";\n position?: { latitude: number; longitude: number; speedKph?: number };\n};\n\nexport async function handleAssetEvent(event: AssetEvent) {\n // Idempotency matters: delivery may be retried.\n if (await events.exists(event.id)) return;\n await events.transaction(async () => {\n await events.record(event);\n await assets.apply(event.assetId, event);\n });\n}" } ], "journey": { "title": "Vehicle from activation to daily operations", "description": "The complete fleet journey spans control-plane and data-plane state.", "steps": [ { "title": "Provision", "description": "Create the organization, project, asset, device, and entitlements.", "state": "provisioned", "event": "asset.created" }, { "title": "Activate", "description": "Securely bind the physical device or mobile SDK to the asset.", "state": "active", "event": "device.activated" }, { "title": "Ingest", "description": "Accept ordered and delayed telemetry while tracking connection health.", "state": "online", "event": "position.received" }, { "title": "Operate", "description": "Build trips, evaluate geofences, notify operators, and power live views.", "state": "in_trip", "event": "trip.started" }, { "title": "Maintain", "description": "Diagnose gaps, replace devices, transfer assets, and preserve history.", "state": "maintenance", "event": "device.replaced" }, { "title": "Retire", "description": "Revoke credentials and detach hardware without deleting audit history.", "state": "retired", "event": "asset.retired" } ] } } ``` ## product · Workmate - Identity: `product:workmate` - Canonical: https://developer.mappls.com/docs/workmate - State model: stateful ```json { "slug": "workmate", "name": "Workmate", "eyebrow": "Orchestrate work in the field", "category": "Operations", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "description": "Build dispatch and field-service systems around organizations, teams, workers, clients, tasks, shifts, location evidence, forms, and approvals. Workmate is journey-oriented: assignment, acceptance, execution, proof, exception handling, and completion are all first-class states.", "accent": "#3478f6", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "repositories": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "auth": { "type": "Organization and user-scoped access", "guidance": "Use service identities for dispatch integrations and user identities for worker actions; preserve the actor in every transition." }, "samples": [ { "language": "json", "label": "Task lifecycle", "code": "{\n \"externalId\": \"JOB-2026-004219\",\n \"type\": \"equipment_inspection\",\n \"assigneeId\": \"worker_1288\",\n \"location\": { \"mapplsPin\": \"MMI000\" },\n \"window\": { \"startsAt\": \"2026-08-17T04:30:00Z\", \"endsAt\": \"2026-08-17T06:30:00Z\" },\n \"requiredProof\": [\"arrival_location\", \"checklist\", \"photo\", \"customer_signature\"]\n}" } ], "journey": { "title": "A field-service job end to end", "description": "Every transition is attributable, replayable, and safe to retry.", "steps": [ { "title": "Create", "description": "Attach client, site, SLA, skills, time window, and proof requirements.", "state": "unassigned", "event": "task.created" }, { "title": "Dispatch", "description": "Choose a qualified worker using proximity, load, shift, and route cost.", "state": "assigned", "event": "task.assigned" }, { "title": "Accept", "description": "Worker accepts, rejects, or raises an availability exception.", "state": "accepted", "event": "task.accepted" }, { "title": "Travel", "description": "Navigate to the site and notify operations of predicted SLA risk.", "state": "en_route", "event": "task.en_route" }, { "title": "Execute", "description": "Verify arrival, collect structured work evidence, and handle blockers.", "state": "in_progress", "event": "task.started" }, { "title": "Close", "description": "Validate proof, obtain sign-off, sync downstream systems, and audit.", "state": "completed", "event": "task.completed" } ] } } ``` ## product · GIS & Analytics - Identity: `product:gis-analytics` - Canonical: https://developer.mappls.com/docs/gis-analytics - State model: hybrid ```json { "slug": "gis-analytics", "name": "GIS & Analytics", "eyebrow": "Make geography explain the business", "category": "Intelligence", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "description": "Publish governed geospatial data, run spatial operations, build thematic views, and embed interactive dashboards. The mGIS and Insight families cover both API-first analysis and long-lived workspaces containing datasets, layers, styles, maps, permissions, and shares.", "accent": "#17a8e3", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "repositories": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk", "migist-complete" ], "auth": { "type": "Workspace and resource-scoped access", "guidance": "Keep immutable source data separate from derived layers; authorize reads and writes at workspace, dataset, and share boundaries." }, "samples": [ { "language": "python", "label": "Point-in-polygon analysis", "code": "import requests\n\nresponse = requests.post(\n f\"{MAPPLS_GIS_BASE_URL}/analysis/point-in-polygon\",\n headers={\"Authorization\": f\"Bearer {token}\"},\n json={\n \"pointsDatasetId\": \"deliveries_2026_08\",\n \"polygonDatasetId\": \"service_zones_v4\",\n \"include\": [\"zone_id\", \"manager\", \"sla_minutes\"],\n },\n timeout=30,\n)\nresponse.raise_for_status()\njob = response.json() # Poll or subscribe to the returned analysis job.\n" } ], "journey": { "title": "From raw data to governed decision layer", "description": "Large analyses are asynchronous, reproducible resources with lineage.", "steps": [ { "title": "Ingest", "description": "Upload or connect a source and validate its schema and coordinate system.", "state": "validating", "event": "dataset.created" }, { "title": "Publish", "description": "Version the dataset, define access, and expose a queryable layer.", "state": "published", "event": "dataset.published" }, { "title": "Analyze", "description": "Run a spatial job with explicit inputs, parameters, and output ownership.", "state": "processing", "event": "analysis.started" }, { "title": "Visualize", "description": "Style the derived layer and assemble a map or dashboard.", "state": "ready", "event": "analysis.completed" }, { "title": "Share", "description": "Embed or grant access with expiry, audience, and export controls.", "state": "shared", "event": "share.created" } ] } } ``` ## product · App Widgets & Deep Links - Identity: `product:app-widgets-deep-links` - Canonical: https://developer.mappls.com/docs/app-widgets-deep-links - State model: stateless ```json { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "eyebrow": "Ship a complete experience in minutes", "category": "Experience", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "description": "Use universal URLs and embeddable widgets when you need a polished Mappls experience without owning a full map or navigation integration. Most app widgets need no API credential, making them ideal for content, support, campaigns, and lightweight product surfaces.", "accent": "#ff4f64", "stateModel": "stateless", "platforms": [ "Widgets", "Deep links", "Web", "Android", "iOS" ], "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "repositories": [ "mappls-app-widgets", "mappls-web-plugins" ], "auth": { "type": "Often credential-free", "guidance": "Use an API key only when the selected widget explicitly requires one; validate and encode all user-provided URL parameters." }, "samples": [ { "language": "html", "label": "Place link", "code": "\n Open this place in Mappls\n" } ] } ``` ## product · Offline & Automotive - Identity: `product:offline-automotive` - Canonical: https://developer.mappls.com/docs/offline-automotive - State model: stateful ```json { "slug": "offline-automotive", "name": "Offline & Automotive", "eyebrow": "Location that keeps working", "category": "Embedded", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "description": "Power in-vehicle, industrial, and disconnected experiences with licensed regional data packages and embedded runtimes. This product family includes offline search and route compilers, native SDKs, traffic-event customization, voice guidance, GPS health, and update workflows.", "accent": "#d6a600", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "repositories": [ "mappls-telecons-offline-sdk", "mappls-telecons-compiler", "mappls-telecons-search-compiler", "mappls-telecons-background-compiler", "mappls-routenet", "linuxsdk-dev1", "linuxsdk-dev2", "yahaan" ], "auth": { "type": "Device activation and licensed data package", "guidance": "Design for activation, entitlement refresh, package compatibility, rollback, and long periods without network access." }, "samples": [ { "language": "cpp", "label": "Lifecycle pattern", "code": "// Illustrative lifecycle: concrete symbols vary by licensed SDK edition.\nNavigationRuntime runtime(configuration);\nruntime.installDataPackage(verifiedPackagePath);\nruntime.setPositionProvider(vehiclePositionProvider);\n\nauto route = runtime.plan(origin, destination, vehicleProfile);\nif (route.ok()) {\n runtime.startGuidance(route.value());\n}\n\n// Keep sensor callbacks non-blocking; persist the resumable session safely.\nruntime.onProgress([](const GuidanceProgress& progress) {\n tripStore.checkpoint(progress);\n});" } ], "journey": { "title": "A safe offline navigation lifecycle", "description": "Vehicle integrations must survive power loss, partial updates, and intermittent connectivity.", "steps": [ { "title": "Manufacture", "description": "Bind hardware identity, software edition, and regional entitlement.", "state": "manufactured", "event": "device.registered" }, { "title": "Activate", "description": "Verify license and install a compatible signed base package.", "state": "activated", "event": "license.activated" }, { "title": "Operate", "description": "Plan and guide locally while checkpointing recoverable trip state.", "state": "navigating", "event": "guidance.started" }, { "title": "Update", "description": "Download, verify, stage, atomically switch, and retain rollback data.", "state": "updating", "event": "package.staged" }, { "title": "Recover", "description": "Restore the last compatible runtime and resume safely after interruption.", "state": "recovered", "event": "runtime.recovered" } ] } } ``` ## product · AI & Location - Identity: `product:ai-location` - Canonical: https://developer.mappls.com/docs/ai-location - State model: hybrid ```json { "slug": "ai-location", "name": "AI & Location", "eyebrow": "Reason over the physical world", "category": "Intelligence", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "description": "Combine Mappls data and platform operations with models that classify imagery, understand spatial intent, rank places, and orchestrate tools. AI integrations should ground every answer in a typed Mappls operation and expose provenance rather than allowing the model to invent locations or operational state.", "accent": "#845ef7", "stateModel": "hybrid", "platforms": [ "REST", "Web", "MCP" ], "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "repositories": [ "mappls-ai-apis", "skydnn-aiapi-docs", "genesis-toolkit", "mapplsaiwebtesting" ], "auth": { "type": "Underlying product credential, held by the tool server", "guidance": "Never place keys or tokens in model context. Use the exact current or legacy authentication generation required by each underlying product, execute typed policy-checked tools on a trusted server, and redact precise coordinates and credential-bearing URLs from logs." }, "samples": [ { "language": "typescript", "label": "Agent tool contract", "code": "const nearbyPlacesTool = {\n name: \"mappls_search_nearby\",\n description: \"Find real places near a validated Mappls Pin or coordinate.\",\n inputSchema: {\n type: \"object\",\n required: [\"location\", \"category\"],\n properties: {\n location: { type: \"string\", description: \"Mappls Pin or 'lat,lng'.\" },\n category: { type: \"string\" },\n radiusMeters: { type: \"integer\", minimum: 50, maximum: 10_000 }\n }\n }\n};" } ] } ``` ## product · Capture & Feedback - Identity: `product:capture-feedback` - Canonical: https://developer.mappls.com/docs/capture-feedback - State model: hybrid ```json { "slug": "capture-feedback", "name": "Capture & Feedback", "eyebrow": "Keep location truth fresh", "category": "Data operations", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "description": "Capture a trustworthy position with explicit accuracy and timeout budgets, attach camera or form evidence, and submit map feedback through user-friendly SDK surfaces. This family helps delivery, insurance, survey, compliance, and citizen apps prove where an action happened and improve the map safely.", "accent": "#1c9c62", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "repositories": [ "mappls-camera-sdk-android", "mappls-camera-sdk-ios", "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-feedback-kit-ios-distribution", "mappls-feedback-uikit-ios-distribution" ], "auth": { "type": "SDK entitlement and user consent", "guidance": "Request the minimum device permission needed, retain evidence only for the declared purpose, and make capture policy visible to the user. The repository snapshot documents entitled SDK operations; direct REST access remains selection-required until an authoritative HTTP contract is supplied." }, "samples": [ { "language": "swift", "label": "Capture policy", "code": "struct CapturePolicy {\n let desiredAccuracyMeters: Double\n let timeoutSeconds: TimeInterval\n let acceptsCachedLocationSeconds: TimeInterval\n}\n\nlet policy = CapturePolicy(\n desiredAccuracyMeters: 25,\n timeoutSeconds: 12,\n acceptsCachedLocationSeconds: 5\n)\n\n// Pass the equivalent policy into the entitled Mappls Location Capture SDK.\n// Always handle permission denial, timeout, and insufficient-accuracy states." } ] } ``` ## platform · REST - Identity: `platform:rest` - Canonical: https://developer.mappls.com/platforms/rest ```json { "slug": "rest", "platform": "REST", "headline": "Put Mappls behind a stable service boundary in any stack.", "sourcePlatforms": [ "REST" ], "architecture": [ { "title": "Trusted application backend", "description": "Own credentials, validation, retries, quotas, caching, and response normalization in a service you control." }, { "title": "Mappls data plane", "description": "Call stateless location APIs directly and model long-running jobs or operational resources with durable identifiers." }, { "title": "Your product surfaces", "description": "Expose only the location capabilities and data needed by web, mobile, partner, batch, and automation clients." } ], "startHere": [ { "title": "Choose the narrowest API", "description": "Start with an endpoint contract and confirm its current host, entitlement, region, and authentication mode." }, { "title": "Create a server client", "description": "Load credentials from a secret manager, set explicit timeouts, and attach a request or trace identifier." }, { "title": "Normalize failure behavior", "description": "Separate invalid requests from quota, authentication, transient service, and transport failures." }, { "title": "Add production controls", "description": "Measure latency and consumption, cache safe reads, back off retryable failures, and redact sensitive data." } ], "productionChecks": [ "Credentials never reach a browser or mobile bundle", "Timeout, retry, and idempotency policies are explicit", "Coordinates, addresses, and identifiers have data-retention rules", "Every operation is attributable in logs and usage reporting" ] } ``` ## platform · Web - Identity: `platform:web` - Canonical: https://developer.mappls.com/platforms/web ```json { "slug": "web", "platform": "Web", "headline": "Build expressive browser maps without surrendering performance or control.", "sourcePlatforms": [ "Web" ], "architecture": [ { "title": "Browser experience", "description": "Render maps, layers, controls, markers, and accessible place or route interactions in the user interface." }, { "title": "Restricted public key", "description": "Use only browser-supported credentials and restrict them to the exact production and development origins." }, { "title": "Backend-for-frontend", "description": "Keep privileged REST calls, secrets, business rules, persistence, and third-party orchestration on your server." } ], "startHere": [ { "title": "Select a rendering surface", "description": "Choose Web Maps JS for a full map, a plugin for a focused workflow, or a widget when Mappls can own the experience." }, { "title": "Create a bounded map", "description": "Give the container a real size, initialize once, and destroy listeners and instances during unmount." }, { "title": "Add one user journey", "description": "Connect search, selection, route preview, or data visualization before expanding the surface." }, { "title": "Measure real devices", "description": "Profile startup, tile loading, interaction latency, memory, accessibility, and slow-network behavior." } ], "productionChecks": [ "Origin restrictions include every deployed hostname", "Map lifecycle follows the framework lifecycle", "Large datasets are tiled, clustered, or progressively loaded", "Keyboard, touch, reduced-motion, and failure states are tested" ] } ``` ## platform · Android - Identity: `platform:android` - Canonical: https://developer.mappls.com/platforms/android ```json { "slug": "android", "platform": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline.", "sourcePlatforms": [ "Android" ], "architecture": [ { "title": "Application layer", "description": "Own permissions, UI state, domain models, navigation between screens, and consent-facing experiences." }, { "title": "Mappls SDK modules", "description": "Install only entitled map, place, route, navigation, tracking, capture, or workforce modules." }, { "title": "Secure backend", "description": "Issue scoped tokens, protect privileged APIs, receive events, and persist durable operational state." } ], "startHere": [ { "title": "Confirm compatibility", "description": "Pin the SDK release, Android Gradle Plugin, Kotlin, minSdk, targetSdk, and repository requirements together." }, { "title": "Configure credentials", "description": "Use manifest or runtime configuration only as documented and keep server secrets outside the APK." }, { "title": "Forward lifecycle", "description": "Connect the map or navigation view to activity, fragment, process, and saved-state behavior." }, { "title": "Test device realities", "description": "Exercise denied permissions, background limits, process death, offline periods, rotation, and low-memory recovery." } ], "productionChecks": [ "Dependency versions are pinned and reproducible", "Location permission is contextual and revocable", "Background work complies with current Android policy", "SDK resources and observers are released deterministically" ] } ``` ## platform · iOS - Identity: `platform:ios` - Canonical: https://developer.mappls.com/platforms/ios ```json { "slug": "ios", "platform": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks.", "sourcePlatforms": [ "iOS" ], "architecture": [ { "title": "Swift application", "description": "Own scenes, permissions, presentation, product state, accessibility, and privacy disclosures." }, { "title": "Mappls packages", "description": "Resolve the smallest map, place, navigation, tracking, capture, or UI module set through the supported package channel." }, { "title": "Backend trust boundary", "description": "Exchange credentials, retain operational records, and perform privileged API calls away from the app binary." } ], "startHere": [ { "title": "Choose package lineage", "description": "Match the current SDK documentation with its distribution repository and supported Xcode and deployment targets." }, { "title": "Initialize once", "description": "Configure the SDK at the documented application or scene boundary before creating dependent views." }, { "title": "Respect ownership", "description": "Keep delegates, coordinators, subscriptions, and map views alive only for the required lifecycle." }, { "title": "Verify on hardware", "description": "Test permissions, background transitions, interrupted navigation, memory pressure, and poor connectivity on devices." } ], "productionChecks": [ "Package and binary versions belong to the same release line", "Secrets are not recoverable from the app bundle", "Info.plist purpose strings match actual collection", "Delegates, observers, and background sessions terminate cleanly" ] } ``` ## platform · React Native - Identity: `platform:react-native` - Canonical: https://developer.mappls.com/platforms/react-native ```json { "slug": "react-native", "platform": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms.", "sourcePlatforms": [ "React Native" ], "architecture": [ { "title": "TypeScript interface", "description": "Expose stable application-level components, hooks, and event types instead of leaking every native implementation detail." }, { "title": "Native Mappls bridges", "description": "Configure Android and iOS independently, including packages, credentials, manifests, permissions, and lifecycle callbacks." }, { "title": "Backend services", "description": "Retain credentials and stateful workflows centrally so app reinstalls and cross-device use remain recoverable." } ], "startHere": [ { "title": "Align the version matrix", "description": "Confirm React Native, Android, iOS, Mappls wrapper, and underlying native SDK compatibility." }, { "title": "Install both native halves", "description": "Complete Gradle and Xcode configuration before treating the JavaScript API as available." }, { "title": "Create a typed boundary", "description": "Normalize coordinates, feature IDs, commands, callbacks, and errors at the application edge." }, { "title": "Test asymmetric failures", "description": "Verify upgrades, permissions, backgrounding, and process recovery independently on Android and iOS." } ], "productionChecks": [ "Native and wrapper releases are compatible", "High-frequency events are throttled before crossing the bridge", "Unmount releases native views and listeners", "Platform-specific behavior is documented, not hidden" ] } ``` ## platform · Flutter - Identity: `platform:flutter` - Canonical: https://developer.mappls.com/platforms/flutter ```json { "slug": "flutter", "platform": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath.", "sourcePlatforms": [ "Flutter" ], "architecture": [ { "title": "Dart feature layer", "description": "Own widgets, application state, typed models, and platform-neutral business behavior." }, { "title": "Flutter platform plugin", "description": "Bridge map rendering and native capabilities to correctly configured Android and iOS SDKs." }, { "title": "Trusted backend", "description": "Issue scoped credentials and own privileged calls, persistence, events, and operational workflows." } ], "startHere": [ { "title": "Pin the plugin", "description": "Match Flutter, Dart, Android, iOS, and Mappls plugin requirements before resolving dependencies." }, { "title": "Configure native projects", "description": "Apply repository, manifest, Info.plist, package, and credential steps on both platforms." }, { "title": "Build a lifecycle-safe widget", "description": "Create controllers once, await readiness, and dispose streams and native resources." }, { "title": "Exercise release builds", "description": "Test shrinking, signing, permissions, backgrounding, and platform-view performance outside debug mode." } ], "productionChecks": [ "Android and iOS configuration is version-controlled", "Controllers are used only after readiness", "Streams and platform views are disposed", "Release builds are tested on physical devices" ] } ``` ## platform · Cordova - Identity: `platform:cordova` - Canonical: https://developer.mappls.com/platforms/cordova ```json { "slug": "cordova", "platform": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path.", "sourcePlatforms": [ "Cordova/Ionic" ], "architecture": [ { "title": "Web application shell", "description": "Own navigation, UI, business state, and a narrow JavaScript interface to mapping capabilities." }, { "title": "Cordova native plugin", "description": "Bridge platform permissions, lifecycle, SDK calls, and callbacks across Android and iOS." }, { "title": "Compatibility envelope", "description": "Pin every toolchain and plugin dependency while planning replacement of unsupported components." } ], "startHere": [ { "title": "Classify the estate", "description": "Record Cordova, Ionic, plugin, Android, iOS, and Mappls versions plus current release constraints." }, { "title": "Reproduce the build", "description": "Lock dependencies and prove a clean signed build before adding new location behavior." }, { "title": "Constrain the bridge", "description": "Keep commands and callbacks small, typed, serializable, and resilient to view recreation." }, { "title": "Design migration seams", "description": "Separate application state from plugin calls so the UI or native host can be replaced incrementally." } ], "productionChecks": [ "Supported status is verified before new development", "Toolchain and plugin versions are frozen", "Bridge inputs are validated and bounded", "A tested migration and rollback path exists" ] } ``` ## platform · Xamarin - Identity: `platform:xamarin` - Canonical: https://developer.mappls.com/platforms/xamarin ```json { "slug": "xamarin", "platform": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior.", "sourcePlatforms": [ "Xamarin/.NET" ], "architecture": [ { "title": "Shared .NET domain layer", "description": "Retain portable models, workflows, persistence interfaces, and tests independent of the UI framework." }, { "title": "Platform SDK adapters", "description": "Isolate Android and iOS Mappls bindings, lifecycle, permissions, and rendering behind explicit interfaces." }, { "title": "Migration target", "description": "Move screens or features toward a supported .NET or native stack while preserving contract tests." } ], "startHere": [ { "title": "Inventory dependencies", "description": "Capture NuGet packages, native bindings, SDK binaries, build hosts, signing, and entitlement state." }, { "title": "Freeze observable behavior", "description": "Add tests around coordinate conversion, search, routes, state restoration, and native callbacks." }, { "title": "Extract adapters", "description": "Move Mappls-specific calls behind interfaces that a replacement platform can implement." }, { "title": "Migrate by journey", "description": "Move complete user journeys, validate parity, then retire the corresponding legacy surface." } ], "productionChecks": [ "The support and security posture is documented", "Build inputs can be reproduced", "Native resources have deterministic ownership", "Migration parity is measured with journey-level tests" ] } ``` ## platform · Linux - Identity: `platform:linux` - Canonical: https://developer.mappls.com/platforms/linux ```json { "slug": "linux", "platform": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems.", "sourcePlatforms": [ "Linux/Embedded" ], "architecture": [ { "title": "Device application", "description": "Own process supervision, UI or service behavior, hardware integration, storage, and observability." }, { "title": "Mappls native runtime", "description": "Load entitled libraries and compatible map or routing data for the target architecture." }, { "title": "Provisioning and updates", "description": "Activate devices, stage signed artifacts, switch versions atomically, and preserve rollback state." } ], "startHere": [ { "title": "Define the target", "description": "Record architecture, ABI, libc, graphics stack, storage, memory, sensors, and connectivity constraints." }, { "title": "Validate the bundle", "description": "Match runtime, compiler, data format, license, and device activation before application integration." }, { "title": "Build a supervised lifecycle", "description": "Handle startup, health, corrupted data, expired activation, resource pressure, and clean shutdown." }, { "title": "Prove field updates", "description": "Test resumable download, signature verification, atomic switch, rollback, and power interruption." } ], "productionChecks": [ "Runtime and data compatibility is enforced", "Device identity and activation can be rotated", "Updates are signed, resumable, and reversible", "Health and resource telemetry survive application restarts" ] } ``` ## platform · Automotive - Identity: `platform:automotive` - Canonical: https://developer.mappls.com/platforms/automotive ```json { "slug": "automotive", "platform": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen.", "sourcePlatforms": [ "Automotive", "Linux/Embedded" ], "architecture": [ { "title": "Vehicle integration layer", "description": "Own GNSS and sensor fusion inputs, vehicle signals, audio, displays, policy, and driver-distraction constraints." }, { "title": "Navigation runtime", "description": "Plan, guide, reroute, search, match position, and operate with the installed online or offline data." }, { "title": "Fleet control plane", "description": "Manage activation, entitlements, staged releases, map data, telemetry, incidents, and rollback across device cohorts." } ], "startHere": [ { "title": "Specify the operating envelope", "description": "Define platforms, displays, controls, vehicle signals, offline duration, regions, languages, and safety constraints." }, { "title": "Integrate simulation first", "description": "Feed deterministic routes, GNSS traces, deviations, tunnels, and failures before vehicle testing." }, { "title": "Model navigation state", "description": "Make route planning, preview, guidance, reroute, arrival, pause, and termination explicit and recoverable." }, { "title": "Qualify the release system", "description": "Validate runtime, map data, configuration, activation, cohort rollout, health signals, and rollback together." } ], "productionChecks": [ "Driver-distraction and safety requirements are testable", "Navigation recovers after power and connectivity loss", "Runtime and map data roll out as a compatible unit", "Simulation and road-test evidence cover full journeys" ] } ``` ## platform · Widgets - Identity: `platform:widgets` - Canonical: https://developer.mappls.com/platforms/widgets ```json { "slug": "widgets", "platform": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate.", "sourcePlatforms": [ "Widgets/Deep links", "Web" ], "includeKinds": [ "Widget" ], "architecture": [ { "title": "Host product", "description": "Own placement, surrounding content, consent, identity, and the moment the embedded experience begins or ends." }, { "title": "Mappls widget", "description": "Own the focused place, route, feedback, geofence, visualization, or immersive interaction." }, { "title": "Event and fallback layer", "description": "Capture supported callbacks, provide a useful no-script or blocked-embed path, and keep business state outside the widget." } ], "startHere": [ { "title": "Select the owned journey", "description": "Choose a widget when its complete supported interaction matches the outcome you need." }, { "title": "Define the container", "description": "Set responsive dimensions, loading UI, accessibility context, content policy, and failure behavior." }, { "title": "Pass minimal context", "description": "Provide only documented identifiers, locations, configuration, and callbacks—never privileged credentials." }, { "title": "Test hand-offs", "description": "Verify completion, cancellation, back navigation, app opening, blocked content, and small-screen behavior." } ], "productionChecks": [ "Embedding and content-security policies permit only required origins", "No sensitive business state lives only inside the widget", "Loading, failure, and unsupported-browser fallbacks exist", "Analytics distinguish view, engagement, completion, and hand-off" ] } ``` ## platform · Deep links - Identity: `platform:deep-links` - Canonical: https://developer.mappls.com/platforms/deep-links ```json { "slug": "deep-links", "platform": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement.", "sourcePlatforms": [ "Widgets/Deep links" ], "includeKinds": [ "Deep link" ], "architecture": [ { "title": "Link producer", "description": "Create documented Mappls URLs from trusted place, Mappls Pin, destination, or route context." }, { "title": "Universal hand-off", "description": "Let the operating system open the Mappls app when available and a useful web experience otherwise." }, { "title": "Campaign measurement", "description": "Track link placement and downstream business outcomes without putting private data into the URL." } ], "startHere": [ { "title": "Choose the destination type", "description": "Use a place, map, directions, navigation, or other documented link shape for one clear intent." }, { "title": "Encode from structured data", "description": "Build and validate URL components with a URL library instead of concatenating user input." }, { "title": "Provide visible context", "description": "Tell users what opens, show the destination in human-readable form, and preserve a copyable fallback." }, { "title": "Test every channel", "description": "Verify installed and uninstalled states across mobile browsers, messaging, email, QR, desktop, and in-app webviews." } ], "productionChecks": [ "User or confidential data never appears in query parameters", "All variable values are encoded and length-bounded", "App and browser fallbacks reach the same intent", "Redirect and campaign domains are allow-listed and monitored" ] } ``` ## platform · MCP - Identity: `platform:mcp` - Canonical: https://developer.mappls.com/platforms/mcp ```json { "slug": "mcp", "platform": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control.", "sourcePlatforms": [ "AI/MCP" ], "architecture": [ { "title": "AI host", "description": "Plan user intent, request tool calls, present approvals, and keep generated text separate from authoritative results." }, { "title": "Mappls MCP boundary", "description": "Advertise narrow schemas, validate arguments, enforce policy, call supported Mappls services, and return provenance." }, { "title": "Credential and audit plane", "description": "Scope credentials by tenant and tool, redact logs, meter usage, trace calls, and support revocation." } ], "startHere": [ { "title": "Start read-only", "description": "Expose discovery, search, route, and documentation tools before any command that changes durable state." }, { "title": "Constrain every schema", "description": "Use enums, bounds, required fields, coordinate validation, result limits, and explicit units." }, { "title": "Separate plan from effect", "description": "Preview stateful commands, require approval, attach idempotency, and return the created resource identifier." }, { "title": "Evaluate adversarially", "description": "Test prompt injection, secret requests, confused-deputy access, fabricated APIs, retries, and partial failure." } ], "productionChecks": [ "Tools expose the least authority needed", "State-changing calls require explicit policy and approval", "Responses identify source, freshness, and uncertainty", "Every tool call is tenant-scoped, metered, redacted, and traceable" ] } ``` ## quickstart · Your first trusted Mappls request - Identity: `quickstart:rest-api` - Canonical: https://developer.mappls.com/quickstart/rest-api ```json { "slug": "rest-api", "platform": "REST", "title": "Your first trusted Mappls request", "outcome": "a validated autosuggest result from a credential-safe server boundary", "duration": "15 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-rest-apis" ], "credentialBoundary": "Load the current restricted static key only inside the trusted process. Legacy OAuth and InTouch bearer credentials are separate generations and must never be mixed by inference.", "evidenceBoundary": "The public REST repository and normalized operation are repository evidence; the issued account remains authoritative for host, auth generation, quota, and region.", "prerequisites": [ "Node.js 20 or newer", "A Mappls project and restricted non-production server key", "An approved region and one autosuggest test query", "Request logging configured to omit URLs containing key query parameters" ], "configure": "Install the local trusted-server SDK, load credentials from the process environment or secret manager, set an explicit timeout, and expose a narrow application endpoint that accepts only bounded query and region fields.", "build": "Call autosuggest through the SDK adapter, preserve Mappls Pin and provider request identity, and return a small normalized candidate model instead of the entire provider body.", "exercise": "Run the server in a non-production environment, submit one deterministic query, then repeat with an invalid region, timeout, and missing credential.", "platformProof": "The successful response retains a Mappls place identity and the failure response is typed and redacted.", "platformFailure": { "signal": "A request succeeds locally but its key appears in proxy traces", "likelyCause": "The current key uses a query transport and an intermediary records full URLs.", "nextAction": "Disable query-string logging, restrict the key to server egress, redact telemetry, and rotate any exposed credential before continuing." }, "runCommands": [ "npm install", "MAPPLS_STATIC_KEY=YOUR_RESTRICTED_KEY npm run dev", "npm test" ], "samples": [ { "language": "typescript", "label": "Trusted autosuggest boundary", "code": "import { createMapplsClientFromEnvironment } from \"@mappls/server-sdk\";\n\nconst mappls = createMapplsClientFromEnvironment();\n\nexport async function suggest(query: string, requestId: string) {\n if (query.trim().length < 2 || query.length > 120) throw new Error(\"invalid_query\");\n const result = await mappls.autosuggest({ query, region: \"IND\" });\n return { requestId, result }; // SDK owns auth, timeout, retry, and redaction.\n}" } ], "nextTutorialSlugs": [ "rest-geocode-service", "address-autocomplete", "oauth-server-integration" ], "productionChecks": [ "Credential restriction and URL-log redaction are proven", "Timeout and bounded retry are explicit", "Inputs and result sizes are bounded", "Provider request identity is observable without response bodies" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact REST package, endpoint, toolchain, region, and account entitlement before installing anything. The public REST repository and normalized operation are repository evidence; the issued account remains authoritative for host, auth generation, quota, and region.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Install the local trusted-server SDK, load credentials from the process environment or secret manager, set an explicit timeout, and expose a narrow application endpoint that accepts only bounded query and region fields.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Call autosuggest through the SDK adapter, preserve Mappls Pin and provider request identity, and return a small normalized candidate model instead of the entire provider body.", "proof": "The application produces the stated outcome—a validated autosuggest result from a credential-safe server boundary—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Run the server in a non-production environment, submit one deterministic query, then repeat with an invalid region, timeout, and missing credential.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "The successful response retains a Mappls place identity and the failure response is typed and redacted.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "A request succeeds locally but its key appears in proxy traces", "likelyCause": "The current key uses a query transport and an intermediary records full URLs.", "nextAction": "Disable query-string logging, restrict the key to server egress, redact telemetry, and rotate any exposed credential before continuing." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Render one accessible web map - Identity: `quickstart:web-map` - Canonical: https://developer.mappls.com/quickstart/web-map ```json { "slug": "web-map", "platform": "Web", "title": "Render one accessible web map", "outcome": "a responsive map and text-synchronized selected place", "duration": "15 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-web-maps", "mappls-web-maps-js" ], "credentialBoundary": "Use only the browser-supported public key restricted to exact origins. Privileged REST credentials stay on a backend-for-frontend.", "evidenceBoundary": "The selected Web Maps source contains current and sample evidence; confirm the script/package line and allowed origin against the target project.", "prerequisites": [ "A static HTML or framework application", "An exact localhost origin", "A domain-restricted browser key", "A visible fallback container and selected-place text region" ], "configure": "Give the map host an explicit size, load the confirmed Web Maps distribution once, and wrap its ready/error/destroy lifecycle behind one application module.", "build": "Render a fixture location, mirror its durable ID and label outside the canvas, and make selection reachable without relying on pointer input or color alone.", "exercise": "Serve the page over localhost, test keyboard and touch, throttle the network, block the SDK request, and navigate away/back twice.", "platformProof": "Map, text fallback, and selected identity stay synchronized at mobile and desktop widths.", "platformFailure": { "signal": "The map is blank while no provider error is visible", "likelyCause": "The host has zero height, the script was blocked, the origin is not allowed, or initialization ran before the DOM existed.", "nextAction": "Inspect host dimensions and script/network status, surface the load error beside the text fallback, and initialize exactly once after mount." }, "runCommands": [ "npm install", "npm run dev", "npm run build" ], "samples": [ { "language": "html", "label": "Lifecycle-owned map host", "code": "
\n

Store location

\n
\n

Selected: fixture-store

\n
\n" } ], "nextTutorialSlugs": [ "first-web-map", "address-autocomplete", "route-preview" ], "productionChecks": [ "Exact origins are restricted", "Canvas behavior has an accessible text equivalent", "Slow/offline states are useful", "Listeners and workers are destroyed on unmount" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Web package, endpoint, toolchain, region, and account entitlement before installing anything. The selected Web Maps source contains current and sample evidence; confirm the script/package line and allowed origin against the target project.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Give the map host an explicit size, load the confirmed Web Maps distribution once, and wrap its ready/error/destroy lifecycle behind one application module.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Render a fixture location, mirror its durable ID and label outside the canvas, and make selection reachable without relying on pointer input or color alone.", "proof": "The application produces the stated outcome—a responsive map and text-synchronized selected place—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Serve the page over localhost, test keyboard and touch, throttle the network, block the SDK request, and navigate away/back twice.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Map, text fallback, and selected identity stay synchronized at mobile and desktop widths.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "The map is blank while no provider error is visible", "likelyCause": "The host has zero height, the script was blocked, the origin is not allowed, or initialization ran before the DOM existed.", "nextAction": "Inspect host dimensions and script/network status, surface the load error beside the text fallback, and initialize exactly once after mount." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Create a lifecycle-safe Android map - Identity: `quickstart:android-native` - Canonical: https://developer.mappls.com/quickstart/android-native ```json { "slug": "android-native", "platform": "Android", "title": "Create a lifecycle-safe Android map", "outcome": "a native map screen that survives recreation and permission denial", "duration": "25 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-android-compose-demo" ], "credentialBoundary": "Use only the documented Android credential configuration restricted to the package and signing identity. Server credentials never belong in the APK.", "evidenceBoundary": "The public repositories are sample-classified evidence; confirm Maven coordinates, BoM, AGP/Kotlin, min/target SDK, and supported release with Mappls.", "prerequisites": [ "Android Studio and a clean Kotlin app", "Confirmed AGP, Kotlin, minSdk, and targetSdk matrix", "A package/signature-restricted non-production key", "At least one physical device for release validation" ], "configure": "Pin the approved SDK and native build matrix, initialize at the documented application boundary, and keep map/view references owned by one Activity, Fragment, or Compose wrapper.", "build": "Render a map without requiring location permission; add an explicit user action that requests location and represents denied, approximate, stale, and unavailable fixes separately.", "exercise": "Build a release variant, rotate, background, revoke permission, enable battery saver, trigger process death, and reopen the screen.", "platformProof": "Camera/selection state restores intentionally and no map listener or location request survives the owning lifecycle.", "platformFailure": { "signal": "Debug works but release crashes or renders nothing", "likelyCause": "Repository, dependency, shrinker, manifest, signing restriction, architecture, or resource configuration differs in release.", "nextAction": "Resolve the release dependency graph, inspect merged manifest/resources, verify signing identity and restrictions, and test the smallest release screen on hardware." }, "runCommands": [ "./gradlew dependencies", "./gradlew assembleDebug", "./gradlew assembleRelease", "./gradlew test" ], "samples": [ { "language": "kotlin", "label": "Application-owned map contract", "code": "data class CameraState(val latitude: Double, val longitude: Double, val zoom: Double)\n\ninterface MapSurface {\n suspend fun attach(saved: CameraState?)\n fun showPlace(id: String, latitude: Double, longitude: Double)\n fun save(): CameraState\n fun detach()\n}\n\n// Keep SDK classes inside the confirmed adapter; the ViewModel owns only this contract." } ], "nextTutorialSlugs": [ "android-map", "workmate-task-lifecycle" ], "productionChecks": [ "Release dependency matrix is reproducible", "Permission denial is a complete state", "Process recreation is tested", "Native resources detach deterministically" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Android package, endpoint, toolchain, region, and account entitlement before installing anything. The public repositories are sample-classified evidence; confirm Maven coordinates, BoM, AGP/Kotlin, min/target SDK, and supported release with Mappls.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Pin the approved SDK and native build matrix, initialize at the documented application boundary, and keep map/view references owned by one Activity, Fragment, or Compose wrapper.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Render a map without requiring location permission; add an explicit user action that requests location and represents denied, approximate, stale, and unavailable fixes separately.", "proof": "The application produces the stated outcome—a native map screen that survives recreation and permission denial—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Build a release variant, rotate, background, revoke permission, enable battery saver, trigger process death, and reopen the screen.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Camera/selection state restores intentionally and no map listener or location request survives the owning lifecycle.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "Debug works but release crashes or renders nothing", "likelyCause": "Repository, dependency, shrinker, manifest, signing restriction, architecture, or resource configuration differs in release.", "nextAction": "Resolve the release dependency graph, inspect merged manifest/resources, verify signing identity and restrictions, and test the smallest release screen on hardware." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Create a lifecycle-safe iOS map - Identity: `quickstart:ios-native` - Canonical: https://developer.mappls.com/quickstart/ios-native ```json { "slug": "ios-native", "platform": "iOS", "title": "Create a lifecycle-safe iOS map", "outcome": "a native Swift map feature with explicit package and view ownership", "duration": "25 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-map-ios-distribution", "mappls-api-kit-ios-distribution" ], "credentialBoundary": "Use only the documented app credential restricted to the bundle/team context. Keep server secrets and privileged exchanges outside the application bundle.", "evidenceBoundary": "Public distribution repositories identify candidate package lines, not a universal version matrix. Confirm SwiftPM products, binary checksums, Xcode/Swift, deployment target, and extension compatibility together.", "prerequisites": [ "A clean Swift application", "Confirmed Xcode, Swift, deployment target, and package line", "A bundle-restricted non-production app credential", "An iPhone or iPad for release and lifecycle tests" ], "configure": "Resolve the approved Swift packages and checksums, initialize once at the documented app/scene boundary, and inject an application-owned provider protocol into the feature.", "build": "Present one map or place result on the main actor, keep delegates/subscriptions owned by the view model or coordinator, and offer search/manual interaction when location is denied.", "exercise": "Resolve packages from a clean clone, archive a release build, present/dismiss repeatedly, background/foreground, change permission, and trigger memory pressure.", "platformProof": "The selected place survives intended scene restoration and released views retain no delegates, observers, tasks, or background sessions.", "platformFailure": { "signal": "SwiftPM resolves but archive or launch fails", "likelyCause": "Package/binary release lines, deployment target, architecture, privacy manifest, or dependent extensions are incompatible.", "nextAction": "Inspect Package.resolved and archive linkage, verify checksums and platform slices, then confirm the complete package matrix with the owning product guide." }, "runCommands": [ "xcodebuild -resolvePackageDependencies", "xcodebuild -list", "xcodebuild test -scheme YOUR_SCHEME" ], "samples": [ { "language": "swift", "label": "SwiftUI-safe provider seam", "code": "struct Place: Equatable, Sendable { let id: String; let label: String }\n\nprotocol PlacesProviding: Sendable {\n func search(_ query: String) async throws -> [Place]\n}\n\n@MainActor final class PlacesModel: ObservableObject {\n @Published private(set) var places: [Place] = []\n private let provider: any PlacesProviding\n init(provider: any PlacesProviding) { self.provider = provider }\n func submit(_ query: String) async throws { places = try await provider.search(query) }\n}" } ], "nextTutorialSlugs": [ "ios-map" ], "productionChecks": [ "Package/binary lines are compatible", "Privacy declarations match behavior", "Main-actor and scene ownership are explicit", "Release archives are hardware-tested" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact iOS package, endpoint, toolchain, region, and account entitlement before installing anything. Public distribution repositories identify candidate package lines, not a universal version matrix. Confirm SwiftPM products, binary checksums, Xcode/Swift, deployment target, and extension compatibility together.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Resolve the approved Swift packages and checksums, initialize once at the documented app/scene boundary, and inject an application-owned provider protocol into the feature.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Present one map or place result on the main actor, keep delegates/subscriptions owned by the view model or coordinator, and offer search/manual interaction when location is denied.", "proof": "The application produces the stated outcome—a native swift map feature with explicit package and view ownership—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Resolve packages from a clean clone, archive a release build, present/dismiss repeatedly, background/foreground, change permission, and trigger memory pressure.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "The selected place survives intended scene restoration and released views retain no delegates, observers, tasks, or background sessions.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "SwiftPM resolves but archive or launch fails", "likelyCause": "Package/binary release lines, deployment target, architecture, privacy manifest, or dependent extensions are incompatible.", "nextAction": "Inspect Package.resolved and archive linkage, verify checksums and platform slices, then confirm the complete package matrix with the owning product guide." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Bridge one map feature across Android and iOS - Identity: `quickstart:react-native-map` - Canonical: https://developer.mappls.com/quickstart/react-native-map ```json { "slug": "react-native-map", "platform": "React Native", "title": "Bridge one map feature across Android and iOS", "outcome": "a typed shared map feature with separately verified native halves", "duration": "30 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-react-native-sdk" ], "credentialBoundary": "Configure Android and iOS app credentials independently and keep privileged calls on a backend. JavaScript configuration is not a secret store.", "evidenceBoundary": "The public wrapper is sample-classified. Confirm React Native, wrapper, New Architecture status, Gradle/Kotlin, Xcode/Swift, and underlying native Mappls versions as one release unit.", "prerequisites": [ "A clean React Native TypeScript app", "Approved wrapper/native version matrix", "Separate restricted Android and iOS app credentials", "Physical Android and iOS devices" ], "configure": "Complete both native project setups before importing the JavaScript component, then normalize camera, feature identity, readiness, errors, and cleanup behind a typed application wrapper.", "build": "Render one selected place, throttle high-frequency camera events, and retain an unsubscribe handle for every native subscription.", "exercise": "Build both release variants, mount/unmount repeatedly, background and restore, rotate Android, pressure iOS memory, and deny permissions independently.", "platformProof": "Android and iOS return the same application-level selected ID while platform-specific failures remain visible and attributable.", "platformFailure": { "signal": "One platform works while the other reports missing native view/module", "likelyCause": "Only one native project, dependency graph, architecture mode, autolinking step, credential restriction, or build cache is correct.", "nextAction": "Treat each platform as its own build: inspect resolved native dependencies and registration, clean only scoped build output, and prove the native example before the shared wrapper." }, "runCommands": [ "npm install", "npm run android", "npm run ios", "npm test" ], "samples": [ { "language": "typescript", "label": "Typed native map port", "code": "export type Camera = { center: [number, number]; zoom: number };\nexport type MapEvent = { type: \"ready\" } | { type: \"camera\"; value: Camera } | { type: \"error\"; code: string };\n\nexport interface NativeMapPort {\n configure(styleId: string): Promise;\n showPlace(place: { id: string; coordinate: [number, number] }): Promise;\n subscribe(listener: (event: MapEvent) => void): () => void;\n dispose(): Promise;\n}" } ], "nextTutorialSlugs": [ "react-native-map" ], "productionChecks": [ "Wrapper/native matrix is pinned", "Both release builds are proven", "Bridge traffic is bounded", "Unmount disposes every native resource" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact React Native package, endpoint, toolchain, region, and account entitlement before installing anything. The public wrapper is sample-classified. Confirm React Native, wrapper, New Architecture status, Gradle/Kotlin, Xcode/Swift, and underlying native Mappls versions as one release unit.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Complete both native project setups before importing the JavaScript component, then normalize camera, feature identity, readiness, errors, and cleanup behind a typed application wrapper.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Render one selected place, throttle high-frequency camera events, and retain an unsubscribe handle for every native subscription.", "proof": "The application produces the stated outcome—a typed shared map feature with separately verified native halves—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Build both release variants, mount/unmount repeatedly, background and restore, rotate Android, pressure iOS memory, and deny permissions independently.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Android and iOS return the same application-level selected ID while platform-specific failures remain visible and attributable.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "One platform works while the other reports missing native view/module", "likelyCause": "Only one native project, dependency graph, architecture mode, autolinking step, credential restriction, or build cache is correct.", "nextAction": "Treat each platform as its own build: inspect resolved native dependencies and registration, clean only scoped build output, and prove the native example before the shared wrapper." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Build a native-backed Flutter place picker - Identity: `quickstart:flutter-map` - Canonical: https://developer.mappls.com/quickstart/flutter-map ```json { "slug": "flutter-map", "platform": "Flutter", "title": "Build a native-backed Flutter place picker", "outcome": "a Dart form that commits one accepted Mappls place identity", "duration": "30 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-flutter-sdk", "flutter-mapmyindia-gl" ], "credentialBoundary": "Configure separately restricted Android and iOS app credentials in their native projects. Do not put server secrets in Dart assets or compile-time constants.", "evidenceBoundary": "The corpus contains Mappls sample evidence and an older current-classified MapmyIndia wrapper. Confirm the supported Flutter/Dart plugin and both native SDK lines before choosing one.", "prerequisites": [ "A clean Flutter application", "Confirmed Flutter, Dart, plugin, Android, and iOS matrix", "Restricted credentials for both native runners", "Physical devices and release signing" ], "configure": "Pin one confirmed plugin line, apply native repository/package/manifest/Info.plist steps, and own controller readiness plus disposal inside one stateful widget.", "build": "Keep query text, candidates, camera, candidate marker, and accepted place as separate states; submit only the accepted stable identity.", "exercise": "Run analyzer/tests, create Android and iOS release builds, pop/push the route repeatedly, deny permissions, rotate, and submit after editing a prior selection.", "platformProof": "The form cannot submit stale text as a selected place and platform views/controllers are disposed after navigation.", "platformFailure": { "signal": "The Dart API resolves but the platform view fails at runtime", "likelyCause": "Android/iOS native configuration, plugin/native version, renderer, architecture, permission, or credential setup is incomplete.", "nextAction": "Run the plugin's minimal native-backed screen on each platform, inspect native logs and dependency graphs, and wait for controller readiness before commands." }, "runCommands": [ "flutter pub get", "flutter analyze", "flutter test", "flutter build apk", "flutter build ios --no-codesign" ], "samples": [ { "language": "dart", "label": "Explicit place selection model", "code": "class PlaceSelection {\n final String id;\n final String label;\n const PlaceSelection(this.id, this.label);\n}\n\nclass PlacePickerState {\n String query = '';\n PlaceSelection? accepted;\n void edit(String value) { query = value; accepted = null; }\n void accept(PlaceSelection place) { query = place.label; accepted = place; }\n void validate() { if (accepted == null) throw StateError('select_a_place'); }\n}" } ], "nextTutorialSlugs": [ "flutter-map" ], "productionChecks": [ "Both runner configurations are versioned", "Controller readiness is awaited", "Selection state is explicit", "Physical-device releases are tested" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Flutter package, endpoint, toolchain, region, and account entitlement before installing anything. The corpus contains Mappls sample evidence and an older current-classified MapmyIndia wrapper. Confirm the supported Flutter/Dart plugin and both native SDK lines before choosing one.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Pin one confirmed plugin line, apply native repository/package/manifest/Info.plist steps, and own controller readiness plus disposal inside one stateful widget.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Keep query text, candidates, camera, candidate marker, and accepted place as separate states; submit only the accepted stable identity.", "proof": "The application produces the stated outcome—a dart form that commits one accepted mappls place identity—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Run analyzer/tests, create Android and iOS release builds, pop/push the route repeatedly, deny permissions, rotate, and submit after editing a prior selection.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "The form cannot submit stale text as a selected place and platform views/controllers are disposed after navigation.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "The Dart API resolves but the platform view fails at runtime", "likelyCause": "Android/iOS native configuration, plugin/native version, renderer, architecture, permission, or credential setup is incomplete.", "nextAction": "Run the plugin's minimal native-backed screen on each platform, inspect native logs and dependency graphs, and wait for controller readiness before commands." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Stabilize a Cordova map before migration - Identity: `quickstart:cordova-maintenance` - Canonical: https://developer.mappls.com/quickstart/cordova-maintenance ```json { "slug": "cordova-maintenance", "platform": "Cordova", "title": "Stabilize a Cordova map before migration", "outcome": "a reproducible legacy screen behind a replaceable capability facade", "duration": "35 minutes", "readiness": "legacy-maintenance", "sourceGuideSlugs": [ "mapmyindia-map-cordova-ionic-beta", "mapmyindia-restapi-cordova-ionic-beta" ], "credentialBoundary": "Treat all client credentials as platform-restricted public credentials and keep privileged REST work on a backend. Never reuse legacy auth with a current host by resemblance.", "evidenceBoundary": "Only legacy/beta Cordova sources exist in the public corpus. This quickstart is for stabilizing an existing estate—not recommending Cordova for new development. Use the migration track to select a supported target.", "prerequisites": [ "An existing Cordova/Ionic repository", "A reproducible lockfile and build-host image", "Inventory of plugins, native SDKs, credentials, signing, and store constraints", "A chosen migration owner and target decision date" ], "configure": "Freeze Cordova, Ionic, plugin, Android, iOS, JDK, Xcode, and Mappls dependencies; move every map/REST call behind a narrow serializable facade before changing behavior.", "build": "Prove one existing search-and-map journey after deviceready, preserve its selected identity above the plugin, and implement a browser/deep-link fallback.", "exercise": "Create clean Android and iOS builds from the lockfile, enter/leave the page repeatedly, simulate plugin absence, and run the corresponding migration track parity test.", "platformProof": "One legacy journey is reproducible, has a fallback, and can switch to a replacement adapter without changing domain state.", "platformFailure": { "signal": "A fresh machine cannot reproduce the signed build", "likelyCause": "Unpinned Node/Cordova/plugin/native build inputs, removed repositories, certificates, or generated native edits are part of the hidden build.", "nextAction": "Capture the entire toolchain manifest and generated-project changes before feature work; if dependencies are unavailable, prioritize the migration seam and replacement cohort." }, "runCommands": [ "npm ci", "cordova requirements", "cordova prepare", "cordova build android", "cordova build ios" ], "samples": [ { "language": "typescript", "label": "Strangler facade", "code": "type LocationFacade = {\n search(query: string): Promise>;\n openMap(placeId: string): Promise;\n};\n\nexport async function ready(facade: LocationFacade) {\n await new Promise((resolve) => document.addEventListener(\"deviceready\", () => resolve(), { once: true }));\n return facade; // plugin-specific calls remain inside the injected legacy adapter\n}" } ], "nextTutorialSlugs": [ "cordova-map" ], "productionChecks": [ "Legacy status is explicit", "Every build input is frozen", "Facade inputs are bounded", "Migration and rollback paths are tested" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Cordova package, endpoint, toolchain, region, and account entitlement before installing anything. Only legacy/beta Cordova sources exist in the public corpus. This quickstart is for stabilizing an existing estate—not recommending Cordova for new development. Use the migration track to select a supported target.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Freeze Cordova, Ionic, plugin, Android, iOS, JDK, Xcode, and Mappls dependencies; move every map/REST call behind a narrow serializable facade before changing behavior.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Prove one existing search-and-map journey after deviceready, preserve its selected identity above the plugin, and implement a browser/deep-link fallback.", "proof": "The application produces the stated outcome—a reproducible legacy screen behind a replaceable capability facade—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Create clean Android and iOS builds from the lockfile, enter/leave the page repeatedly, simulate plugin absence, and run the corresponding migration track parity test.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "One legacy journey is reproducible, has a fallback, and can switch to a replacement adapter without changing domain state.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "A fresh machine cannot reproduce the signed build", "likelyCause": "Unpinned Node/Cordova/plugin/native build inputs, removed repositories, certificates, or generated native edits are part of the hidden build.", "nextAction": "Capture the entire toolchain manifest and generated-project changes before feature work; if dependencies are unavailable, prioritize the migration seam and replacement cohort." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Extract a Xamarin map integration for replacement - Identity: `quickstart:xamarin-maintenance` - Canonical: https://developer.mappls.com/quickstart/xamarin-maintenance ```json { "slug": "xamarin-maintenance", "platform": "Xamarin", "title": "Extract a Xamarin map integration for replacement", "outcome": "a shared .NET contract with independently owned Android and iOS adapters", "duration": "40 minutes", "readiness": "entitlement-required", "sourceGuideSlugs": [], "credentialBoundary": "Use separately restricted native app credentials and keep privileged service credentials on a backend. Do not move secrets into shared assemblies during extraction.", "evidenceBoundary": "No public repository in the snapshot provides a current Xamarin successor. Obtain the existing binding/source and target-platform contract from Mappls and use the migration principles before implementation.", "prerequisites": [ "An existing Xamarin solution and reproducible build host", "Inventory of NuGet packages, native bindings, binaries, and licenses", "Android and iOS journey fixtures", "A confirmed supported migration target" ], "configure": "Move place IDs, domain commands, view models, and persistence interfaces into a framework-independent library; leave native views, delegates, permissions, and Mappls symbols in platform adapters.", "build": "Freeze one search-select-map journey as shared contract tests and implement it through the existing Android/iOS adapters without changing UI behavior.", "exercise": "Build both platform release configurations from a clean host, navigate/recreate pages, dispose renderers, and run the same fixture contract against the selected replacement adapter.", "platformProof": "Shared tests prove equivalent place identity and errors while no shared state retains a native view, context, delegate, or credential.", "platformFailure": { "signal": "Shared tests pass but a platform leaks or crashes after navigation", "likelyCause": "Renderer/delegate/event ownership remains implicit or native callbacks target a disposed shared object.", "nextAction": "Trace creation, subscription, disappearance, disposal, and late callbacks per platform; introduce cancellation/version fencing at the adapter boundary." }, "runCommands": [ "dotnet restore", "dotnet test", "dotnet build -c Release" ], "samples": [ { "language": "csharp", "label": ".NET capability contract", "code": "public sealed record Place(string Id, string Label, double Latitude, double Longitude);\n\npublic interface IPlacesProvider\n{\n Task> SearchAsync(string query, CancellationToken cancellation);\n}\n\n// Xamarin and replacement adapters implement the same fixture-tested interface.\npublic sealed class PlacesFeature(IPlacesProvider provider)\n{\n public Task> Search(string query, CancellationToken ct) => provider.SearchAsync(query, ct);\n}" } ], "nextTutorialSlugs": [ "xamarin-map" ], "productionChecks": [ "Support posture is documented", "Both native builds are reproducible", "Shared code owns no native resources", "Journey parity determines migration" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Xamarin package, endpoint, toolchain, region, and account entitlement before installing anything. No public repository in the snapshot provides a current Xamarin successor. Obtain the existing binding/source and target-platform contract from Mappls and use the migration principles before implementation.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Move place IDs, domain commands, view models, and persistence interfaces into a framework-independent library; leave native views, delegates, permissions, and Mappls symbols in platform adapters.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Freeze one search-select-map journey as shared contract tests and implement it through the existing Android/iOS adapters without changing UI behavior.", "proof": "The application produces the stated outcome—a shared .net contract with independently owned android and ios adapters—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Build both platform release configurations from a clean host, navigate/recreate pages, dispose renderers, and run the same fixture contract against the selected replacement adapter.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Shared tests prove equivalent place identity and errors while no shared state retains a native view, context, delegate, or credential.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "Shared tests pass but a platform leaks or crashes after navigation", "likelyCause": "Renderer/delegate/event ownership remains implicit or native callbacks target a disposed shared object.", "nextAction": "Trace creation, subscription, disappearance, disposal, and late callbacks per platform; introduce cancellation/version fencing at the adapter boundary." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Boot a supervised embedded map client - Identity: `quickstart:linux-embedded` - Canonical: https://developer.mappls.com/quickstart/linux-embedded ```json { "slug": "linux-embedded", "platform": "Linux", "title": "Boot a supervised embedded map client", "outcome": "a health-checked native process with an atomic data/runtime boundary", "duration": "45 minutes", "readiness": "entitlement-required", "sourceGuideSlugs": [], "credentialBoundary": "Use device/workload identity and entitlement delivered through the approved provisioning channel; never bake fleet-wide secrets into an image or package.", "evidenceBoundary": "The public snapshot has no platform-specific Linux distribution guide. The runtime, ABI, compiler, graphics, activation, and data contract must come from the entitled private distribution.", "prerequisites": [ "Target CPU, ABI, libc, GPU/graphics, OS image, storage, and sensor manifest", "Entitled runtime, data, license, and activation contract", "A supervised service environment", "Dual-slot storage or another atomic rollback mechanism" ], "configure": "Validate runtime/data/compiler compatibility and signatures before installing; run the application with explicit read-only runtime/data and isolated writable state under a supervisor.", "build": "Expose liveness, readiness, active runtime/data versions, activation state, and last safe error; render a deterministic offline fixture before enabling live data.", "exercise": "Cold boot without network, kill/restart the process, fill staging storage, corrupt a staged package, and interrupt power before/after the atomic activation pointer.", "platformProof": "Every test leaves exactly one bootable active runtime/data set and health reports the selected versions without leaking device credentials.", "platformFailure": { "signal": "The process starts but rendering or routing fails on target hardware", "likelyCause": "ABI/libc/compiler/GPU/runtime/data epoch or activation is incompatible despite a successful file copy.", "nextAction": "Compare the signed release manifest to device facts, fail readiness, retain the previous slot, and obtain the exact compatibility decision from the runtime owner." }, "runCommands": [ "cmake -S . -B build -DCMAKE_BUILD_TYPE=Release", "cmake --build build", "ctest --test-dir build", "./build/mappls_client --self-test" ], "samples": [ { "language": "cpp", "label": "Supervised runtime boundary", "code": "struct RuntimeHealth { bool live; bool ready; std::string runtimeVersion; std::string dataVersion; };\n\nclass MapRuntime {\npublic:\n virtual ~MapRuntime() = default;\n virtual RuntimeHealth health() const = 0;\n virtual void renderFixture() = 0;\n virtual void shutdown() noexcept = 0;\n};\n\n// The entitled SDK adapter is selected only after manifest and activation checks." } ], "nextTutorialSlugs": [ "linux-map-client", "offline-package-update" ], "productionChecks": [ "Runtime/data compatibility is enforced", "Activation can rotate", "Updates are signed and reversible", "Health survives process restart" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Linux package, endpoint, toolchain, region, and account entitlement before installing anything. The public snapshot has no platform-specific Linux distribution guide. The runtime, ABI, compiler, graphics, activation, and data contract must come from the entitled private distribution.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Validate runtime/data/compiler compatibility and signatures before installing; run the application with explicit read-only runtime/data and isolated writable state under a supervisor.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Expose liveness, readiness, active runtime/data versions, activation state, and last safe error; render a deterministic offline fixture before enabling live data.", "proof": "The application produces the stated outcome—a health-checked native process with an atomic data/runtime boundary—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Cold boot without network, kill/restart the process, fill staging storage, corrupt a staged package, and interrupt power before/after the atomic activation pointer.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Every test leaves exactly one bootable active runtime/data set and health reports the selected versions without leaking device credentials.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "The process starts but rendering or routing fails on target hardware", "likelyCause": "ABI/libc/compiler/GPU/runtime/data epoch or activation is incompatible despite a successful file copy.", "nextAction": "Compare the signed release manifest to device facts, fail readiness, retain the previous slot, and obtain the exact compatibility decision from the runtime owner." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Simulate one recoverable navigation session - Identity: `quickstart:automotive-navigation` - Canonical: https://developer.mappls.com/quickstart/automotive-navigation ```json { "slug": "automotive-navigation", "platform": "Automotive", "title": "Simulate one recoverable navigation session", "outcome": "a safety-aware route-to-arrival state machine over an entitled runtime", "duration": "60 minutes", "readiness": "entitlement-required", "sourceGuideSlugs": [], "credentialBoundary": "Provision per-device identity, activation, regions, runtime, and map data through the approved vehicle/fleet control plane. Avoid shared embedded credentials.", "evidenceBoundary": "The public snapshot does not establish an automotive SDK or safety contract. Obtain the entitled runtime, data, activation, vehicle-interface, HMI, and regulatory requirements before binding an adapter.", "prerequisites": [ "Vehicle hardware/OS/display/control/sensor operating envelope", "Entitled runtime, map data, activation, and update contract", "Deterministic GNSS and vehicle-signal simulator", "Safety, distraction, privacy, and release owners" ], "configure": "Separate vehicle signals and HMI policy from the navigation runtime, pin runtime/data/config/activation as one release manifest, and expose route lifecycle through a recoverable application state machine.", "build": "Simulate plan, preview, start, progress, deviation, reroute, tunnel/dead-reckoning, pause, arrival, and termination without requiring a road vehicle.", "exercise": "Replay deterministic traces across process restart, power loss, sensor loss, offline periods, map-data switch, invalid activation, and rollback before road testing.", "platformProof": "The session recovers to a safe explainable state with compatible runtime/data and never presents stale guidance as current after a reset.", "platformFailure": { "signal": "Guidance resumes with an old route or unsafe prompt after restart", "likelyCause": "Route/session version, position freshness, vehicle state, HMI policy, or runtime/data identity was not persisted and reconciled atomically.", "nextAction": "Fail guidance to a safe state, reconcile session and release manifest, replay the deterministic trace, and require simulation evidence before road testing." }, "runCommands": [ "cmake -S . -B build -DCMAKE_BUILD_TYPE=Release", "cmake --build build", "ctest --test-dir build -R navigation", "./build/navigation_simulator fixtures/deviation.json" ], "samples": [ { "language": "cpp", "label": "Navigation state model", "code": "enum class NavigationState { Idle, Planned, Preview, Guiding, Rerouting, Paused, Arrived, Failed };\n\nstruct NavigationSnapshot {\n std::string sessionId;\n std::uint64_t version;\n NavigationState state;\n std::string runtimeVersion;\n std::string dataVersion;\n};\n\n// Persist each accepted transition and reconcile position freshness after restart." } ], "nextTutorialSlugs": [ "offline-package-update", "linux-map-client" ], "productionChecks": [ "Driver-distraction rules are testable", "Power/connectivity recovery is proven", "Runtime and data roll out together", "Simulation precedes road evidence" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Automotive package, endpoint, toolchain, region, and account entitlement before installing anything. The public snapshot does not establish an automotive SDK or safety contract. Obtain the entitled runtime, data, activation, vehicle-interface, HMI, and regulatory requirements before binding an adapter.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Separate vehicle signals and HMI policy from the navigation runtime, pin runtime/data/config/activation as one release manifest, and expose route lifecycle through a recoverable application state machine.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Simulate plan, preview, start, progress, deviation, reroute, tunnel/dead-reckoning, pause, arrival, and termination without requiring a road vehicle.", "proof": "The application produces the stated outcome—a safety-aware route-to-arrival state machine over an entitled runtime—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Replay deterministic traces across process restart, power loss, sensor loss, offline periods, map-data switch, invalid activation, and rollback before road testing.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "The session recovers to a safe explainable state with compatible runtime/data and never presents stale guidance as current after a reset.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "Guidance resumes with an old route or unsafe prompt after restart", "likelyCause": "Route/session version, position freshness, vehicle state, HMI policy, or runtime/data identity was not persisted and reconciled atomically.", "nextAction": "Fail guidance to a safe state, reconcile session and release manifest, replay the deterministic trace, and require simulation evidence before road testing." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Embed a place journey with an owned fallback - Identity: `quickstart:widgets-place` - Canonical: https://developer.mappls.com/quickstart/widgets-place ```json { "slug": "widgets-place", "platform": "Widgets", "title": "Embed a place journey with an owned fallback", "outcome": "an accessible host that validates one widget result and survives widget failure", "duration": "20 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-web-plugins" ], "credentialBoundary": "Use only the widget/browser credential class restricted to exact origins. Validate every postMessage/callback payload and keep privileged operations on the server.", "evidenceBoundary": "The current public Web Plugins guide spans current vector and legacy raster integration branches; source activity is not a support promise. Confirm the exact widget, script, origin, event schema, release, entitlement, and authentication line before implementation.", "prerequisites": [ "A confirmed Mappls widget and auth generation", "Exact host and allowed widget origins", "An accessible host form and manual fallback", "A versioned callback/message schema" ], "configure": "Load the confirmed widget only from an allow-listed origin, give its host a visible label/status/fallback, and validate origin, schema version, size, and field types before accepting events.", "build": "Commit only a stable Mappls place identity plus display label into application state; invalidate it when host text changes and keep a manual/search fallback available.", "exercise": "Block the script/frame, send wrong-origin and malformed messages, resize to mobile, use keyboard/screen reader, and navigate away/back twice.", "platformProof": "The host submits only a validated selected identity and remains usable when the widget is slow, blocked, denied, or unavailable.", "platformFailure": { "signal": "The widget displays but selection never reaches the form", "likelyCause": "Origin, callback name, event schema/version, load timing, or host state invalidation differs from the confirmed integration line.", "nextAction": "Log only safe message metadata, verify exact origin/schema from the guide, reject unknown shapes, and keep the visible fallback active." }, "runCommands": [ "npm install", "npm run dev", "npm run test", "npm run build" ], "samples": [ { "language": "typescript", "label": "Validated widget hand-off", "code": "type PlaceMessage = { version: 1; type: \"place.selected\"; place: { id: string; label: string } };\n\nexport function acceptWidgetMessage(event: MessageEvent, allowedOrigin: string): PlaceMessage | null {\n if (event.origin !== allowedOrigin || !event.data || event.data.version !== 1) return null;\n if (event.data.type !== \"place.selected\" || typeof event.data.place?.id !== \"string\") return null;\n return event.data as PlaceMessage;\n}" } ], "nextTutorialSlugs": [ "web-widget-place-picker" ], "productionChecks": [ "Supported status is confirmed", "Origins and payloads are validated", "Fallback is complete", "Keyboard and screen-reader behavior is tested" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Widgets package, endpoint, toolchain, region, and account entitlement before installing anything. The current public Web Plugins guide spans current vector and legacy raster integration branches; source activity is not a support promise. Confirm the exact widget, script, origin, event schema, release, entitlement, and authentication line before implementation.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Load the confirmed widget only from an allow-listed origin, give its host a visible label/status/fallback, and validate origin, schema version, size, and field types before accepting events.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Commit only a stable Mappls place identity plus display label into application state; invalidate it when host text changes and keep a manual/search fallback available.", "proof": "The application produces the stated outcome—an accessible host that validates one widget result and survives widget failure—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Block the script/frame, send wrong-origin and malformed messages, resize to mobile, use keyboard/screen reader, and navigate away/back twice.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "The host submits only a validated selected identity and remains usable when the widget is slow, blocked, denied, or unavailable.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "The widget displays but selection never reaches the form", "likelyCause": "Origin, callback name, event schema/version, load timing, or host state invalidation differs from the confirmed integration line.", "nextAction": "Log only safe message metadata, verify exact origin/schema from the guide, reject unknown shapes, and keep the visible fallback active." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Ship one zero-SDK Mappls hand-off - Identity: `quickstart:deep-links` - Canonical: https://developer.mappls.com/quickstart/deep-links ```json { "slug": "deep-links", "platform": "Deep links", "title": "Ship one zero-SDK Mappls hand-off", "outcome": "a place link that reaches the same intent across app and browser fallbacks", "duration": "10 minutes", "readiness": "public-source", "sourceGuideSlugs": [ "mappls-app-widgets" ], "credentialBoundary": "Deep links contain no credential. Put only bounded non-sensitive intent in the URL; precise private/user data and server secrets must never become query parameters.", "evidenceBoundary": "Use the exact link shape documented by the current App Widgets source. The scaffold below deliberately receives that approved base rather than inventing an undocumented path.", "prerequisites": [ "A stable Mappls place identity or validated destination", "The exact documented link template", "Installed/uninstalled Android and iOS test devices", "Browser, messaging, email, and QR test channels" ], "configure": "Store the documented allow-listed base and construct URL components with the platform URL library; never concatenate user input or allow it to change origin/path shape.", "build": "Render human-readable destination context, the hand-off link, and a copyable/browser fallback that preserve the same stable intent.", "exercise": "Test installed/uninstalled app, mobile/desktop browsers, messaging, email, QR, in-app webviews, offline state, and rewritten links.", "platformProof": "Every supported channel reaches the same destination intent or a useful visible fallback without sensitive query data.", "platformFailure": { "signal": "A channel opens a generic page or different destination", "likelyCause": "The association, link shape, encoding, redirector, app installation state, or channel rewriting altered the documented intent.", "nextAction": "Compare the final URL components without private data, bypass unapproved redirectors, and retest installed/uninstalled fallback against the exact guide." }, "runCommands": [ "npm test", "npm run build" ], "samples": [ { "language": "javascript", "label": "Safe documented-link builder", "code": "export function buildMapplsHandoff(approvedBase, placeId) {\n const url = new URL(approvedBase);\n if (url.protocol !== \"https:\" || !/^(?:www.)?mappls.com$/.test(url.hostname)) throw new Error(\"unapproved_base\");\n if (!/^[A-Za-z0-9_-]{3,40}$/.test(placeId)) throw new Error(\"invalid_place_id\");\n url.searchParams.set(\"place\", placeId); // Use only the parameter name confirmed by the source guide.\n return url.toString();\n}" } ], "nextTutorialSlugs": [ "deep-link-campaign", "navigation-deep-link" ], "productionChecks": [ "No private data is encoded", "All values are validated and encoded", "App/browser intent matches", "Redirect domains are allow-listed" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact Deep links package, endpoint, toolchain, region, and account entitlement before installing anything. Use the exact link shape documented by the current App Widgets source. The scaffold below deliberately receives that approved base rather than inventing an undocumented path.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Store the documented allow-listed base and construct URL components with the platform URL library; never concatenate user input or allow it to change origin/path shape.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Render human-readable destination context, the hand-off link, and a copyable/browser fallback that preserve the same stable intent.", "proof": "The application produces the stated outcome—a place link that reaches the same intent across app and browser fallbacks—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Test installed/uninstalled app, mobile/desktop browsers, messaging, email, QR, in-app webviews, offline state, and rewritten links.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Every supported channel reaches the same destination intent or a useful visible fallback without sensitive query data.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "A channel opens a generic page or different destination", "likelyCause": "The association, link shape, encoding, redirector, app installation state, or channel rewriting altered the documented intent.", "nextAction": "Compare the final URL components without private data, bypass unapproved redirectors, and retest installed/uninstalled fallback against the exact guide." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## quickstart · Connect a read-only Mappls agent - Identity: `quickstart:mcp-agent` - Canonical: https://developer.mappls.com/quickstart/mcp-agent ```json { "slug": "mcp-agent", "platform": "MCP", "title": "Connect a read-only Mappls agent", "outcome": "a grounded documentation query through local stdio or authenticated stateless HTTP", "duration": "15 minutes", "readiness": "local-reference", "sourceGuideSlugs": [], "credentialBoundary": "Keep provider credentials in the MCP server process or approved secret provider, never model context or client configuration committed to source. A remote internal gateway bearer or issuer-bound OAuth access token is independent from every Mappls provider credential. Documentation and migration tools require no live credential.", "evidenceBoundary": "The MCP implementation is maintained in this repository and protocol-tested over stdio and Streamable HTTP. Live tool success still depends on the issued account, operation, region, and credential scope; production OAuth authorization-server registration, consent, lifecycle, and revocation remain company integrations.", "prerequisites": [ "Node.js 22 or newer", "An MCP-capable client or the downloadable Spatial Operations Agent", "A built `@mappls/mcp-server` package", "No credential for offline discovery; separately scoped non-production credentials only for approved live reads" ], "configure": "Build the server; start the Spatial Operations Agent in fixture mode or register its absolute local stdio entrypoint or exact authenticated HTTPS Streamable HTTP resource; keep the default remote profile offline; choose the controlled static-bearer hop or OAuth JWT resource-server mode; keep gateway and provider credentials separate; and grant no state-changing Mappls operation.", "build": "Run the sample's solution_research journey across any of sixteen industries and thirteen target platforms, generate the portable integration manifest, then call the product-platform capability matrix, capability qualification planner, and live-conformance planner, documentation search, generation comparison, documentation coverage, and the exact stateful journey workshop before proposing integration code.", "exercise": "Run both server protocol suites and the fifteen-test agent suite; prove the default remote endpoint lists only 32 credential-free tools and rejects a hidden live call; execute one real stdio offline solution plan and integration manifest; retrieve one exact product-platform decision, its six-phase qualification journey, a bounded live-conformance plan, and an eight-lab journey workshop; prove exact generation differences and coverage gaps remain visible and ambiguous authentication choices remain selection-required; validate protected-resource discovery plus wrong-audience/expired/insufficient-scope tokens; reject unauthorized, wrong-origin, unsafe URL, oversized-body/output, missing-provenance, and token-reflection paths; and verify credential-shaped failures are redacted.", "platformProof": "Fixture, real stdio, and remote HTTP share one governed application client contract. Local stdio and an explicit live-read deployment advertise 42 typed tools; default remote HTTP advertises only the 32 credential-free tools. Both profiles retain 38 resources and two prompts, OAuth mode binds an attributable principal/client/scope to the exact resource, remote HTTP retains no session registry, and no profile exposes writes.", "platformFailure": { "signal": "The client starts but lists no tools/resources, or a planned tool is unavailable", "likelyCause": "The package was not built, the stdio path/runtime or remote URL/auth is wrong, the configured profile is offline while the plan needs live-read, JWT issuer/audience/scope is mismatched, stdout contains non-protocol output, or a host/origin allowlist rejected the client.", "nextAction": "Run the package build and protocol test directly, use solution_research and mappls_get_authentication_path to prove offline negotiation and credential placement, check credential-free health and protected-resource metadata, inspect only safe token classification, verify the absolute local entrypoint or exact HTTPS resource identity, then reconnect with the smallest profile." }, "runCommands": [ "npm run build --workspace @mappls/mcp-server", "npm run test --workspace @mappls/mcp-server", "node packages/mcp-server/dist/index.js", "MAPPLS_MCP_HTTP_BEARER_TOKEN=YOUR_INDEPENDENT_32_BYTE_SECRET npm run start:http --workspace @mappls/mcp-server" ], "samples": [ { "language": "json", "label": "Local stdio client", "code": "{\n \"mcpServers\": {\n \"mappls\": {\n \"command\": \"node\",\n \"args\": [\"/absolute/path/packages/mcp-server/dist/index.js\"],\n \"env\": {\n \"MAPPLS_STATIC_KEY\": \"${MAPPLS_STATIC_KEY}\",\n \"MAPPLS_INTOUCH_ACCESS_TOKEN\": \"${MAPPLS_INTOUCH_ACCESS_TOKEN}\"\n }\n }\n }\n}" }, { "language": "json", "label": "Remote Streamable HTTP client", "code": "{\n \"mcpServers\": {\n \"mappls-remote\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.developers.example.com/mcp\",\n \"headers\": { \"Authorization\": \"Bearer ${MAPPLS_MCP_REMOTE_TOKEN}\" }\n }\n }\n}" } ], "nextTutorialSlugs": [ "mappls-mcp-agent" ], "productionChecks": [ "Tools have least authority", "Gateway/OAuth and provider credentials are independent", "Issuer, resource audience, principal, client, expiry, and profile scope are enforced", "Consent, rate limiting, revocation, TLS, and egress are production-governed", "Writes require separate design/approval", "Results preserve provenance", "Calls are scoped, metered, redacted, and traceable" ], "steps": [ { "title": "Confirm the source line", "instruction": "Open the linked evidence and confirm the exact MCP package, endpoint, toolchain, region, and account entitlement before installing anything. The MCP implementation is maintained in this repository and protocol-tested over stdio and Streamable HTTP. Live tool success still depends on the issued account, operation, region, and credential scope; production OAuth authorization-server registration, consent, lifecycle, and revocation remain company integrations.", "proof": "Record the guide slug, source fingerprint, selected version or contract generation, and approving owner in the project README." }, { "title": "Create a clean boundary", "instruction": "Build the server; start the Spatial Operations Agent in fixture mode or register its absolute local stdio entrypoint or exact authenticated HTTPS Streamable HTTP resource; keep the default remote profile offline; choose the controlled static-bearer hop or OAuth JWT resource-server mode; keep gateway and provider credentials separate; and grant no state-changing Mappls operation.", "proof": "A clean checkout resolves dependencies and configuration without a credential in source, generated assets, logs, or screenshots." }, { "title": "Build one useful result", "instruction": "Run the sample's solution_research journey across any of sixteen industries and thirteen target platforms, generate the portable integration manifest, then call the product-platform capability matrix, capability qualification planner, and live-conformance planner, documentation search, generation comparison, documentation coverage, and the exact stateful journey workshop before proposing integration code.", "proof": "The application produces the stated outcome—a grounded documentation query through local stdio or authenticated stateless http—through one application-owned interface." }, { "title": "Run the release path", "instruction": "Run both server protocol suites and the fifteen-test agent suite; prove the default remote endpoint lists only 32 credential-free tools and rejects a hidden live call; execute one real stdio offline solution plan and integration manifest; retrieve one exact product-platform decision, its six-phase qualification journey, a bounded live-conformance plan, and an eight-lab journey workshop; prove exact generation differences and coverage gaps remain visible and ambiguous authentication choices remain selection-required; validate protected-resource discovery plus wrong-audience/expired/insufficient-scope tokens; reject unauthorized, wrong-origin, unsafe URL, oversized-body/output, missing-provenance, and token-reflection paths; and verify credential-shaped failures are redacted.", "proof": "The documented command or platform release workflow succeeds from a clean environment, not only an already-configured IDE or debug session." }, { "title": "Break it deliberately", "instruction": "Exercise missing/denied credentials, unavailable network or runtime, invalid input, cancellation, and cleanup. Show a bounded user-safe failure while retaining a correlation identity for support.", "proof": "The failure plan is automated or captured as repeatable evidence, and no fixture behavior is represented as live Mappls data." } ], "verification": [ "Fixture, real stdio, and remote HTTP share one governed application client contract. Local stdio and an explicit live-read deployment advertise 42 typed tools; default remote HTTP advertises only the 32 credential-free tools. Both profiles retain 38 resources and two prompts, OAuth mode binds an attributable principal/client/scope to the exact resource, remote HTTP retains no session registry, and no profile exposes writes.", "A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result.", "No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts.", "Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends." ], "debugging": [ { "signal": "The client starts but lists no tools/resources, or a planned tool is unavailable", "likelyCause": "The package was not built, the stdio path/runtime or remote URL/auth is wrong, the configured profile is offline while the plan needs live-read, JWT issuer/audience/scope is mismatched, stdout contains non-protocol output, or a host/origin allowlist rejected the client.", "nextAction": "Run the package build and protocol test directly, use solution_research and mappls_get_authentication_path to prove offline negotiation and credential placement, check credential-free health and protected-resource metadata, inspect only safe token classification, verify the absolute local entrypoint or exact HTTPS resource identity, then reconnect with the smallest profile." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match.", "nextAction": "Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet." }, { "signal": "The sample works once but not after reload, backgrounding, or a second run", "likelyCause": "Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete.", "nextAction": "Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ] } ``` ## capability-decision · Maps · REST - Identity: `capability-decision:maps--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=rest - State model: stateless ```json { "id": "maps--rest", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "trusted-service", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "route-preview", "title": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "static-map-receipt", "title": "Generate static maps for receipts and notifications", "href": "/tutorials/static-map-receipt" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 9, "sdks": 1, "apiOperations": 21, "tutorials": 4, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/route-preview", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=rest", "apiPath": "/api/capability-matrix?product=maps&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Web - Identity: `capability-decision:maps--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=web - State model: stateless ```json { "id": "maps--web", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-geoanalytics-api-web", "title": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "first-web-map", "title": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "route-preview", "title": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "nearby-discovery", "title": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 9, "sdks": 2, "apiOperations": 0, "tutorials": 6, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/first-web-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=web", "apiPath": "/api/capability-matrix?product=maps&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Android - Identity: `capability-decision:maps--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=android - State model: stateless ```json { "id": "maps--android", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "android-map", "title": "Add Mappls to an Android app", "href": "/tutorials/android-map" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 4, "sdks": 3, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/android-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=android", "apiPath": "/api/capability-matrix?product=maps&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · iOS - Identity: `capability-decision:maps--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=ios - State model: stateless ```json { "id": "maps--ios", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/sdks/mapmyindia-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-map", "title": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 30, "sdks": 30, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/ios-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=ios", "apiPath": "/api/capability-matrix?product=maps&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · React Native - Identity: `capability-decision:maps--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=react-native - State model: stateless ```json { "id": "maps--react-native", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-map", "title": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 2, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/react-native-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=react-native", "apiPath": "/api/capability-matrix?product=maps&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Flutter - Identity: `capability-decision:maps--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=flutter - State model: stateless ```json { "id": "maps--flutter", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/reference/mappls-flutter-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/sdks/flutter-mapmyindia-gl" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/sdks/mappls-flutter-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-map", "title": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/flutter-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=flutter", "apiPath": "/api/capability-matrix?product=maps&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Cordova - Identity: `capability-decision:maps--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=cordova - State model: stateless ```json { "id": "maps--cordova", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-cordova-ionic-beta", "title": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "cordova-map", "title": "Ship a Mappls map in Cordova and Ionic", "href": "/tutorials/cordova-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "href": "/tutorials/cordova-release-hardening" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/cordova-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=cordova", "apiPath": "/api/capability-matrix?product=maps&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Xamarin - Identity: `capability-decision:maps--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=xamarin - State model: stateless ```json { "id": "maps--xamarin", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [ { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "xamarin-map", "title": "Integrate Mappls into a Xamarin application", "href": "/tutorials/xamarin-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "xamarin-maintenance-migration", "title": "Harden and migrate a Xamarin location feature", "href": "/tutorials/xamarin-maintenance-migration" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/xamarin-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=maps&platform=xamarin", "apiPath": "/api/capability-matrix?product=maps&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Linux - Identity: `capability-decision:maps--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=linux - State model: stateless ```json { "id": "maps--linux", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/linux-map-client", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=maps&platform=linux", "apiPath": "/api/capability-matrix?product=maps&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Automotive - Identity: `capability-decision:maps--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=automotive - State model: stateless ```json { "id": "maps--automotive", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/tutorials/linux-map-client", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=maps&platform=automotive", "apiPath": "/api/capability-matrix?product=maps&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Widgets - Identity: `capability-decision:maps--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=widgets - State model: stateless ```json { "id": "maps--widgets", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/quickstart/widgets-place", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=maps&platform=widgets", "apiPath": "/api/capability-matrix?product=maps&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · Deep links - Identity: `capability-decision:maps--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=deep-links - State model: stateless ```json { "id": "maps--deep-links", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=maps&platform=deep-links", "apiPath": "/api/capability-matrix?product=maps&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Maps · MCP - Identity: `capability-decision:maps--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=maps&platform=mcp - State model: stateless ```json { "id": "maps--mcp", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "ai-client", "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 0 }, "primaryHref": "/quickstart/mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=maps&platform=mcp", "apiPath": "/api/capability-matrix?product=maps&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · REST - Identity: `capability-decision:search-places--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=rest - State model: stateless ```json { "id": "search-places--rest", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "trusted-service", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "address-autocomplete", "title": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "rest-geocode-service", "title": "Build a server-side geocoding boundary", "href": "/tutorials/rest-geocode-service" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "reverse-geocode-check-in", "title": "Turn a device fix into a trustworthy check-in", "href": "/tutorials/reverse-geocode-check-in" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "distance-matrix-dispatch", "title": "Rank responders with a distance matrix", "href": "/tutorials/distance-matrix-dispatch" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 7, "sdks": 1, "apiOperations": 21, "tutorials": 5, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/address-autocomplete", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=rest", "apiPath": "/api/capability-matrix?product=search-places&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Web - Identity: `capability-decision:search-places--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=web - State model: stateless ```json { "id": "search-places--web", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "address-autocomplete", "title": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "nearby-discovery", "title": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 8, "sdks": 2, "apiOperations": 0, "tutorials": 3, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/address-autocomplete", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=web", "apiPath": "/api/capability-matrix?product=search-places&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Android - Identity: `capability-decision:search-places--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=android - State model: stateless ```json { "id": "search-places--android", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 5, "sdks": 4, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/sdks/mapmyindia-maps-vectorsdk-android", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=android", "apiPath": "/api/capability-matrix?product=search-places&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · iOS - Identity: `capability-decision:search-places--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=ios - State model: stateless ```json { "id": "search-places--ios", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 23, "sdks": 23, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=ios", "apiPath": "/api/capability-matrix?product=search-places&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · React Native - Identity: `capability-decision:search-places--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=react-native - State model: stateless ```json { "id": "search-places--react-native", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/react-native-native-parity", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=react-native", "apiPath": "/api/capability-matrix?product=search-places&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Flutter - Identity: `capability-decision:search-places--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=flutter - State model: stateless ```json { "id": "search-places--flutter", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/reference/mappls-flutter-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/sdks/flutter-mapmyindia-gl" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/sdks/mappls-flutter-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-map", "title": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/flutter-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=flutter", "apiPath": "/api/capability-matrix?product=search-places&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Cordova - Identity: `capability-decision:search-places--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=cordova - State model: stateless ```json { "id": "search-places--cordova", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 1, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/cordova-map", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=search-places&platform=cordova", "apiPath": "/api/capability-matrix?product=search-places&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Xamarin - Identity: `capability-decision:search-places--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=xamarin - State model: stateless ```json { "id": "search-places--xamarin", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/xamarin-map", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=search-places&platform=xamarin", "apiPath": "/api/capability-matrix?product=search-places&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Linux - Identity: `capability-decision:search-places--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=linux - State model: stateless ```json { "id": "search-places--linux", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=search-places&platform=linux", "apiPath": "/api/capability-matrix?product=search-places&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Automotive - Identity: `capability-decision:search-places--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=automotive - State model: stateless ```json { "id": "search-places--automotive", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=search-places&platform=automotive", "apiPath": "/api/capability-matrix?product=search-places&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Widgets - Identity: `capability-decision:search-places--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=widgets - State model: stateless ```json { "id": "search-places--widgets", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-app-widgets", "title": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/web-widget-place-picker", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=search-places&platform=widgets", "apiPath": "/api/capability-matrix?product=search-places&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · Deep links - Identity: `capability-decision:search-places--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=deep-links - State model: stateless ```json { "id": "search-places--deep-links", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/deep-link-attribution-resilience", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=search-places&platform=deep-links", "apiPath": "/api/capability-matrix?product=search-places&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Search & Places · MCP - Identity: `capability-decision:search-places--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=search-places&platform=mcp - State model: stateless ```json { "id": "search-places--mcp", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "ai-client", "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 10, "journeys": 1 }, "primaryHref": "/tutorials/mappls-mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=search-places&platform=mcp", "apiPath": "/api/capability-matrix?product=search-places&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · REST - Identity: `capability-decision:routes-navigation--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=rest - State model: hybrid ```json { "id": "routes-navigation--rest", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "trusted-service", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis", "href": "/reference/mappls-intouch-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "route-preview", "title": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "distance-matrix-dispatch", "title": "Rank responders with a distance matrix", "href": "/tutorials/distance-matrix-dispatch" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 1, "apiOperations": 21, "tutorials": 6, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/route-preview", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=rest", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Web - Identity: `capability-decision:routes-navigation--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=web - State model: hybrid ```json { "id": "routes-navigation--web", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 2, "apiOperations": 0, "tutorials": 4, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/route-preview", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=web", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Android - Identity: `capability-decision:routes-navigation--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=android - State model: hybrid ```json { "id": "routes-navigation--android", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 2, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/sdks/mapmyindia-maps-vectorsdk-android", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=android", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · iOS - Identity: `capability-decision:routes-navigation--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=ios - State model: hybrid ```json { "id": "routes-navigation--ios", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 20, "sdks": 20, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=ios", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · React Native - Identity: `capability-decision:routes-navigation--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=react-native - State model: hybrid ```json { "id": "routes-navigation--react-native", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/react-native-native-parity", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=react-native", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Flutter - Identity: `capability-decision:routes-navigation--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=flutter - State model: hybrid ```json { "id": "routes-navigation--flutter", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/flutter-production-lifecycle", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=flutter", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Cordova - Identity: `capability-decision:routes-navigation--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=cordova - State model: hybrid ```json { "id": "routes-navigation--cordova", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/cordova-release-hardening", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=cordova", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Xamarin - Identity: `capability-decision:routes-navigation--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=xamarin - State model: hybrid ```json { "id": "routes-navigation--xamarin", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/xamarin-maintenance-migration", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=xamarin", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Linux - Identity: `capability-decision:routes-navigation--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=linux - State model: hybrid ```json { "id": "routes-navigation--linux", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "listed", "evidenceStatus": "listed-selection-required", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=linux", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Automotive - Identity: `capability-decision:routes-navigation--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=automotive - State model: hybrid ```json { "id": "routes-navigation--automotive", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "listed", "evidenceStatus": "listed-selection-required", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=automotive", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Widgets - Identity: `capability-decision:routes-navigation--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=widgets - State model: hybrid ```json { "id": "routes-navigation--widgets", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/widget-host-production", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=widgets", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · Deep links - Identity: `capability-decision:routes-navigation--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=deep-links - State model: hybrid ```json { "id": "routes-navigation--deep-links", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/navigation-deep-link", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=deep-links", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Routes & Navigation · MCP - Identity: `capability-decision:routes-navigation--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=routes-navigation&platform=mcp - State model: hybrid ```json { "id": "routes-navigation--mcp", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "ai-client", "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 11, "journeys": 4 }, "primaryHref": "/tutorials/mappls-mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=routes-navigation&platform=mcp", "apiPath": "/api/capability-matrix?product=routes-navigation&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · REST - Identity: `capability-decision:intouch-telematics--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=rest - State model: stateful ```json { "id": "intouch-telematics--rest", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "trusted-service", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-rest-apis", "title": "Mapmyindia Intouch REST Apis", "href": "/reference/mapmyindia-intouch-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis", "href": "/reference/mappls-intouch-rest-apis" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "title": "This API will get all the alarm configurations for a user.", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "title": "This API will get all the alarm configurations for a user.", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "title": "This API will create an alarm.", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-this-api-will-create-an-alarm", "title": "This API will create an alarm.", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "title": "Gets The List Of Alarm Config(s)", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "title": "Gets The List Of Alarm Config(s)", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "title": "Deletes An Alarm Config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-alarm-id-deletes-an-alarm-config", "title": "Deletes An Alarm Config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "title": "Updates An Alarm Config", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-id-updates-an-alarm-config", "title": "Updates An Alarm Config", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "title": "This API will get all the alarm configurations for a user.", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarms-this-api-will-create-an-alarm", "title": "This API will create an alarm.", "href": "/api-reference/intouch-post-alarms-this-api-will-create-an-alarm" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "title": "Gets The List Of Alarm Config(s)", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-alarms-id-deletes-an-alarm-config", "title": "Deletes An Alarm Config", "href": "/api-reference/intouch-delete-alarms-id-deletes-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarms-id-updates-an-alarm-config", "title": "Updates An Alarm Config", "href": "/api-reference/intouch-post-alarms-id-updates-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-info-gets-the-basic-info-of-devices", "title": "Gets the basic info of devices.", "href": "/api-reference/intouch-get-devices-info-gets-the-basic-info-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices", "title": "Gets the hardware info of devices.", "href": "/api-reference/intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-gets-the-live-data-of-devices", "title": "Gets the live data of devices.", "href": "/api-reference/intouch-get-devices-gets-the-live-data-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-device-gets-the-live-data-of-devices", "title": "Gets the live data of devices.", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-device-drive-gets-drive-details-of-a-device", "title": "Gets drive details of a device.", "href": "/api-reference/intouch-get-device-drive-gets-drive-details-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "title": "Gets drive details of a device.", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "title": "Gets the historical location events of a device.", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device", "title": "Gets the historical location events of a device.", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "title": "Gets All The Configured Geofence(s)", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "title": "Gets All The Configured Geofence(s)", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-create-a-new-geofence-v1-0-0", "title": "Create A New Geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-create-a-new-geofence", "title": "Create A New Geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "title": "Get all the activities done by devices w.r.t various geofences", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "title": "Delete A Geofence.", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-geofence-id-delete-a-geofence", "title": "Delete A Geofence.", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "title": "Get A Single Or Multiple Geofence(s).", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "title": "Get A Single Or Multiple Geofence(s).", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-id-update-a-geofence-v1-0-0", "title": "Update A Geofence.", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-id-update-a-geofence", "title": "Update A Geofence.", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofences-gets-all-the-configured-geofence-s", "title": "Gets All The Configured Geofence(s)", "href": "/api-reference/intouch-get-geofences-gets-all-the-configured-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofences-create-a-new-geofence", "title": "Create A New Geofence", "href": "/api-reference/intouch-post-geofences-create-a-new-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "title": "Get all the activities done by devices w.r.t various geofences", "href": "/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-geofences-id-delete-a-geofence", "title": "Delete A Geofence.", "href": "/api-reference/intouch-delete-geofences-id-delete-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofences-id-get-a-single-or-multiple-geofence-s", "title": "Get A Single Or Multiple Geofence(s).", "href": "/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofences-id-update-a-geofence", "title": "Update A Geofence.", "href": "/api-reference/intouch-post-geofences-id-update-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-group-this-api-will-get-all-the-groups-for-a-user", "title": "This API will get all the groups for a user.", "href": "/api-reference/intouch-get-group-this-api-will-get-all-the-groups-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-group-this-api-will-create-a-group", "title": "This API will create a group.", "href": "/api-reference/intouch-post-group-this-api-will-create-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-group-id-deletes-a-group", "title": "Deletes a group", "href": "/api-reference/intouch-delete-group-id-deletes-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-group-id-updates-a-group", "title": "Updates a group", "href": "/api-reference/intouch-post-group-id-updates-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-groups-this-api-will-get-all-the-groups-for-a-user", "title": "This API will get all the groups for a user.", "href": "/api-reference/intouch-get-groups-this-api-will-get-all-the-groups-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-groups-this-api-will-create-a-group", "title": "This API will create a group.", "href": "/api-reference/intouch-post-groups-this-api-will-create-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-groups-id-deletes-a-group", "title": "Deletes a group", "href": "/api-reference/intouch-delete-groups-id-deletes-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-groups-id-updates-a-group", "title": "Updates a group", "href": "/api-reference/intouch-post-groups-id-updates-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "title": "Gets the list of all the nearby devices.", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-trips-this-api-will-get-all-the-trips-for-a-user", "title": "This API will get all the trips for a user.", "href": "/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-trips-this-api-will-create-a-trip", "title": "This API will create a trip.", "href": "/api-reference/intouch-post-trips-this-api-will-create-a-trip" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-trips-id-gets-the-details-of-a-single-trip", "title": "Gets the details of a single trip", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-trips-id-close-post-api-to-close-a-trip", "title": "POST API to close a trip.", "href": "/api-reference/intouch-post-trips-id-close-post-api-to-close-a-trip" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 0, "apiOperations": 53, "tutorials": 5, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/tutorials/delivery-eta", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=rest", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Web - Identity: `capability-decision:intouch-telematics--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=web - State model: stateful ```json { "id": "intouch-telematics--web", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 0, "apiOperations": 0, "tutorials": 3, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/tutorials/delivery-eta", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=web", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Android - Identity: `capability-decision:intouch-telematics--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=android - State model: stateful ```json { "id": "intouch-telematics--android", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/reference/mappls-workmate-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/sdks/mappls-workmate-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 7, "sdks": 7, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/sdks/mapmyindia-intouch-android-sdk", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=android", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · iOS - Identity: `capability-decision:intouch-telematics--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=ios - State model: stateful ```json { "id": "intouch-telematics--ios", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution", "title": "Mappls Intouch IOS Distribution", "href": "/reference/mappls-intouch-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution-base", "title": "Mappls Intouch IOS Distribution Base", "href": "/reference/mappls-intouch-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/reference/mappls-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/sdks/mappls-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/sdks/mapmyindia-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution", "title": "Mappls Intouch IOS Distribution", "href": "/sdks/mappls-intouch-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution-base", "title": "Mappls Intouch IOS Distribution Base", "href": "/sdks/mappls-intouch-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/sdks/mappls-location-capture-sdk-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 36, "sdks": 36, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=ios", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · React Native - Identity: `capability-decision:intouch-telematics--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=react-native - State model: stateful ```json { "id": "intouch-telematics--react-native", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-react-native-sdk", "title": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-intouch-sdk", "title": "Mappls Intouch React Native SDK", "href": "/reference/mappls-react-native-intouch-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-react-native-sdk", "title": "Mapmyindia Intouch React Native SDK", "href": "/sdks/mapmyindia-intouch-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-intouch-sdk", "title": "Mappls Intouch React Native SDK", "href": "/sdks/mappls-react-native-intouch-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 3, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/tutorials/react-native-native-parity", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=react-native", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Flutter - Identity: `capability-decision:intouch-telematics--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=flutter - State model: stateful ```json { "id": "intouch-telematics--flutter", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/sdks/flutter-mapmyindia-gl", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=flutter", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Cordova - Identity: `capability-decision:intouch-telematics--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=cordova - State model: stateful ```json { "id": "intouch-telematics--cordova", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/quickstart/cordova-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=cordova", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Xamarin - Identity: `capability-decision:intouch-telematics--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=xamarin - State model: stateful ```json { "id": "intouch-telematics--xamarin", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=xamarin", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Linux - Identity: `capability-decision:intouch-telematics--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=linux - State model: stateful ```json { "id": "intouch-telematics--linux", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=linux", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Automotive - Identity: `capability-decision:intouch-telematics--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=automotive - State model: stateful ```json { "id": "intouch-telematics--automotive", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=automotive", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Widgets - Identity: `capability-decision:intouch-telematics--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=widgets - State model: stateful ```json { "id": "intouch-telematics--widgets", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/tutorials/widget-host-production", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=widgets", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · Deep links - Identity: `capability-decision:intouch-telematics--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=deep-links - State model: stateful ```json { "id": "intouch-telematics--deep-links", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=deep-links", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · InTouch Telematics · MCP - Identity: `capability-decision:intouch-telematics--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=intouch-telematics&platform=mcp - State model: stateful ```json { "id": "intouch-telematics--mcp", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "ai-client", "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 9, "journeys": 3 }, "primaryHref": "/tutorials/a2a-solution-coordination", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=intouch-telematics&platform=mcp", "apiPath": "/api/capability-matrix?product=intouch-telematics&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · REST - Identity: `capability-decision:workmate--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=rest - State model: stateful ```json { "id": "workmate--rest", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "trusted-service", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-clients-to-get-all-your-client-details", "title": "To get all your client details", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-post-clients-to-create-new-client", "title": "To create new client", "href": "/api-reference/workmate-post-clients-to-create-new-client" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "title": "To get the list of client category in an account", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "title": "To get the form's Id and their details from your account.", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "title": "Get users attendance details with travelled distance.", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "title": "To get form based check in/out details", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "title": "Get users movement details", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-tasklists-to-get-the-task-list-details", "title": "To get the task list details.", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "title": "To get the list of tasks and their details", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-post-tasks-to-create-new-task", "title": "To create new Task", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "title": "To get the task details for the given task id.", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-put-tasks-taskid-to-update-the-task-description-status", "title": "To update the task description & status.", "href": "/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "title": "To get all the user details which belongs to your organization.", "href": "/api-reference/workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-task-lifecycle", "title": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 13, "tutorials": 3, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/tutorials/workmate-task-lifecycle", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=workmate&platform=rest", "apiPath": "/api/capability-matrix?product=workmate&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Web - Identity: `capability-decision:workmate--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=web - State model: stateful ```json { "id": "workmate--web", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-selection-required", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/web-map", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=workmate&platform=web", "apiPath": "/api/capability-matrix?product=workmate&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Android - Identity: `capability-decision:workmate--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=android - State model: stateful ```json { "id": "workmate--android", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/reference/mappls-workmate-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/sdks/mappls-workmate-android-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-task-lifecycle", "title": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 5, "sdks": 5, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/tutorials/workmate-task-lifecycle", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=workmate&platform=android", "apiPath": "/api/capability-matrix?product=workmate&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · iOS - Identity: `capability-decision:workmate--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=ios - State model: stateful ```json { "id": "workmate--ios", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 5, "sdks": 5, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=ios", "apiPath": "/api/capability-matrix?product=workmate&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · React Native - Identity: `capability-decision:workmate--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=react-native - State model: stateful ```json { "id": "workmate--react-native", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/tutorials/react-native-native-parity", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=react-native", "apiPath": "/api/capability-matrix?product=workmate&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Flutter - Identity: `capability-decision:workmate--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=flutter - State model: stateful ```json { "id": "workmate--flutter", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/flutter-map", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=flutter", "apiPath": "/api/capability-matrix?product=workmate&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Cordova - Identity: `capability-decision:workmate--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=cordova - State model: stateful ```json { "id": "workmate--cordova", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/cordova-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=cordova", "apiPath": "/api/capability-matrix?product=workmate&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Xamarin - Identity: `capability-decision:workmate--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=xamarin - State model: stateful ```json { "id": "workmate--xamarin", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=xamarin", "apiPath": "/api/capability-matrix?product=workmate&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Linux - Identity: `capability-decision:workmate--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=linux - State model: stateful ```json { "id": "workmate--linux", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=linux", "apiPath": "/api/capability-matrix?product=workmate&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Automotive - Identity: `capability-decision:workmate--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=automotive - State model: stateful ```json { "id": "workmate--automotive", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=automotive", "apiPath": "/api/capability-matrix?product=workmate&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Widgets - Identity: `capability-decision:workmate--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=widgets - State model: stateful ```json { "id": "workmate--widgets", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/widgets-place", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=widgets", "apiPath": "/api/capability-matrix?product=workmate&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · Deep links - Identity: `capability-decision:workmate--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=deep-links - State model: stateful ```json { "id": "workmate--deep-links", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=deep-links", "apiPath": "/api/capability-matrix?product=workmate&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Workmate · MCP - Identity: `capability-decision:workmate--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=workmate&platform=mcp - State model: stateful ```json { "id": "workmate--mcp", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "ai-client", "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 3, "journeys": 1 }, "primaryHref": "/quickstart/mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=workmate&platform=mcp", "apiPath": "/api/capability-matrix?product=workmate&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · REST - Identity: `capability-decision:gis-analytics--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=rest - State model: hybrid ```json { "id": "gis-analytics--rest", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "trusted-service", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "gis-site-selection", "title": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 1, "apiOperations": 21, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/tutorials/gis-site-selection", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=rest", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Web - Identity: `capability-decision:gis-analytics--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=web - State model: hybrid ```json { "id": "gis-analytics--web", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-geoanalytics-api-web", "title": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/reference/mappls-insight-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/sdks/mappls-insight-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "gis-site-selection", "title": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 3, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/tutorials/gis-site-selection", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=web", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Android - Identity: `capability-decision:gis-analytics--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=android - State model: hybrid ```json { "id": "gis-analytics--android", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 5, "sdks": 4, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/sdks/mapmyindia-intouch-android-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=android", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · iOS - Identity: `capability-decision:gis-analytics--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=ios - State model: hybrid ```json { "id": "gis-analytics--ios", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 8, "sdks": 8, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/sdks/mappls-intouch-ios-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=ios", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · React Native - Identity: `capability-decision:gis-analytics--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=react-native - State model: hybrid ```json { "id": "gis-analytics--react-native", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 4, "sdks": 3, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/sdks/mapmyindia-intouch-react-native-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=react-native", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Flutter - Identity: `capability-decision:gis-analytics--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=flutter - State model: hybrid ```json { "id": "gis-analytics--flutter", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/sdks/mappls-flutter-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=flutter", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Cordova - Identity: `capability-decision:gis-analytics--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=cordova - State model: hybrid ```json { "id": "gis-analytics--cordova", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/cordova-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=cordova", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Xamarin - Identity: `capability-decision:gis-analytics--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=xamarin - State model: hybrid ```json { "id": "gis-analytics--xamarin", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=xamarin", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Linux - Identity: `capability-decision:gis-analytics--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=linux - State model: hybrid ```json { "id": "gis-analytics--linux", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=linux", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Automotive - Identity: `capability-decision:gis-analytics--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=automotive - State model: hybrid ```json { "id": "gis-analytics--automotive", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=automotive", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Widgets - Identity: `capability-decision:gis-analytics--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=widgets - State model: hybrid ```json { "id": "gis-analytics--widgets", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "listed", "evidenceStatus": "listed-selection-required", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/widgets-place", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=widgets", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · Deep links - Identity: `capability-decision:gis-analytics--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=deep-links - State model: hybrid ```json { "id": "gis-analytics--deep-links", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=deep-links", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · GIS & Analytics · MCP - Identity: `capability-decision:gis-analytics--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=gis-analytics&platform=mcp - State model: hybrid ```json { "id": "gis-analytics--mcp", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "ai-client", "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 7, "journeys": 1 }, "primaryHref": "/quickstart/mcp-agent", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=gis-analytics&platform=mcp", "apiPath": "/api/capability-matrix?product=gis-analytics&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · REST - Identity: `capability-decision:app-widgets-deep-links--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=rest - State model: stateless ```json { "id": "app-widgets-deep-links--rest", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "trusted-service", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/sdks/mapmyindia-interactive-map-js-api", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=rest", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Web - Identity: `capability-decision:app-widgets-deep-links--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=web - State model: stateless ```json { "id": "app-widgets-deep-links--web", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 7, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/tutorials/web-widget-place-picker", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=web", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Android - Identity: `capability-decision:app-widgets-deep-links--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=android - State model: stateless ```json { "id": "app-widgets-deep-links--android", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 7, "sdks": 6, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/sdks/mapmyindia-intouch-android-sdk", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=android", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · iOS - Identity: `capability-decision:app-widgets-deep-links--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=ios - State model: stateless ```json { "id": "app-widgets-deep-links--ios", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 23, "sdks": 23, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=ios", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · React Native - Identity: `capability-decision:app-widgets-deep-links--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=react-native - State model: stateless ```json { "id": "app-widgets-deep-links--react-native", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/sdks/mappls-react-native-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=react-native", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Flutter - Identity: `capability-decision:app-widgets-deep-links--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=flutter - State model: stateless ```json { "id": "app-widgets-deep-links--flutter", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/sdks/flutter-mapmyindia-gl", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=flutter", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Cordova - Identity: `capability-decision:app-widgets-deep-links--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=cordova - State model: stateless ```json { "id": "app-widgets-deep-links--cordova", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/sdks/mapmyindia-restapi-cordova-ionic-beta", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=cordova", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Xamarin - Identity: `capability-decision:app-widgets-deep-links--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=xamarin - State model: stateless ```json { "id": "app-widgets-deep-links--xamarin", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=xamarin", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Linux - Identity: `capability-decision:app-widgets-deep-links--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=linux - State model: stateless ```json { "id": "app-widgets-deep-links--linux", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=linux", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Automotive - Identity: `capability-decision:app-widgets-deep-links--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=automotive - State model: stateless ```json { "id": "app-widgets-deep-links--automotive", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=automotive", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Widgets - Identity: `capability-decision:app-widgets-deep-links--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=widgets - State model: stateless ```json { "id": "app-widgets-deep-links--widgets", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-app-widgets", "title": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/tutorials/web-widget-place-picker", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=widgets", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · Deep links - Identity: `capability-decision:app-widgets-deep-links--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=deep-links - State model: stateless ```json { "id": "app-widgets-deep-links--deep-links", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateless", "integrationLane": "browser-or-embed", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-app-widgets", "title": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "deep-link-campaign", "title": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "navigation-deep-link", "title": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "deep-link-attribution-resilience", "title": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 0, "apiOperations": 0, "tutorials": 3, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/tutorials/deep-link-campaign", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=deep-links", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · App Widgets & Deep Links · MCP - Identity: `capability-decision:app-widgets-deep-links--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=app-widgets-deep-links&platform=mcp - State model: stateless ```json { "id": "app-widgets-deep-links--mcp", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateless", "integrationLane": "ai-client", "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 6, "journeys": 2 }, "primaryHref": "/quickstart/mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=app-widgets-deep-links&platform=mcp", "apiPath": "/api/capability-matrix?product=app-widgets-deep-links&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · REST - Identity: `capability-decision:offline-automotive--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=rest - State model: stateful ```json { "id": "offline-automotive--rest", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "trusted-service", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/rest-api", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=rest", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Web - Identity: `capability-decision:offline-automotive--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=web - State model: stateful ```json { "id": "offline-automotive--web", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/sdks/mappls-insight-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=web", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Android - Identity: `capability-decision:offline-automotive--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=android - State model: stateful ```json { "id": "offline-automotive--android", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/sdks/mappls-camera-sdk-android", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=android", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · iOS - Identity: `capability-decision:offline-automotive--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=ios - State model: stateful ```json { "id": "offline-automotive--ios", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 4, "sdks": 4, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=ios", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · React Native - Identity: `capability-decision:offline-automotive--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=react-native - State model: stateful ```json { "id": "offline-automotive--react-native", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/react-native-map", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=react-native", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Flutter - Identity: `capability-decision:offline-automotive--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=flutter - State model: stateful ```json { "id": "offline-automotive--flutter", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/sdks/flutter-mapmyindia-gl", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=flutter", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Cordova - Identity: `capability-decision:offline-automotive--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=cordova - State model: stateful ```json { "id": "offline-automotive--cordova", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/cordova-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=cordova", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Xamarin - Identity: `capability-decision:offline-automotive--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=xamarin - State model: stateful ```json { "id": "offline-automotive--xamarin", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=xamarin", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Linux - Identity: `capability-decision:offline-automotive--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=linux - State model: stateful ```json { "id": "offline-automotive--linux", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "entitled-runtime", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [ { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "offline-package-update", "title": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "linux-map-client", "title": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/tutorials/offline-package-update", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=linux", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Automotive - Identity: `capability-decision:offline-automotive--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=automotive - State model: stateful ```json { "id": "offline-automotive--automotive", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "stateful", "integrationLane": "entitled-runtime", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [ { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "offline-package-update", "title": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "linux-map-client", "title": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/tutorials/offline-package-update", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=automotive", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Widgets - Identity: `capability-decision:offline-automotive--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=widgets - State model: stateful ```json { "id": "offline-automotive--widgets", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/widgets-place", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=widgets", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · Deep links - Identity: `capability-decision:offline-automotive--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=deep-links - State model: stateful ```json { "id": "offline-automotive--deep-links", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=deep-links", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Offline & Automotive · MCP - Identity: `capability-decision:offline-automotive--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=offline-automotive&platform=mcp - State model: stateful ```json { "id": "offline-automotive--mcp", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "stateful", "integrationLane": "ai-client", "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 1, "journeys": 1 }, "primaryHref": "/quickstart/mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=offline-automotive&platform=mcp", "apiPath": "/api/capability-matrix?product=offline-automotive&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · REST - Identity: `capability-decision:ai-location--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=rest - State model: hybrid ```json { "id": "ai-location--rest", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "trusted-service", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis", "href": "/reference/mappls-intouch-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "title": "Returns the image in which objects of geometry are blurred as given by the client.", "href": "/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "title": "Returns the Brands bounding box array for the inputs Images", "href": "/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "title": "Returns the array of features which contains objects of geometry of the uploaded image.", "href": "/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "title": "Returns different output depending upon the inputs given.", "href": "/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "title": "Returns the image which contains objects of geometry of the detected face plotted on it with the bounding box.", "href": "/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "title": "Returns the face blured images of the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "title": "Returns the bounding box array for the inputs Image", "href": "/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "title": "Returns the box drawn faces on the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image", "title": "Returns the face blured images of the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images", "title": "Returns the bounding box array for the inputs panorama Images", "href": "/api-reference/mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image", "title": "Returns the box drawn faces on the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image", "title": "Returns the License Plate blured images of the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image", "title": "Returns the bounding box array for the inputs Image", "href": "/api-reference/mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image", "title": "Returns the box drawn License Plate on the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image", "title": "Returns the License plate blured images of the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images", "title": "Returns the bounding box array of License plate in panorama Images", "href": "/api-reference/mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image", "title": "Returns the box drawn License plate in the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "title": "Returns the details of all the models", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "title": "Returns the details of provided model", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "title": "Returns the prediction as response in form of JSON", "href": "/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "title": "Returns the current models in port", "href": "/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 8, "sdks": 0, "apiOperations": 21, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=ai-location&platform=rest", "apiPath": "/api/capability-matrix?product=ai-location&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Web - Identity: `capability-decision:ai-location--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=web - State model: hybrid ```json { "id": "ai-location--web", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/reference/mappls-insight-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/sdks/mappls-insight-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/sdks/mappls-insight-sdk", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=ai-location&platform=web", "apiPath": "/api/capability-matrix?product=ai-location&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Android - Identity: `capability-decision:ai-location--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=android - State model: hybrid ```json { "id": "ai-location--android", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 3, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/sdks/mapmyindia-intouch-android-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=android", "apiPath": "/api/capability-matrix?product=ai-location&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · iOS - Identity: `capability-decision:ai-location--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=ios - State model: hybrid ```json { "id": "ai-location--ios", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 33, "sdks": 33, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=ios", "apiPath": "/api/capability-matrix?product=ai-location&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · React Native - Identity: `capability-decision:ai-location--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=react-native - State model: hybrid ```json { "id": "ai-location--react-native", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 4, "sdks": 3, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/sdks/mapmyindia-intouch-react-native-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=react-native", "apiPath": "/api/capability-matrix?product=ai-location&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Flutter - Identity: `capability-decision:ai-location--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=flutter - State model: hybrid ```json { "id": "ai-location--flutter", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/sdks/mappls-flutter-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=flutter", "apiPath": "/api/capability-matrix?product=ai-location&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Cordova - Identity: `capability-decision:ai-location--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=cordova - State model: hybrid ```json { "id": "ai-location--cordova", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/quickstart/cordova-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=cordova", "apiPath": "/api/capability-matrix?product=ai-location&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Xamarin - Identity: `capability-decision:ai-location--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=xamarin - State model: hybrid ```json { "id": "ai-location--xamarin", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=xamarin", "apiPath": "/api/capability-matrix?product=ai-location&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Linux - Identity: `capability-decision:ai-location--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=linux - State model: hybrid ```json { "id": "ai-location--linux", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=linux", "apiPath": "/api/capability-matrix?product=ai-location&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Automotive - Identity: `capability-decision:ai-location--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=automotive - State model: hybrid ```json { "id": "ai-location--automotive", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=automotive", "apiPath": "/api/capability-matrix?product=ai-location&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Widgets - Identity: `capability-decision:ai-location--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=widgets - State model: hybrid ```json { "id": "ai-location--widgets", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/quickstart/widgets-place", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=widgets", "apiPath": "/api/capability-matrix?product=ai-location&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · Deep links - Identity: `capability-decision:ai-location--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=deep-links - State model: hybrid ```json { "id": "ai-location--deep-links", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 1, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=ai-location&platform=deep-links", "apiPath": "/api/capability-matrix?product=ai-location&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · AI & Location · MCP - Identity: `capability-decision:ai-location--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=ai-location&platform=mcp - State model: hybrid ```json { "id": "ai-location--mcp", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "ai-client", "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "mappls-mcp-agent", "title": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "mcp-client-identity", "title": "Provision and validate a remote MCP client", "href": "/tutorials/mcp-client-identity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 3, "quickstarts": 1, "starterKits": 1, "sampleApps": 4, "journeys": 2 }, "primaryHref": "/tutorials/mappls-mcp-agent", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=ai-location&platform=mcp", "apiPath": "/api/capability-matrix?product=ai-location&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · REST - Identity: `capability-decision:capture-feedback--rest` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=rest - State model: hybrid ```json { "id": "capture-feedback--rest", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "trusted-service", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 0, "apiOperations": 0, "tutorials": 2, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/tutorials/reverse-geocode-check-in", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=rest", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=rest", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Web - Identity: `capability-decision:capture-feedback--web` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=web - State model: hybrid ```json { "id": "capture-feedback--web", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 1, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/sdks/mappls-insight-sdk", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=web", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=web", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Android - Identity: `capability-decision:capture-feedback--android` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=android - State model: hybrid ```json { "id": "capture-feedback--android", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 6, "sdks": 5, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/tutorials/workmate-proof-review", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=android", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=android", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · iOS - Identity: `capability-decision:capture-feedback--ios` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=ios - State model: hybrid ```json { "id": "capture-feedback--ios", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/reference/mappls-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK", "href": "/reference/mappls-location-capture-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/sdks/mappls-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK", "href": "/sdks/mappls-location-capture-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/sdks/mappls-location-capture-sdk-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 35, "sdks": 35, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/tutorials/ios-sdk-production-readiness", "releaseBoundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=ios", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=ios", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · React Native - Identity: `capability-decision:capture-feedback--react-native` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=react-native - State model: hybrid ```json { "id": "capture-feedback--react-native", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 3, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/tutorials/react-native-native-parity", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=react-native", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=react-native", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Flutter - Identity: `capability-decision:capture-feedback--flutter` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=flutter - State model: hybrid ```json { "id": "capture-feedback--flutter", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 2, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/tutorials/flutter-production-lifecycle", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=flutter", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=flutter", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Cordova - Identity: `capability-decision:capture-feedback--cordova` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=cordova - State model: hybrid ```json { "id": "capture-feedback--cordova", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/quickstart/cordova-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=cordova", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=cordova", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Xamarin - Identity: `capability-decision:capture-feedback--xamarin` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=xamarin - State model: hybrid ```json { "id": "capture-feedback--xamarin", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/quickstart/xamarin-maintenance", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=xamarin", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=xamarin", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Linux - Identity: `capability-decision:capture-feedback--linux` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=linux - State model: hybrid ```json { "id": "capture-feedback--linux", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/quickstart/linux-embedded", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=linux", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=linux", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Automotive - Identity: `capability-decision:capture-feedback--automotive` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=automotive - State model: hybrid ```json { "id": "capture-feedback--automotive", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 0, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/quickstart/automotive-navigation", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=automotive", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=automotive", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Widgets - Identity: `capability-decision:capture-feedback--widgets` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=widgets - State model: hybrid ```json { "id": "capture-feedback--widgets", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 1, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/tutorials/widget-host-production", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=widgets", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=widgets", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · Deep links - Identity: `capability-decision:capture-feedback--deep-links` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=deep-links - State model: hybrid ```json { "id": "capture-feedback--deep-links", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/quickstart/deep-links", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=deep-links", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=deep-links", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-decision · Capture & Feedback · MCP - Identity: `capability-decision:capture-feedback--mcp` - Canonical: https://developer.mappls.com/platforms/matrix?product=capture-feedback&platform=mcp - State model: hybrid ```json { "id": "capture-feedback--mcp", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "availability": "not-listed", "evidenceStatus": "not-listed", "stateModel": "hybrid", "integrationLane": "ai-client", "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "evidenceCounts": { "sourceGuides": 2, "sdks": 0, "apiOperations": 0, "tutorials": 0, "quickstarts": 1, "starterKits": 1, "sampleApps": 8, "journeys": 3 }, "primaryHref": "/quickstart/mcp-agent", "releaseBoundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability.", "websitePath": "/platforms/matrix?product=capture-feedback&platform=mcp", "apiPath": "/api/capability-matrix?product=capture-feedback&platform=mcp", "providerCalls": 0, "credentialsAccepted": false } ``` ## capability-qualification · Maps · REST qualification - Identity: `capability-qualification:maps--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=rest - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--rest--qualification", "matrixCellId": "maps--rest", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "route-preview", "title": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "static-map-receipt", "title": "Generate static maps for receipts and notifications", "href": "/tutorials/static-map-receipt" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "core-rest-current-static-key", "title": "Current core REST from a trusted server", "runtime": "trusted-server", "generation": "Current core REST", "visibility": "secret", "evidenceBoundary": "The normalized current-source operations do not themselves declare a security scheme; static-query behavior is separately implemented and tested in the trusted-server SDK. The issued account remains authoritative.", "href": "/authentication#core-rest-current-static-key" }, { "slug": "core-rest-legacy-oauth", "title": "Legacy core REST OAuth generation", "runtime": "trusted-server", "generation": "Legacy core REST", "visibility": "secret", "evidenceBoundary": "These normalized operations preserve public OAuth bearer evidence; they do not prove that an issued account, host, path, or product still uses this generation.", "href": "/authentication#core-rest-legacy-oauth" }, { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=rest", "apiPath": "/api/capability-qualifications?product=maps&platform=rest", "downloadPath": "/api/capability-qualifications?product=maps&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=rest", "productPath": "/docs/maps", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Web qualification - Identity: `capability-qualification:maps--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=web - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--web--qualification", "matrixCellId": "maps--web", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-geoanalytics-api-web", "title": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "first-web-map", "title": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "route-preview", "title": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "nearby-discovery", "title": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "web-public-key", "title": "Browser Web Maps and Places", "runtime": "browser", "generation": "Selected Web SDK generation", "visibility": "public-restricted", "evidenceBoundary": "Web SDK repository evidence identifies the client surface; the issued key configuration, supported script/package line, origins, and entitlements remain authoritative.", "href": "/authentication#web-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=web", "apiPath": "/api/capability-qualifications?product=maps&platform=web", "downloadPath": "/api/capability-qualifications?product=maps&platform=web&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=web", "productPath": "/docs/maps", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Android qualification - Identity: `capability-qualification:maps--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=android - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--android--qualification", "matrixCellId": "maps--android", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "android-map", "title": "Add Mappls to an Android app", "href": "/tutorials/android-map" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "android-public-key", "title": "Android native application", "runtime": "android", "generation": "Selected Android SDK generation", "visibility": "public-restricted", "evidenceBoundary": "Android source repositories provide SDK/sample evidence, not a universal credential field, compatibility matrix, or entitlement promise.", "href": "/authentication#android-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=android", "apiPath": "/api/capability-qualifications?product=maps&platform=android", "downloadPath": "/api/capability-qualifications?product=maps&platform=android&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=android", "productPath": "/docs/maps", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · iOS qualification - Identity: `capability-qualification:maps--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=ios - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--ios--qualification", "matrixCellId": "maps--ios", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/sdks/mapmyindia-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-map", "title": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "ios-public-key", "title": "iOS native application", "runtime": "ios", "generation": "Selected iOS SDK generation", "visibility": "public-restricted", "evidenceBoundary": "iOS source and distribution repositories identify candidate SDK lines; account credentials, checksums, target compatibility, and entitlement require confirmation.", "href": "/authentication#ios-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=ios", "apiPath": "/api/capability-qualifications?product=maps&platform=ios", "downloadPath": "/api/capability-qualifications?product=maps&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=ios", "productPath": "/docs/maps", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · React Native qualification - Identity: `capability-qualification:maps--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=react-native - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--react-native--qualification", "matrixCellId": "maps--react-native", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-map", "title": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=react-native", "apiPath": "/api/capability-qualifications?product=maps&platform=react-native", "downloadPath": "/api/capability-qualifications?product=maps&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=react-native", "productPath": "/docs/maps", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Flutter qualification - Identity: `capability-qualification:maps--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=flutter - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--flutter--qualification", "matrixCellId": "maps--flutter", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/reference/mappls-flutter-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/sdks/flutter-mapmyindia-gl" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/sdks/mappls-flutter-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-map", "title": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=flutter", "apiPath": "/api/capability-qualifications?product=maps&platform=flutter", "downloadPath": "/api/capability-qualifications?product=maps&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=flutter", "productPath": "/docs/maps", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Cordova qualification - Identity: `capability-qualification:maps--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=cordova - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--cordova--qualification", "matrixCellId": "maps--cordova", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-cordova-ionic-beta", "title": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "cordova-map", "title": "Ship a Mappls map in Cordova and Ionic", "href": "/tutorials/cordova-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "href": "/tutorials/cordova-release-hardening" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=cordova", "apiPath": "/api/capability-qualifications?product=maps&platform=cordova", "downloadPath": "/api/capability-qualifications?product=maps&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=cordova", "productPath": "/docs/maps", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Xamarin qualification - Identity: `capability-qualification:maps--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=xamarin - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--xamarin--qualification", "matrixCellId": "maps--xamarin", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "xamarin-map", "title": "Integrate Mappls into a Xamarin application", "href": "/tutorials/xamarin-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "xamarin-maintenance-migration", "title": "Harden and migrate a Xamarin location feature", "href": "/tutorials/xamarin-maintenance-migration" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=xamarin", "apiPath": "/api/capability-qualifications?product=maps&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=maps&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=xamarin", "productPath": "/docs/maps", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Linux qualification - Identity: `capability-qualification:maps--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=linux - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--linux--qualification", "matrixCellId": "maps--linux", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=linux", "apiPath": "/api/capability-qualifications?product=maps&platform=linux", "downloadPath": "/api/capability-qualifications?product=maps&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=linux", "productPath": "/docs/maps", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Automotive qualification - Identity: `capability-qualification:maps--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=automotive - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--automotive--qualification", "matrixCellId": "maps--automotive", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=automotive", "apiPath": "/api/capability-qualifications?product=maps&platform=automotive", "downloadPath": "/api/capability-qualifications?product=maps&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=automotive", "productPath": "/docs/maps", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Widgets qualification - Identity: `capability-qualification:maps--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=widgets - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--widgets--qualification", "matrixCellId": "maps--widgets", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=widgets", "apiPath": "/api/capability-qualifications?product=maps&platform=widgets", "downloadPath": "/api/capability-qualifications?product=maps&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=widgets", "productPath": "/docs/maps", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · Deep links qualification - Identity: `capability-qualification:maps--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=deep-links - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--deep-links--qualification", "matrixCellId": "maps--deep-links", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=deep-links", "apiPath": "/api/capability-qualifications?product=maps&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=maps&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=deep-links", "productPath": "/docs/maps", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Maps · MCP qualification - Identity: `capability-qualification:maps--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=maps&platform=mcp - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "maps--mcp--qualification", "matrixCellId": "maps--mcp", "product": { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "category": "Core location", "accent": "#7c5cff" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=maps&platform=mcp", "apiPath": "/api/capability-qualifications?product=maps&platform=mcp", "downloadPath": "/api/capability-qualifications?product=maps&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=maps&platform=mcp", "productPath": "/docs/maps", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · REST qualification - Identity: `capability-qualification:search-places--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=rest - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--rest--qualification", "matrixCellId": "search-places--rest", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "address-autocomplete", "title": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "rest-geocode-service", "title": "Build a server-side geocoding boundary", "href": "/tutorials/rest-geocode-service" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "reverse-geocode-check-in", "title": "Turn a device fix into a trustworthy check-in", "href": "/tutorials/reverse-geocode-check-in" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "distance-matrix-dispatch", "title": "Rank responders with a distance matrix", "href": "/tutorials/distance-matrix-dispatch" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "core-rest-current-static-key", "title": "Current core REST from a trusted server", "runtime": "trusted-server", "generation": "Current core REST", "visibility": "secret", "evidenceBoundary": "The normalized current-source operations do not themselves declare a security scheme; static-query behavior is separately implemented and tested in the trusted-server SDK. The issued account remains authoritative.", "href": "/authentication#core-rest-current-static-key" }, { "slug": "core-rest-legacy-oauth", "title": "Legacy core REST OAuth generation", "runtime": "trusted-server", "generation": "Legacy core REST", "visibility": "secret", "evidenceBoundary": "These normalized operations preserve public OAuth bearer evidence; they do not prove that an issued account, host, path, or product still uses this generation.", "href": "/authentication#core-rest-legacy-oauth" }, { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=rest", "apiPath": "/api/capability-qualifications?product=search-places&platform=rest", "downloadPath": "/api/capability-qualifications?product=search-places&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=rest", "productPath": "/docs/search-places", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Web qualification - Identity: `capability-qualification:search-places--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=web - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--web--qualification", "matrixCellId": "search-places--web", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "address-autocomplete", "title": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "nearby-discovery", "title": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "web-public-key", "title": "Browser Web Maps and Places", "runtime": "browser", "generation": "Selected Web SDK generation", "visibility": "public-restricted", "evidenceBoundary": "Web SDK repository evidence identifies the client surface; the issued key configuration, supported script/package line, origins, and entitlements remain authoritative.", "href": "/authentication#web-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=web", "apiPath": "/api/capability-qualifications?product=search-places&platform=web", "downloadPath": "/api/capability-qualifications?product=search-places&platform=web&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=web", "productPath": "/docs/search-places", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Android qualification - Identity: `capability-qualification:search-places--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=android - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--android--qualification", "matrixCellId": "search-places--android", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "android-public-key", "title": "Android native application", "runtime": "android", "generation": "Selected Android SDK generation", "visibility": "public-restricted", "evidenceBoundary": "Android source repositories provide SDK/sample evidence, not a universal credential field, compatibility matrix, or entitlement promise.", "href": "/authentication#android-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=android", "apiPath": "/api/capability-qualifications?product=search-places&platform=android", "downloadPath": "/api/capability-qualifications?product=search-places&platform=android&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=android", "productPath": "/docs/search-places", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · iOS qualification - Identity: `capability-qualification:search-places--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=ios - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--ios--qualification", "matrixCellId": "search-places--ios", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "ios-public-key", "title": "iOS native application", "runtime": "ios", "generation": "Selected iOS SDK generation", "visibility": "public-restricted", "evidenceBoundary": "iOS source and distribution repositories identify candidate SDK lines; account credentials, checksums, target compatibility, and entitlement require confirmation.", "href": "/authentication#ios-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=ios", "apiPath": "/api/capability-qualifications?product=search-places&platform=ios", "downloadPath": "/api/capability-qualifications?product=search-places&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=ios", "productPath": "/docs/search-places", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · React Native qualification - Identity: `capability-qualification:search-places--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=react-native - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--react-native--qualification", "matrixCellId": "search-places--react-native", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=react-native", "apiPath": "/api/capability-qualifications?product=search-places&platform=react-native", "downloadPath": "/api/capability-qualifications?product=search-places&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=react-native", "productPath": "/docs/search-places", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Flutter qualification - Identity: `capability-qualification:search-places--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=flutter - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--flutter--qualification", "matrixCellId": "search-places--flutter", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/reference/mappls-flutter-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "href": "/sdks/flutter-mapmyindia-gl" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "href": "/sdks/mappls-flutter-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-map", "title": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=flutter", "apiPath": "/api/capability-qualifications?product=search-places&platform=flutter", "downloadPath": "/api/capability-qualifications?product=search-places&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=flutter", "productPath": "/docs/search-places", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Cordova qualification - Identity: `capability-qualification:search-places--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=cordova - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--cordova--qualification", "matrixCellId": "search-places--cordova", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=cordova", "apiPath": "/api/capability-qualifications?product=search-places&platform=cordova", "downloadPath": "/api/capability-qualifications?product=search-places&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=cordova", "productPath": "/docs/search-places", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Xamarin qualification - Identity: `capability-qualification:search-places--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=xamarin - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--xamarin--qualification", "matrixCellId": "search-places--xamarin", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=xamarin", "apiPath": "/api/capability-qualifications?product=search-places&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=search-places&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=xamarin", "productPath": "/docs/search-places", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Linux qualification - Identity: `capability-qualification:search-places--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=linux - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--linux--qualification", "matrixCellId": "search-places--linux", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=linux", "apiPath": "/api/capability-qualifications?product=search-places&platform=linux", "downloadPath": "/api/capability-qualifications?product=search-places&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=linux", "productPath": "/docs/search-places", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Automotive qualification - Identity: `capability-qualification:search-places--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=automotive - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--automotive--qualification", "matrixCellId": "search-places--automotive", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=automotive", "apiPath": "/api/capability-qualifications?product=search-places&platform=automotive", "downloadPath": "/api/capability-qualifications?product=search-places&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=automotive", "productPath": "/docs/search-places", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Widgets qualification - Identity: `capability-qualification:search-places--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=widgets - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--widgets--qualification", "matrixCellId": "search-places--widgets", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-app-widgets", "title": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "No exact authentication candidate is cataloged for this pairing." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=widgets", "apiPath": "/api/capability-qualifications?product=search-places&platform=widgets", "downloadPath": "/api/capability-qualifications?product=search-places&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=widgets", "productPath": "/docs/search-places", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · Deep links qualification - Identity: `capability-qualification:search-places--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=deep-links - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--deep-links--qualification", "matrixCellId": "search-places--deep-links", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=deep-links", "apiPath": "/api/capability-qualifications?product=search-places&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=search-places&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=deep-links", "productPath": "/docs/search-places", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Search & Places · MCP qualification - Identity: `capability-qualification:search-places--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=search-places&platform=mcp - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "search-places--mcp--qualification", "matrixCellId": "search-places--mcp", "product": { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "category": "Core location", "accent": "#00a88f" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "consented-address-verification", "title": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=search-places&platform=mcp", "apiPath": "/api/capability-qualifications?product=search-places&platform=mcp", "downloadPath": "/api/capability-qualifications?product=search-places&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=search-places&platform=mcp", "productPath": "/docs/search-places", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · REST qualification - Identity: `capability-qualification:routes-navigation--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=rest - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--rest--qualification", "matrixCellId": "routes-navigation--rest", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis", "href": "/reference/mappls-intouch-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "route-preview", "title": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "distance-matrix-dispatch", "title": "Rank responders with a distance matrix", "href": "/tutorials/distance-matrix-dispatch" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "core-rest-current-static-key", "title": "Current core REST from a trusted server", "runtime": "trusted-server", "generation": "Current core REST", "visibility": "secret", "evidenceBoundary": "The normalized current-source operations do not themselves declare a security scheme; static-query behavior is separately implemented and tested in the trusted-server SDK. The issued account remains authoritative.", "href": "/authentication#core-rest-current-static-key" }, { "slug": "core-rest-legacy-oauth", "title": "Legacy core REST OAuth generation", "runtime": "trusted-server", "generation": "Legacy core REST", "visibility": "secret", "evidenceBoundary": "These normalized operations preserve public OAuth bearer evidence; they do not prove that an issued account, host, path, or product still uses this generation.", "href": "/authentication#core-rest-legacy-oauth" }, { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=rest", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=rest", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=rest", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Web qualification - Identity: `capability-qualification:routes-navigation--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=web - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--web--qualification", "matrixCellId": "routes-navigation--web", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=web", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=web", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=web&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=web", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Android qualification - Identity: `capability-qualification:routes-navigation--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=android - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--android--qualification", "matrixCellId": "routes-navigation--android", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "android-public-key", "title": "Android native application", "runtime": "android", "generation": "Selected Android SDK generation", "visibility": "public-restricted", "evidenceBoundary": "Android source repositories provide SDK/sample evidence, not a universal credential field, compatibility matrix, or entitlement promise.", "href": "/authentication#android-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=android", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=android", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=android&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=android", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · iOS qualification - Identity: `capability-qualification:routes-navigation--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=ios - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--ios--qualification", "matrixCellId": "routes-navigation--ios", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "ios-public-key", "title": "iOS native application", "runtime": "ios", "generation": "Selected iOS SDK generation", "visibility": "public-restricted", "evidenceBoundary": "iOS source and distribution repositories identify candidate SDK lines; account credentials, checksums, target compatibility, and entitlement require confirmation.", "href": "/authentication#ios-public-key" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=ios", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=ios", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=ios", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · React Native qualification - Identity: `capability-qualification:routes-navigation--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=react-native - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--react-native--qualification", "matrixCellId": "routes-navigation--react-native", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=react-native", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=react-native", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=react-native", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Flutter qualification - Identity: `capability-qualification:routes-navigation--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=flutter - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--flutter--qualification", "matrixCellId": "routes-navigation--flutter", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=flutter", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=flutter", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=flutter", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Cordova qualification - Identity: `capability-qualification:routes-navigation--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=cordova - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--cordova--qualification", "matrixCellId": "routes-navigation--cordova", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=cordova", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=cordova", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=cordova", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Xamarin qualification - Identity: `capability-qualification:routes-navigation--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=xamarin - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--xamarin--qualification", "matrixCellId": "routes-navigation--xamarin", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=xamarin", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=xamarin", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Linux qualification - Identity: `capability-qualification:routes-navigation--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=linux - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--linux--qualification", "matrixCellId": "routes-navigation--linux", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "selection-required", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "listed", "evidenceStatus": "listed-selection-required", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=linux", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=linux", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=linux", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Automotive qualification - Identity: `capability-qualification:routes-navigation--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=automotive - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--automotive--qualification", "matrixCellId": "routes-navigation--automotive", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "selection-required", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "listed", "evidenceStatus": "listed-selection-required", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=automotive", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=automotive", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=automotive", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Widgets qualification - Identity: `capability-qualification:routes-navigation--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=widgets - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--widgets--qualification", "matrixCellId": "routes-navigation--widgets", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=widgets", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=widgets", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=widgets", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · Deep links qualification - Identity: `capability-qualification:routes-navigation--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=deep-links - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--deep-links--qualification", "matrixCellId": "routes-navigation--deep-links", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=deep-links", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=deep-links", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Routes & Navigation · MCP qualification - Identity: `capability-qualification:routes-navigation--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=routes-navigation&platform=mcp - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "routes-navigation--mcp--qualification", "matrixCellId": "routes-navigation--mcp", "product": { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "category": "Mobility", "accent": "#ff7a45" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "emergency-incident-response", "title": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "navigation-session", "title": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=routes-navigation&platform=mcp", "apiPath": "/api/capability-qualifications?product=routes-navigation&platform=mcp", "downloadPath": "/api/capability-qualifications?product=routes-navigation&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=routes-navigation&platform=mcp", "productPath": "/docs/routes-navigation", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · REST qualification - Identity: `capability-qualification:intouch-telematics--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=rest - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--rest--qualification", "matrixCellId": "intouch-telematics--rest", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-rest-apis", "title": "Mapmyindia Intouch REST Apis", "href": "/reference/mapmyindia-intouch-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis", "href": "/reference/mappls-intouch-rest-apis" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "title": "This API will get all the alarm configurations for a user.", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "title": "This API will get all the alarm configurations for a user.", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "title": "This API will create an alarm.", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-this-api-will-create-an-alarm", "title": "This API will create an alarm.", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "title": "Gets The List Of Alarm Config(s)", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "title": "Gets The List Of Alarm Config(s)", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "title": "Deletes An Alarm Config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-alarm-id-deletes-an-alarm-config", "title": "Deletes An Alarm Config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "title": "Updates An Alarm Config", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarm-id-updates-an-alarm-config", "title": "Updates An Alarm Config", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "title": "This API will get all the alarm configurations for a user.", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarms-this-api-will-create-an-alarm", "title": "This API will create an alarm.", "href": "/api-reference/intouch-post-alarms-this-api-will-create-an-alarm" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "title": "Gets The List Of Alarm Config(s)", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-alarms-id-deletes-an-alarm-config", "title": "Deletes An Alarm Config", "href": "/api-reference/intouch-delete-alarms-id-deletes-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-alarms-id-updates-an-alarm-config", "title": "Updates An Alarm Config", "href": "/api-reference/intouch-post-alarms-id-updates-an-alarm-config" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-info-gets-the-basic-info-of-devices", "title": "Gets the basic info of devices.", "href": "/api-reference/intouch-get-devices-info-gets-the-basic-info-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices", "title": "Gets the hardware info of devices.", "href": "/api-reference/intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-gets-the-live-data-of-devices", "title": "Gets the live data of devices.", "href": "/api-reference/intouch-get-devices-gets-the-live-data-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-device-gets-the-live-data-of-devices", "title": "Gets the live data of devices.", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-device-drive-gets-drive-details-of-a-device", "title": "Gets drive details of a device.", "href": "/api-reference/intouch-get-device-drive-gets-drive-details-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "title": "Gets drive details of a device.", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "title": "Gets the historical location events of a device.", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device", "title": "Gets the historical location events of a device.", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "title": "Gets All The Configured Geofence(s)", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "title": "Gets All The Configured Geofence(s)", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-create-a-new-geofence-v1-0-0", "title": "Create A New Geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-create-a-new-geofence", "title": "Create A New Geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "title": "Get all the activities done by devices w.r.t various geofences", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "title": "Delete A Geofence.", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-geofence-id-delete-a-geofence", "title": "Delete A Geofence.", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "title": "Get A Single Or Multiple Geofence(s).", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "title": "Get A Single Or Multiple Geofence(s).", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-id-update-a-geofence-v1-0-0", "title": "Update A Geofence.", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence-v1-0-0" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofence-id-update-a-geofence", "title": "Update A Geofence.", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofences-gets-all-the-configured-geofence-s", "title": "Gets All The Configured Geofence(s)", "href": "/api-reference/intouch-get-geofences-gets-all-the-configured-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofences-create-a-new-geofence", "title": "Create A New Geofence", "href": "/api-reference/intouch-post-geofences-create-a-new-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "title": "Get all the activities done by devices w.r.t various geofences", "href": "/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-geofences-id-delete-a-geofence", "title": "Delete A Geofence.", "href": "/api-reference/intouch-delete-geofences-id-delete-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-geofences-id-get-a-single-or-multiple-geofence-s", "title": "Get A Single Or Multiple Geofence(s).", "href": "/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-geofences-id-update-a-geofence", "title": "Update A Geofence.", "href": "/api-reference/intouch-post-geofences-id-update-a-geofence" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-group-this-api-will-get-all-the-groups-for-a-user", "title": "This API will get all the groups for a user.", "href": "/api-reference/intouch-get-group-this-api-will-get-all-the-groups-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-group-this-api-will-create-a-group", "title": "This API will create a group.", "href": "/api-reference/intouch-post-group-this-api-will-create-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-group-id-deletes-a-group", "title": "Deletes a group", "href": "/api-reference/intouch-delete-group-id-deletes-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-group-id-updates-a-group", "title": "Updates a group", "href": "/api-reference/intouch-post-group-id-updates-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-groups-this-api-will-get-all-the-groups-for-a-user", "title": "This API will get all the groups for a user.", "href": "/api-reference/intouch-get-groups-this-api-will-get-all-the-groups-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-groups-this-api-will-create-a-group", "title": "This API will create a group.", "href": "/api-reference/intouch-post-groups-this-api-will-create-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-delete-groups-id-deletes-a-group", "title": "Deletes a group", "href": "/api-reference/intouch-delete-groups-id-deletes-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-groups-id-updates-a-group", "title": "Updates a group", "href": "/api-reference/intouch-post-groups-id-updates-a-group" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "title": "Gets the list of all the nearby devices.", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-trips-this-api-will-get-all-the-trips-for-a-user", "title": "This API will get all the trips for a user.", "href": "/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-trips-this-api-will-create-a-trip", "title": "This API will create a trip.", "href": "/api-reference/intouch-post-trips-this-api-will-create-a-trip" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-get-trips-id-gets-the-details-of-a-single-trip", "title": "Gets the details of a single trip", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "intouch-post-trips-id-close-post-api-to-close-a-trip", "title": "POST API to close a trip.", "href": "/api-reference/intouch-post-trips-id-close-post-api-to-close-a-trip" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "intouch-rest-bearer", "title": "InTouch telematics data plane", "runtime": "trusted-server", "generation": "InTouch REST", "visibility": "secret", "evidenceBoundary": "The normalized repository contract declares bearer transport for these InTouch operations; entitlement, token issuance, permitted assets, and production retention remain account-specific.", "href": "/authentication#intouch-rest-bearer" }, { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=rest", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=rest", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=rest", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Web qualification - Identity: `capability-qualification:intouch-telematics--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=web - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--web--qualification", "matrixCellId": "intouch-telematics--web", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "fleet-geofences", "title": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "intouch-rest-bearer", "title": "InTouch telematics data plane", "runtime": "trusted-server", "generation": "InTouch REST", "visibility": "secret", "evidenceBoundary": "The normalized repository contract declares bearer transport for these InTouch operations; entitlement, token issuance, permitted assets, and production retention remain account-specific.", "href": "/authentication#intouch-rest-bearer" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=web", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=web", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=web&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=web", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Android qualification - Identity: `capability-qualification:intouch-telematics--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=android - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--android--qualification", "matrixCellId": "intouch-telematics--android", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/reference/mappls-workmate-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/sdks/mappls-workmate-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "intouch-rest-bearer", "title": "InTouch telematics data plane", "runtime": "trusted-server", "generation": "InTouch REST", "visibility": "secret", "evidenceBoundary": "The normalized repository contract declares bearer transport for these InTouch operations; entitlement, token issuance, permitted assets, and production retention remain account-specific.", "href": "/authentication#intouch-rest-bearer" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=android", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=android", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=android&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=android", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · iOS qualification - Identity: `capability-qualification:intouch-telematics--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=ios - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--ios--qualification", "matrixCellId": "intouch-telematics--ios", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution", "title": "Mappls Intouch IOS Distribution", "href": "/reference/mappls-intouch-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution-base", "title": "Mappls Intouch IOS Distribution Base", "href": "/reference/mappls-intouch-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/reference/mappls-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/sdks/mappls-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "href": "/sdks/mapmyindia-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution", "title": "Mappls Intouch IOS Distribution", "href": "/sdks/mappls-intouch-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-distribution-base", "title": "Mappls Intouch IOS Distribution Base", "href": "/sdks/mappls-intouch-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/sdks/mappls-location-capture-sdk-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "intouch-rest-bearer", "title": "InTouch telematics data plane", "runtime": "trusted-server", "generation": "InTouch REST", "visibility": "secret", "evidenceBoundary": "The normalized repository contract declares bearer transport for these InTouch operations; entitlement, token issuance, permitted assets, and production retention remain account-specific.", "href": "/authentication#intouch-rest-bearer" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=ios", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=ios", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=ios", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · React Native qualification - Identity: `capability-qualification:intouch-telematics--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=react-native - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--react-native--qualification", "matrixCellId": "intouch-telematics--react-native", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-react-native-sdk", "title": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-intouch-sdk", "title": "Mappls Intouch React Native SDK", "href": "/reference/mappls-react-native-intouch-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-react-native-sdk", "title": "Mapmyindia Intouch React Native SDK", "href": "/sdks/mapmyindia-intouch-react-native-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-intouch-sdk", "title": "Mappls Intouch React Native SDK", "href": "/sdks/mappls-react-native-intouch-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "intouch-rest-bearer", "title": "InTouch telematics data plane", "runtime": "trusted-server", "generation": "InTouch REST", "visibility": "secret", "evidenceBoundary": "The normalized repository contract declares bearer transport for these InTouch operations; entitlement, token issuance, permitted assets, and production retention remain account-specific.", "href": "/authentication#intouch-rest-bearer" }, { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "generation": "Wrapper plus underlying native SDK generations", "visibility": "selection-required", "evidenceBoundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation.", "href": "/authentication#cross-platform-native-keys" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=react-native", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=react-native", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=react-native", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Flutter qualification - Identity: `capability-qualification:intouch-telematics--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=flutter - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--flutter--qualification", "matrixCellId": "intouch-telematics--flutter", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=flutter", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=flutter", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=flutter", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Cordova qualification - Identity: `capability-qualification:intouch-telematics--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=cordova - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--cordova--qualification", "matrixCellId": "intouch-telematics--cordova", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=cordova", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=cordova", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=cordova", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Xamarin qualification - Identity: `capability-qualification:intouch-telematics--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=xamarin - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--xamarin--qualification", "matrixCellId": "intouch-telematics--xamarin", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=xamarin", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=xamarin", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Linux qualification - Identity: `capability-qualification:intouch-telematics--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=linux - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--linux--qualification", "matrixCellId": "intouch-telematics--linux", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=linux", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=linux", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=linux", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Automotive qualification - Identity: `capability-qualification:intouch-telematics--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=automotive - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--automotive--qualification", "matrixCellId": "intouch-telematics--automotive", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=automotive", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=automotive", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=automotive", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Widgets qualification - Identity: `capability-qualification:intouch-telematics--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=widgets - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--widgets--qualification", "matrixCellId": "intouch-telematics--widgets", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "No exact authentication candidate is cataloged for this pairing." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=widgets", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=widgets", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=widgets", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · Deep links qualification - Identity: `capability-qualification:intouch-telematics--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=deep-links - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--deep-links--qualification", "matrixCellId": "intouch-telematics--deep-links", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=deep-links", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=deep-links", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · InTouch Telematics · MCP qualification - Identity: `capability-qualification:intouch-telematics--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=intouch-telematics&platform=mcp - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "intouch-telematics--mcp--qualification", "matrixCellId": "intouch-telematics--mcp", "product": { "slug": "intouch-telematics", "name": "InTouch Telematics", "summary": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "category": "Operations", "accent": "#e052a0" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "delivery-control-tower", "title": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "fleet-geofence", "title": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "connected-fleet-trip", "title": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=intouch-telematics&platform=mcp", "apiPath": "/api/capability-qualifications?product=intouch-telematics&platform=mcp", "downloadPath": "/api/capability-qualifications?product=intouch-telematics&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=intouch-telematics&platform=mcp", "productPath": "/docs/intouch-telematics", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · REST qualification - Identity: `capability-qualification:workmate--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=rest - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--rest--qualification", "matrixCellId": "workmate--rest", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-clients-to-get-all-your-client-details", "title": "To get all your client details", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-post-clients-to-create-new-client", "title": "To create new client", "href": "/api-reference/workmate-post-clients-to-create-new-client" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "title": "To get the list of client category in an account", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "title": "To get the form's Id and their details from your account.", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "title": "Get users attendance details with travelled distance.", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "title": "To get form based check in/out details", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "title": "Get users movement details", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-tasklists-to-get-the-task-list-details", "title": "To get the task list details.", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "title": "To get the list of tasks and their details", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-post-tasks-to-create-new-task", "title": "To create new Task", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "title": "To get the task details for the given task id.", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-put-tasks-taskid-to-update-the-task-description-status", "title": "To update the task description & status.", "href": "/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "title": "To get all the user details which belongs to your organization.", "href": "/api-reference/workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-task-lifecycle", "title": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "workmate-oauth", "title": "Workmate workforce APIs", "runtime": "trusted-server", "generation": "Workmate source generation", "visibility": "selection-required", "evidenceBoundary": "The public Workmate contracts preserve OAuth bearer evidence, but the company-issued organization, user, host, scope, and lifecycle contract is authoritative.", "href": "/authentication#workmate-oauth" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=rest", "apiPath": "/api/capability-qualifications?product=workmate&platform=rest", "downloadPath": "/api/capability-qualifications?product=workmate&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=rest", "productPath": "/docs/workmate", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Web qualification - Identity: `capability-qualification:workmate--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=web - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--web--qualification", "matrixCellId": "workmate--web", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "selection-required", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-selection-required", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "workmate-oauth", "title": "Workmate workforce APIs", "runtime": "trusted-server", "generation": "Workmate source generation", "visibility": "selection-required", "evidenceBoundary": "The public Workmate contracts preserve OAuth bearer evidence, but the company-issued organization, user, host, scope, and lifecycle contract is authoritative.", "href": "/authentication#workmate-oauth" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=web", "apiPath": "/api/capability-qualifications?product=workmate&platform=web", "downloadPath": "/api/capability-qualifications?product=workmate&platform=web&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=web", "productPath": "/docs/workmate", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Android qualification - Identity: `capability-qualification:workmate--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=android - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--android--qualification", "matrixCellId": "workmate--android", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/reference/mappls-workmate-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "href": "/sdks/mappls-workmate-android-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-task-lifecycle", "title": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "workmate-oauth", "title": "Workmate workforce APIs", "runtime": "trusted-server", "generation": "Workmate source generation", "visibility": "selection-required", "evidenceBoundary": "The public Workmate contracts preserve OAuth bearer evidence, but the company-issued organization, user, host, scope, and lifecycle contract is authoritative.", "href": "/authentication#workmate-oauth" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=android", "apiPath": "/api/capability-qualifications?product=workmate&platform=android", "downloadPath": "/api/capability-qualifications?product=workmate&platform=android&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=android", "productPath": "/docs/workmate", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · iOS qualification - Identity: `capability-qualification:workmate--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=ios - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--ios--qualification", "matrixCellId": "workmate--ios", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=ios", "apiPath": "/api/capability-qualifications?product=workmate&platform=ios", "downloadPath": "/api/capability-qualifications?product=workmate&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=ios", "productPath": "/docs/workmate", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · React Native qualification - Identity: `capability-qualification:workmate--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=react-native - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--react-native--qualification", "matrixCellId": "workmate--react-native", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=react-native", "apiPath": "/api/capability-qualifications?product=workmate&platform=react-native", "downloadPath": "/api/capability-qualifications?product=workmate&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=react-native", "productPath": "/docs/workmate", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Flutter qualification - Identity: `capability-qualification:workmate--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=flutter - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--flutter--qualification", "matrixCellId": "workmate--flutter", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=flutter", "apiPath": "/api/capability-qualifications?product=workmate&platform=flutter", "downloadPath": "/api/capability-qualifications?product=workmate&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=flutter", "productPath": "/docs/workmate", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Cordova qualification - Identity: `capability-qualification:workmate--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=cordova - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--cordova--qualification", "matrixCellId": "workmate--cordova", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=cordova", "apiPath": "/api/capability-qualifications?product=workmate&platform=cordova", "downloadPath": "/api/capability-qualifications?product=workmate&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=cordova", "productPath": "/docs/workmate", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Xamarin qualification - Identity: `capability-qualification:workmate--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=xamarin - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--xamarin--qualification", "matrixCellId": "workmate--xamarin", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=xamarin", "apiPath": "/api/capability-qualifications?product=workmate&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=workmate&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=xamarin", "productPath": "/docs/workmate", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Linux qualification - Identity: `capability-qualification:workmate--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=linux - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--linux--qualification", "matrixCellId": "workmate--linux", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=linux", "apiPath": "/api/capability-qualifications?product=workmate&platform=linux", "downloadPath": "/api/capability-qualifications?product=workmate&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=linux", "productPath": "/docs/workmate", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Automotive qualification - Identity: `capability-qualification:workmate--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=automotive - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--automotive--qualification", "matrixCellId": "workmate--automotive", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=automotive", "apiPath": "/api/capability-qualifications?product=workmate&platform=automotive", "downloadPath": "/api/capability-qualifications?product=workmate&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=automotive", "productPath": "/docs/workmate", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Widgets qualification - Identity: `capability-qualification:workmate--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=widgets - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--widgets--qualification", "matrixCellId": "workmate--widgets", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=widgets", "apiPath": "/api/capability-qualifications?product=workmate&platform=widgets", "downloadPath": "/api/capability-qualifications?product=workmate&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=widgets", "productPath": "/docs/workmate", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · Deep links qualification - Identity: `capability-qualification:workmate--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=deep-links - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--deep-links--qualification", "matrixCellId": "workmate--deep-links", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=deep-links", "apiPath": "/api/capability-qualifications?product=workmate&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=workmate&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=deep-links", "productPath": "/docs/workmate", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Workmate · MCP qualification - Identity: `capability-qualification:workmate--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=workmate&platform=mcp - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "workmate--mcp--qualification", "matrixCellId": "workmate--mcp", "product": { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "category": "Operations", "accent": "#3478f6" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "field-service-task", "title": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=workmate&platform=mcp", "apiPath": "/api/capability-qualifications?product=workmate&platform=mcp", "downloadPath": "/api/capability-qualifications?product=workmate&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=workmate&platform=mcp", "productPath": "/docs/workmate", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · REST qualification - Identity: `capability-qualification:gis-analytics--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=rest - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--rest--qualification", "matrixCellId": "gis-analytics--rest", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "title": "Address Standardization API", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-search-json-autosuggest-api", "title": "AutoSuggest API", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "title": "Distance Matrix API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "title": "Distance Matrix Predictive ETA API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-elevation-elevation-api", "title": "Elevation API", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-geocode-geocode-api", "title": "Geocode API", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-nearby-json-nearby-api", "title": "Nearby API", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "title": "POI Along the Route API", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "title": "Place Detail API", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "title": "Reverse Geocode API", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "title": "Route Optimization API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "title": "Routing API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "title": "Routing API with biking profile", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "title": "Routing API with driving profile", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "title": "Routing API with trucking profile", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "title": "Routing API with walking profile", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "title": "Snap to Road API", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-rest-key-still-image-still-map-image-api", "title": "Still Map Image API", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-get-api-places-textsearch-json-text-search-api", "title": "Text Search API", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-security-oauth-token-token-generation-api", "title": "Token Generation API", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "title": "Traveled Route Image API", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "gis-site-selection", "title": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "mgis-entitled-browser", "title": "mGIS browser surfaces", "runtime": "enterprise", "generation": "Selected mGIS or MIGIST surface", "visibility": "entitlement-specific", "evidenceBoundary": "mGIS evidence spans browser methods, durable workspace descriptions, and a separate sovereign distribution. It does not establish one universal authentication contract.", "href": "/authentication#mgis-entitled-browser" }, { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=rest", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=rest", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=rest", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Web qualification - Identity: `capability-qualification:gis-analytics--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=web - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--web--qualification", "matrixCellId": "gis-analytics--web", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-geoanalytics-api-web", "title": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/reference/mappls-insight-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/sdks/mappls-insight-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "gis-site-selection", "title": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "iframe-and-app-widgets", "title": "App widgets and iframe embeds", "runtime": "widget", "generation": "Selected widget contract", "visibility": "entitlement-specific", "evidenceBoundary": "Widget evidence varies by family and generation. The widget builder emits placeholders only and does not accept, persist, or validate credentials.", "href": "/authentication#iframe-and-app-widgets" }, { "slug": "mgis-entitled-browser", "title": "mGIS browser surfaces", "runtime": "enterprise", "generation": "Selected mGIS or MIGIST surface", "visibility": "entitlement-specific", "evidenceBoundary": "mGIS evidence spans browser methods, durable workspace descriptions, and a separate sovereign distribution. It does not establish one universal authentication contract.", "href": "/authentication#mgis-entitled-browser" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=web", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=web", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=web&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=web", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Android qualification - Identity: `capability-qualification:gis-analytics--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=android - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--android--qualification", "matrixCellId": "gis-analytics--android", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=android", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=android", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=android&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=android", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · iOS qualification - Identity: `capability-qualification:gis-analytics--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=ios - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--ios--qualification", "matrixCellId": "gis-analytics--ios", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=ios", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=ios", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=ios", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · React Native qualification - Identity: `capability-qualification:gis-analytics--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=react-native - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--react-native--qualification", "matrixCellId": "gis-analytics--react-native", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=react-native", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=react-native", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=react-native", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Flutter qualification - Identity: `capability-qualification:gis-analytics--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=flutter - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--flutter--qualification", "matrixCellId": "gis-analytics--flutter", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=flutter", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=flutter", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=flutter", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Cordova qualification - Identity: `capability-qualification:gis-analytics--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=cordova - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--cordova--qualification", "matrixCellId": "gis-analytics--cordova", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=cordova", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=cordova", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=cordova", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Xamarin qualification - Identity: `capability-qualification:gis-analytics--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=xamarin - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--xamarin--qualification", "matrixCellId": "gis-analytics--xamarin", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=xamarin", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=xamarin", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Linux qualification - Identity: `capability-qualification:gis-analytics--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=linux - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--linux--qualification", "matrixCellId": "gis-analytics--linux", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=linux", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=linux", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=linux", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Automotive qualification - Identity: `capability-qualification:gis-analytics--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=automotive - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--automotive--qualification", "matrixCellId": "gis-analytics--automotive", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=automotive", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=automotive", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=automotive", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Widgets qualification - Identity: `capability-qualification:gis-analytics--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=widgets - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--widgets--qualification", "matrixCellId": "gis-analytics--widgets", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "selection-required", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-selection-required", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "iframe-and-app-widgets", "title": "App widgets and iframe embeds", "runtime": "widget", "generation": "Selected widget contract", "visibility": "entitlement-specific", "evidenceBoundary": "Widget evidence varies by family and generation. The widget builder emits placeholders only and does not accept, persist, or validate credentials.", "href": "/authentication#iframe-and-app-widgets" }, { "slug": "mgis-entitled-browser", "title": "mGIS browser surfaces", "runtime": "enterprise", "generation": "Selected mGIS or MIGIST surface", "visibility": "entitlement-specific", "evidenceBoundary": "mGIS evidence spans browser methods, durable workspace descriptions, and a separate sovereign distribution. It does not establish one universal authentication contract.", "href": "/authentication#mgis-entitled-browser" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The product lists this platform, but exact product-platform implementation evidence is missing.", "Select an exact source, distribution, authentication generation, and account contract.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=widgets", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=widgets", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=widgets", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · Deep links qualification - Identity: `capability-qualification:gis-analytics--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=deep-links - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--deep-links--qualification", "matrixCellId": "gis-analytics--deep-links", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=deep-links", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=deep-links", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · GIS & Analytics · MCP qualification - Identity: `capability-qualification:gis-analytics--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=gis-analytics&platform=mcp - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "gis-analytics--mcp--qualification", "matrixCellId": "gis-analytics--mcp", "product": { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "category": "Intelligence", "accent": "#17a8e3" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "ai-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "retail-site-lab", "title": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "incident-dispatch", "title": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "map-story", "title": "Map Story", "href": "/samples/map-story" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "mgis-entitled-browser", "title": "mGIS browser surfaces", "runtime": "enterprise", "generation": "Selected mGIS or MIGIST surface", "visibility": "entitlement-specific", "evidenceBoundary": "mGIS evidence spans browser methods, durable workspace descriptions, and a separate sovereign distribution. It does not establish one universal authentication contract.", "href": "/authentication#mgis-entitled-browser" }, { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=gis-analytics&platform=mcp", "apiPath": "/api/capability-qualifications?product=gis-analytics&platform=mcp", "downloadPath": "/api/capability-qualifications?product=gis-analytics&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=gis-analytics&platform=mcp", "productPath": "/docs/gis-analytics", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · REST qualification - Identity: `capability-qualification:app-widgets-deep-links--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=rest - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--rest--qualification", "matrixCellId": "app-widgets-deep-links--rest", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "trusted-service", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=rest", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=rest", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=rest", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Web qualification - Identity: `capability-qualification:app-widgets-deep-links--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=web - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--web--qualification", "matrixCellId": "app-widgets-deep-links--web", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "iframe-and-app-widgets", "title": "App widgets and iframe embeds", "runtime": "widget", "generation": "Selected widget contract", "visibility": "entitlement-specific", "evidenceBoundary": "Widget evidence varies by family and generation. The widget builder emits placeholders only and does not accept, persist, or validate credentials.", "href": "/authentication#iframe-and-app-widgets" }, { "slug": "deep-links-no-credential", "title": "Mappls deep links", "runtime": "deep-link", "generation": "Current documented link shape", "visibility": "none", "evidenceBoundary": "Deep links are documented outside the REST contract catalog and carry no credential.", "href": "/authentication#deep-links-no-credential" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=web", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=web", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=web&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=web", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Android qualification - Identity: `capability-qualification:app-widgets-deep-links--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=android - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--android--qualification", "matrixCellId": "app-widgets-deep-links--android", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "deep-links-no-credential", "title": "Mappls deep links", "runtime": "deep-link", "generation": "Current documented link shape", "visibility": "none", "evidenceBoundary": "Deep links are documented outside the REST contract catalog and carry no credential.", "href": "/authentication#deep-links-no-credential" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=android", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=android", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=android&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=android", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · iOS qualification - Identity: `capability-qualification:app-widgets-deep-links--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=ios - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--ios--qualification", "matrixCellId": "app-widgets-deep-links--ios", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "deep-links-no-credential", "title": "Mappls deep links", "runtime": "deep-link", "generation": "Current documented link shape", "visibility": "none", "evidenceBoundary": "Deep links are documented outside the REST contract catalog and carry no credential.", "href": "/authentication#deep-links-no-credential" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=ios", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=ios", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=ios", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · React Native qualification - Identity: `capability-qualification:app-widgets-deep-links--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=react-native - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--react-native--qualification", "matrixCellId": "app-widgets-deep-links--react-native", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=react-native", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=react-native", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=react-native", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Flutter qualification - Identity: `capability-qualification:app-widgets-deep-links--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=flutter - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--flutter--qualification", "matrixCellId": "app-widgets-deep-links--flutter", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=flutter", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=flutter", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=flutter", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Cordova qualification - Identity: `capability-qualification:app-widgets-deep-links--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=cordova - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--cordova--qualification", "matrixCellId": "app-widgets-deep-links--cordova", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=cordova", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=cordova", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=cordova", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Xamarin qualification - Identity: `capability-qualification:app-widgets-deep-links--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=xamarin - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--xamarin--qualification", "matrixCellId": "app-widgets-deep-links--xamarin", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=xamarin", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=xamarin", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Linux qualification - Identity: `capability-qualification:app-widgets-deep-links--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=linux - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--linux--qualification", "matrixCellId": "app-widgets-deep-links--linux", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=linux", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=linux", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=linux", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Automotive qualification - Identity: `capability-qualification:app-widgets-deep-links--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=automotive - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--automotive--qualification", "matrixCellId": "app-widgets-deep-links--automotive", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=automotive", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=automotive", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=automotive", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Widgets qualification - Identity: `capability-qualification:app-widgets-deep-links--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=widgets - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--widgets--qualification", "matrixCellId": "app-widgets-deep-links--widgets", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-app-widgets", "title": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "iframe-and-app-widgets", "title": "App widgets and iframe embeds", "runtime": "widget", "generation": "Selected widget contract", "visibility": "entitlement-specific", "evidenceBoundary": "Widget evidence varies by family and generation. The widget builder emits placeholders only and does not accept, persist, or validate credentials.", "href": "/authentication#iframe-and-app-widgets" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=widgets", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=widgets", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=widgets", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · Deep links qualification - Identity: `capability-qualification:app-widgets-deep-links--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=deep-links - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--deep-links--qualification", "matrixCellId": "app-widgets-deep-links--deep-links", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "ready-to-qualify", "stateModel": "stateless", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-intouch-web-plugins", "title": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-app-widgets", "title": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "deep-link-campaign", "title": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "navigation-deep-link", "title": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "deep-link-attribution-resilience", "title": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "deep-links-no-credential", "title": "Mappls deep links", "runtime": "deep-link", "generation": "Current documented link shape", "visibility": "none", "evidenceBoundary": "Deep links are documented outside the REST contract catalog and carry no credential.", "href": "/authentication#deep-links-no-credential" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=deep-links", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=deep-links", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · App Widgets & Deep Links · MCP qualification - Identity: `capability-qualification:app-widgets-deep-links--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=app-widgets-deep-links&platform=mcp - State model: stateless ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "app-widgets-deep-links--mcp--qualification", "matrixCellId": "app-widgets-deep-links--mcp", "product": { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "category": "Experience", "accent": "#ff4f64" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "stateless", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "store-locator", "title": "Store Locator", "href": "/samples/store-locator" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "trip-planner", "title": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "widget-journey-host", "title": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "deep-link-journey-host", "title": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "widget-selection-session", "title": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "request-replay", "title": "Safe request replay", "purpose": "Show that repeated safe requests remain bounded and do not create hidden application state.", "expectedEvidence": "Inputs, timeout, response classification, and request provenance are reproducible without persisting provider objects.", "recovery": "Normalize the adapter contract and keep business state outside the provider response." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=app-widgets-deep-links&platform=mcp", "apiPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=mcp", "downloadPath": "/api/capability-qualifications?product=app-widgets-deep-links&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=app-widgets-deep-links&platform=mcp", "productPath": "/docs/app-widgets-deep-links", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · REST qualification - Identity: `capability-qualification:offline-automotive--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=rest - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--rest--qualification", "matrixCellId": "offline-automotive--rest", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "trusted-service", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=rest", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=rest", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=rest", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Web qualification - Identity: `capability-qualification:offline-automotive--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=web - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--web--qualification", "matrixCellId": "offline-automotive--web", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=web", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=web", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=web&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=web", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Android qualification - Identity: `capability-qualification:offline-automotive--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=android - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--android--qualification", "matrixCellId": "offline-automotive--android", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "offline-device-activation", "title": "Offline and automotive activation", "runtime": "device", "generation": "Entitled runtime and data release", "visibility": "entitlement-specific", "evidenceBoundary": "The public snapshot does not establish a universal offline/automotive credential or safety contract. Entitled release material is authoritative.", "href": "/authentication#offline-device-activation" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=android", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=android", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=android&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=android", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · iOS qualification - Identity: `capability-qualification:offline-automotive--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=ios - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--ios--qualification", "matrixCellId": "offline-automotive--ios", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=ios", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=ios", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=ios", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · React Native qualification - Identity: `capability-qualification:offline-automotive--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=react-native - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--react-native--qualification", "matrixCellId": "offline-automotive--react-native", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=react-native", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=react-native", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=react-native", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Flutter qualification - Identity: `capability-qualification:offline-automotive--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=flutter - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--flutter--qualification", "matrixCellId": "offline-automotive--flutter", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=flutter", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=flutter", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=flutter", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Cordova qualification - Identity: `capability-qualification:offline-automotive--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=cordova - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--cordova--qualification", "matrixCellId": "offline-automotive--cordova", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=cordova", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=cordova", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=cordova", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Xamarin qualification - Identity: `capability-qualification:offline-automotive--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=xamarin - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--xamarin--qualification", "matrixCellId": "offline-automotive--xamarin", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=xamarin", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=xamarin", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Linux qualification - Identity: `capability-qualification:offline-automotive--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=linux - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--linux--qualification", "matrixCellId": "offline-automotive--linux", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "entitled-runtime", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "offline-package-update", "title": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "linux-map-client", "title": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "offline-device-activation", "title": "Offline and automotive activation", "runtime": "device", "generation": "Entitled runtime and data release", "visibility": "entitlement-specific", "evidenceBoundary": "The public snapshot does not establish a universal offline/automotive credential or safety contract. Entitled release material is authoritative.", "href": "/authentication#offline-device-activation" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=linux", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=linux", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=linux", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Automotive qualification - Identity: `capability-qualification:offline-automotive--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=automotive - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--automotive--qualification", "matrixCellId": "offline-automotive--automotive", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "ready-to-qualify", "stateModel": "stateful", "integrationLane": "entitled-runtime", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "offline-package-update", "title": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "linux-map-client", "title": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "offline-device-activation", "title": "Offline and automotive activation", "runtime": "device", "generation": "Entitled runtime and data release", "visibility": "entitlement-specific", "evidenceBoundary": "The public snapshot does not establish a universal offline/automotive credential or safety contract. Entitled release material is authoritative.", "href": "/authentication#offline-device-activation" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=automotive", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=automotive", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=automotive", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Widgets qualification - Identity: `capability-qualification:offline-automotive--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=widgets - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--widgets--qualification", "matrixCellId": "offline-automotive--widgets", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=widgets", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=widgets", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=widgets", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · Deep links qualification - Identity: `capability-qualification:offline-automotive--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=deep-links - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--deep-links--qualification", "matrixCellId": "offline-automotive--deep-links", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=deep-links", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=deep-links", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Offline & Automotive · MCP qualification - Identity: `capability-qualification:offline-automotive--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=offline-automotive&platform=mcp - State model: stateful ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "offline-automotive--mcp--qualification", "matrixCellId": "offline-automotive--mcp", "product": { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "category": "Embedded", "accent": "#d6a600" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "stateful", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "offline-release-control", "title": "Offline Release Control", "href": "/samples/offline-release-control" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "offline-automotive-release", "title": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=offline-automotive&platform=mcp", "apiPath": "/api/capability-qualifications?product=offline-automotive&platform=mcp", "downloadPath": "/api/capability-qualifications?product=offline-automotive&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=offline-automotive&platform=mcp", "productPath": "/docs/offline-automotive", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · REST qualification - Identity: `capability-qualification:ai-location--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=rest - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--rest--qualification", "matrixCellId": "ai-location--rest", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "trusted-service", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis", "href": "/reference/mappls-intouch-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "href": "/reference/mappls-rest-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "title": "Returns the image in which objects of geometry are blurred as given by the client.", "href": "/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "title": "Returns the Brands bounding box array for the inputs Images", "href": "/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "title": "Returns the array of features which contains objects of geometry of the uploaded image.", "href": "/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "title": "Returns different output depending upon the inputs given.", "href": "/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "title": "Returns the image which contains objects of geometry of the detected face plotted on it with the bounding box.", "href": "/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "title": "Returns the face blured images of the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "title": "Returns the bounding box array for the inputs Image", "href": "/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "title": "Returns the box drawn faces on the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image", "title": "Returns the face blured images of the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images", "title": "Returns the bounding box array for the inputs panorama Images", "href": "/api-reference/mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image", "title": "Returns the box drawn faces on the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image", "title": "Returns the License Plate blured images of the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image", "title": "Returns the bounding box array for the inputs Image", "href": "/api-reference/mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image", "title": "Returns the box drawn License Plate on the uploaded 2D image", "href": "/api-reference/mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image", "title": "Returns the License plate blured images of the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images", "title": "Returns the bounding box array of License plate in panorama Images", "href": "/api-reference/mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image", "title": "Returns the box drawn License plate in the uploaded panorama image", "href": "/api-reference/mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "title": "Returns the details of all the models", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "title": "Returns the details of provided model", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "title": "Returns the prediction as response in form of JSON", "href": "/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" }, { "kind": "api", "fidelity": "exact-product-platform", "slug": "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "title": "Returns the current models in port", "href": "/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=rest", "apiPath": "/api/capability-qualifications?product=ai-location&platform=rest", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=rest", "productPath": "/docs/ai-location", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Web qualification - Identity: `capability-qualification:ai-location--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=web - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--web--qualification", "matrixCellId": "ai-location--web", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/reference/mappls-insight-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps", "title": "Sign up for Mappls", "href": "/reference/mappls-web-maps" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "href": "/reference/mappls-web-maps-js" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-web-plugins", "title": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "href": "/sdks/mappls-insight-sdk" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=web", "apiPath": "/api/capability-qualifications?product=ai-location&platform=web", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=web&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=web", "productPath": "/docs/ai-location", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Android qualification - Identity: `capability-qualification:ai-location--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=android - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--android--qualification", "matrixCellId": "ai-location--android", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=android", "apiPath": "/api/capability-qualifications?product=ai-location&platform=android", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=android&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=android", "productPath": "/docs/ai-location", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · iOS qualification - Identity: `capability-qualification:ai-location--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=ios - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--ios--qualification", "matrixCellId": "ai-location--ios", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=ios", "apiPath": "/api/capability-qualifications?product=ai-location&platform=ios", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=ios", "productPath": "/docs/ai-location", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · React Native qualification - Identity: `capability-qualification:ai-location--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=react-native - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--react-native--qualification", "matrixCellId": "ai-location--react-native", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=react-native", "apiPath": "/api/capability-qualifications?product=ai-location&platform=react-native", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=react-native", "productPath": "/docs/ai-location", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Flutter qualification - Identity: `capability-qualification:ai-location--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=flutter - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--flutter--qualification", "matrixCellId": "ai-location--flutter", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=flutter", "apiPath": "/api/capability-qualifications?product=ai-location&platform=flutter", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=flutter", "productPath": "/docs/ai-location", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Cordova qualification - Identity: `capability-qualification:ai-location--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=cordova - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--cordova--qualification", "matrixCellId": "ai-location--cordova", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=cordova", "apiPath": "/api/capability-qualifications?product=ai-location&platform=cordova", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=cordova", "productPath": "/docs/ai-location", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Xamarin qualification - Identity: `capability-qualification:ai-location--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=xamarin - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--xamarin--qualification", "matrixCellId": "ai-location--xamarin", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=xamarin", "apiPath": "/api/capability-qualifications?product=ai-location&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=xamarin", "productPath": "/docs/ai-location", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Linux qualification - Identity: `capability-qualification:ai-location--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=linux - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--linux--qualification", "matrixCellId": "ai-location--linux", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=linux", "apiPath": "/api/capability-qualifications?product=ai-location&platform=linux", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=linux", "productPath": "/docs/ai-location", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Automotive qualification - Identity: `capability-qualification:ai-location--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=automotive - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--automotive--qualification", "matrixCellId": "ai-location--automotive", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=automotive", "apiPath": "/api/capability-qualifications?product=ai-location&platform=automotive", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=automotive", "productPath": "/docs/ai-location", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Widgets qualification - Identity: `capability-qualification:ai-location--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=widgets - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--widgets--qualification", "matrixCellId": "ai-location--widgets", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=widgets", "apiPath": "/api/capability-qualifications?product=ai-location&platform=widgets", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=widgets", "productPath": "/docs/ai-location", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · Deep links qualification - Identity: `capability-qualification:ai-location--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=deep-links - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--deep-links--qualification", "matrixCellId": "ai-location--deep-links", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=deep-links", "apiPath": "/api/capability-qualifications?product=ai-location&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=deep-links", "productPath": "/docs/ai-location", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · AI & Location · MCP qualification - Identity: `capability-qualification:ai-location--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=ai-location&platform=mcp - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "ai-location--mcp--qualification", "matrixCellId": "ai-location--mcp", "product": { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "category": "Intelligence", "accent": "#845ef7" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "ai-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "mappls-mcp-agent", "title": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "mcp-client-identity", "title": "Provision and validate a remote MCP client", "href": "/tutorials/mcp-client-identity" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "spatial-agent", "title": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "a2a-solution-studio", "title": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "mcp-identity-lab", "title": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "generation": "MCP offline or live-read profile", "visibility": "selection-required", "evidenceBoundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes.", "href": "/authentication#mcp-gateway-and-provider" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=ai-location&platform=mcp", "apiPath": "/api/capability-qualifications?product=ai-location&platform=mcp", "downloadPath": "/api/capability-qualifications?product=ai-location&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=ai-location&platform=mcp", "productPath": "/docs/ai-location", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · REST qualification - Identity: `capability-qualification:capture-feedback--rest--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=rest - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--rest--qualification", "matrixCellId": "capture-feedback--rest", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "rest", "name": "REST", "headline": "Put Mappls behind a stable service boundary in any stack." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "trusted-service", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "rest-api", "title": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "rest-api-starter", "title": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Approved host/path and API generation", "Server workload and egress identity", "Secret-provider key version—not its value", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=rest", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=rest", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=rest&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=rest", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/rest" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Web qualification - Identity: `capability-qualification:capture-feedback--web--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=web - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--web--qualification", "matrixCellId": "capture-feedback--web", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "web", "name": "Web", "headline": "Build expressive browser maps without surrendering performance or control." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "web-map", "title": "Render one accessible web map", "href": "/quickstart/web-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "web-map-starter", "title": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=web", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=web", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=web&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=web", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/web" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Android qualification - Identity: `capability-qualification:capture-feedback--android--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=android - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--android--qualification", "matrixCellId": "capture-feedback--android", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "android", "name": "Android", "headline": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "android-native", "title": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "android-native-starter", "title": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "android-public-key", "title": "Android native application", "runtime": "android", "generation": "Selected Android SDK generation", "visibility": "public-restricted", "evidenceBoundary": "Android source repositories provide SDK/sample evidence, not a universal credential field, compatibility matrix, or entitlement promise.", "href": "/authentication#android-public-key" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=android", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=android", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=android&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=android", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/android" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · iOS qualification - Identity: `capability-qualification:capture-feedback--ios--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=ios - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--ios--qualification", "matrixCellId": "capture-feedback--ios", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "ios", "name": "iOS", "headline": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks." }, "status": "ready-to-qualify", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "listed", "evidenceStatus": "listed-with-exact-evidence", "exactEvidence": [ { "kind": "source-guide", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/reference/mappls-intouch-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/reference/mappls-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK", "href": "/reference/mappls-location-capture-ios-sdk" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "kind": "source-guide", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "href": "/sdks/mappls-intouch-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK", "href": "/sdks/mappls-location-capture-ios-sdk" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "href": "/sdks/mappls-location-capture-sdk-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" }, { "kind": "sdk", "fidelity": "exact-source", "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" }, { "kind": "tutorial", "fidelity": "exact-product-platform", "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "ios-native-starter", "title": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "Listed means this product names the platform in the canonical catalog. Source evidence, repository activity, fixtures, tutorials, and successful builds still do not prove package availability, account entitlement, runtime compatibility, region, quota, support, or production approval." }, "authenticationCandidates": [ { "slug": "ios-public-key", "title": "iOS native application", "runtime": "ios", "generation": "Selected iOS SDK generation", "visibility": "public-restricted", "evidenceBoundary": "iOS source and distribution repositories identify candidate SDK lines; account credentials, checksums, target compatibility, and entitlement require confirmation.", "href": "/authentication#ios-public-key" }, { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "generation": "Account-specific", "visibility": "selection-required", "evidenceBoundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract.", "href": "/authentication#contract-selection-required" } ], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "actionable", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "actionable", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "external-evidence-required", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "external-evidence-required", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "external-evidence-required", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=ios", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=ios", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=ios&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=ios", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/ios" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · React Native qualification - Identity: `capability-qualification:capture-feedback--react-native--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=react-native - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--react-native--qualification", "matrixCellId": "capture-feedback--react-native", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "react-native", "name": "React Native", "headline": "Share product logic while keeping native Mappls capabilities honest on both platforms." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "react-native-map-starter", "title": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=react-native", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=react-native", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=react-native&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=react-native", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/react-native" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Flutter qualification - Identity: `capability-qualification:capture-feedback--flutter--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=flutter - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--flutter--qualification", "matrixCellId": "capture-feedback--flutter", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "flutter", "name": "Flutter", "headline": "Use one Dart experience with deliberate native Mappls configuration underneath." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "flutter-map-starter", "title": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=flutter", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=flutter", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=flutter&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=flutter", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/flutter" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Cordova qualification - Identity: `capability-qualification:capture-feedback--cordova--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=cordova - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--cordova--qualification", "matrixCellId": "capture-feedback--cordova", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "cordova", "name": "Cordova", "headline": "Maintain hybrid location experiences with explicit native ownership and a migration path." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "cordova-maintenance-starter", "title": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=cordova", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=cordova", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=cordova&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=cordova", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/cordova" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Xamarin qualification - Identity: `capability-qualification:capture-feedback--xamarin--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=xamarin - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--xamarin--qualification", "matrixCellId": "capture-feedback--xamarin", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "xamarin", "name": "Xamarin", "headline": "Stabilize existing .NET mobile integrations and move forward without losing behavior." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "native-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance", "title": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "xamarin-maintenance-starter", "title": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Package or bundle identity and signing owner", "SDK/wrapper version plus build-tool matrix", "Permission, lifecycle, device, and release-artifact identity", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=xamarin", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=xamarin", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=xamarin&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=xamarin", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/xamarin" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Linux qualification - Identity: `capability-qualification:capture-feedback--linux--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=linux - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--linux--qualification", "matrixCellId": "capture-feedback--linux", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "linux", "name": "Linux", "headline": "Run location and navigation reliably on controlled, embedded Linux systems." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "linux-embedded", "title": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "linux-embedded-starter", "title": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=linux", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=linux", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=linux&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=linux", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/linux" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Automotive qualification - Identity: `capability-qualification:capture-feedback--automotive--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=automotive - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--automotive--qualification", "matrixCellId": "capture-feedback--automotive", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "automotive", "name": "Automotive", "headline": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "entitled-runtime", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "automotive-navigation", "title": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "automotive-navigation-starter", "title": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Hardware/OS/runtime and protected distribution identity", "License or entitlement reference—not its contents", "Artifact checksum, update channel, and rollback owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=automotive", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=automotive", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=automotive&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=automotive", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/automotive" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Widgets qualification - Identity: `capability-qualification:capture-feedback--widgets--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=widgets - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--widgets--qualification", "matrixCellId": "capture-feedback--widgets", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "widgets", "name": "Widgets", "headline": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "widgets-place", "title": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "widgets-place-starter", "title": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=widgets", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=widgets", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=widgets&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=widgets", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/widgets" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · Deep links qualification - Identity: `capability-qualification:capture-feedback--deep-links--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=deep-links - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--deep-links--qualification", "matrixCellId": "capture-feedback--deep-links", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "deep-links", "name": "Deep links", "headline": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "browser-or-embed", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "deep-links", "title": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "deep-links-starter", "title": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "Exact HTTPS origin and CSP policy", "Script, iframe, widget, or deep-link generation", "Browser fallback and message-origin contract", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=deep-links", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=deep-links", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=deep-links&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=deep-links", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/deep-links" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## capability-qualification · Capture & Feedback · MCP qualification - Identity: `capability-qualification:capture-feedback--mcp--qualification` - Canonical: https://developer.mappls.com/platforms/qualify?product=capture-feedback&platform=mcp - State model: hybrid ```json { "schemaVersion": "mappls.capability-qualification.v1", "id": "capture-feedback--mcp--qualification", "matrixCellId": "capture-feedback--mcp", "product": { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "category": "Data operations", "accent": "#1c9c62" }, "platform": { "slug": "mcp", "name": "MCP", "headline": "Give AI systems typed Mappls capabilities with policy, evidence, and human control." }, "status": "not-listed", "stateModel": "hybrid", "integrationLane": "ai-client", "decision": { "availability": "not-listed", "evidenceStatus": "not-listed", "exactEvidence": [], "supportingEvidence": [ { "kind": "quickstart", "fidelity": "platform-adjacent", "slug": "mcp-agent", "title": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" }, { "kind": "starter-kit", "fidelity": "platform-adjacent", "slug": "mcp-agent-starter", "title": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "grid-restoration-desk", "title": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "care-transfer-desk", "title": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "airside-turnaround-desk", "title": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "field-service", "title": "Field Service Console", "href": "/samples/field-service" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "address-verifier", "title": "Address Verifier", "href": "/samples/address-verifier" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "vision-evidence-desk", "title": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "place-contribution-desk", "title": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "kind": "sample-app", "fidelity": "product-adjacent", "slug": "realview-inspection-desk", "title": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "kind": "journey", "fidelity": "product-adjacent", "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "boundary": "This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability." }, "authenticationCandidates": [], "identityLock": [ "Product and platform decision ID", "Account and environment reference", "Region and data-residency decision", "MCP deployment and transport identity", "OAuth resource, issuer, audience, client, and profile", "Exact tool allowlist, human boundary, and durable-state owner", "Source/distribution fingerprint and release owner", "Quota, support, incident, rollback, and retirement owners" ], "scenarios": [ { "id": "clean-build", "title": "Clean build and identity lock", "purpose": "Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.", "expectedEvidence": "Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.", "recovery": "Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment." }, { "id": "fixture-success", "title": "Deterministic fixture success", "purpose": "Exercise the application adapter without credentials or provider traffic.", "expectedEvidence": "The fixture produces the documented application contract and retains source identity plus state ownership.", "recovery": "Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter." }, { "id": "authentication-denied", "title": "Missing, denied, expired, and revoked access", "purpose": "Prove least-privilege failure without logging, reflecting, or weakening credential controls.", "expectedEvidence": "Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.", "recovery": "Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently." }, { "id": "quota-unavailable", "title": "Quota, timeout, offline, and service unavailability", "purpose": "Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.", "expectedEvidence": "Retry-After is honored where present; uncertain state changes never become blind retries.", "recovery": "Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay." }, { "id": "upgrade-rollback", "title": "Upgrade, downgrade, and rollback", "purpose": "Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.", "expectedEvidence": "Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.", "recovery": "Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection." }, { "id": "idempotent-replay", "title": "Idempotent command replay", "purpose": "Repeat one stable command identity after a committed or uncertain result.", "expectedEvidence": "The aggregate version and application event identity do not duplicate.", "recovery": "Reconcile by stable business and provider identity before any new command." }, { "id": "stale-version", "title": "Stale version and concurrent actor", "purpose": "Prevent an older actor or callback from overwriting newer durable truth.", "expectedEvidence": "The stale transition is rejected without state mutation or event emission.", "recovery": "Reload the current aggregate, re-evaluate policy, and require a new attributable decision." }, { "id": "unknown-outcome", "title": "Unknown provider outcome", "purpose": "Separate timeout from failure and preserve a recoverable pending state.", "expectedEvidence": "The application records the attempt, reconciles provider truth, and completes or retries without duplication.", "recovery": "Do not infer success or failure; reconcile using the exact issued operation and durable identity." }, { "id": "restart-recovery", "title": "Restart and delayed evidence", "purpose": "Recover application-owned state after process restart and reject late or superseded callbacks.", "expectedEvidence": "The journey resumes from durable records and preserves generation, actor, and event ordering.", "recovery": "Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks." } ], "phases": [ { "id": "select-authority", "title": "Lock source and product authority", "owner": "Product owner + application technical owner", "state": "actionable", "objective": "Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.", "activities": [ "Review exact evidence separately from adjacent learning material.", "Record every unresolved package, endpoint, callback, entitlement, and version question.", "Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence." ], "exitEvidence": [ "Immutable product-platform decision", "Exact source/distribution identities and fingerprints", "Named product, security, application, and release owners" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "lock-runtime", "title": "Lock runtime and authentication", "owner": "Application owner + security", "state": "blocked", "objective": "Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.", "activities": [ "Record the runtime identity fields for this integration lane.", "Choose one issued authentication path and document forbidden placement.", "Define non-production restrictions, rotation, redaction, and incident ownership." ], "exitEvidence": [ "Runtime compatibility decision", "Credential class and restriction record", "Secret/public-value placement review" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "prove-fixture", "title": "Prove the application contract offline", "owner": "Application team", "state": "blocked", "objective": "Exercise a deterministic adapter and every application-owned invariant before provider access.", "activities": [ "Run the clean-build and fixture-success scenarios.", "Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.", "Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures." ], "exitEvidence": [ "Fixture results tied to the source lock", "Application contract/schema", "Failure and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification." ] }, { "id": "qualify-nonproduction", "title": "Qualify issued non-production access", "owner": "Product owner + application team", "state": "blocked", "objective": "Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.", "activities": [ "Confirm account, entitlement, host, region, quota, and exact operation/distribution.", "Capture credential-free conformance results and safe request identities.", "Compare live shape and failure classification to the locked application contract." ], "exitEvidence": [ "Signed or attributable product-owner decision", "Credential-free conformance report", "Account/region/quota/entitlement reference", "Observed compatibility and divergence record" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Issued non-production account and approved provider contract are external requirements." ] }, { "id": "exercise-journey", "title": "Exercise lifecycle and hostile paths", "owner": "Application team + operations", "state": "blocked", "objective": "Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.", "activities": [ "Execute every published qualification scenario.", "For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.", "Verify telemetry, quota alarms, support evidence, cleanup, and rollback." ], "exitEvidence": [ "Scenario-by-scenario result ledger", "State/reconciliation evidence where applicable", "Alert, runbook, support, cleanup, and rollback evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "Operational telemetry and provider-degradation exercises require an approved environment." ] }, { "id": "approve-release", "title": "Independent release and deployment", "owner": "Independent security + operations + product release owners", "state": "blocked", "objective": "Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.", "activities": [ "Attach exact artifacts to the governed release workflow.", "Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.", "Use progressive deployment and independently reconcile production health." ], "exitEvidence": [ "Immutable release artifact and evidence digests", "Independent approvals", "Progressive deployment, rollback, and post-release reconciliation evidence" ], "blockedBy": [ "The canonical product catalog does not list this platform.", "A product owner must establish availability before implementation qualification.", "This catalog never grants entitlement, support, production release, or deployment authority." ] } ], "releaseEvidence": [ "Exact source, package/distribution, contract generation, and runtime identity", "Issued account, entitlement, region, quota, and credential-class reference without secret values", "Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results", "Security, privacy, accessibility, operational, legal/content, and product-owner decisions", "Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation" ], "handoff": { "websitePath": "/platforms/qualify?product=capture-feedback&platform=mcp", "apiPath": "/api/capability-qualifications?product=capture-feedback&platform=mcp", "downloadPath": "/api/capability-qualifications?product=capture-feedback&platform=mcp&download=1", "matrixPath": "/platforms/matrix?product=capture-feedback&platform=mcp", "productPath": "/docs/capture-feedback", "platformPath": "/platforms/mcp" }, "safety": { "providerCalls": 0, "credentialsAccepted": false, "providerPayloadsAccepted": false, "writesExposed": false, "productionApprovalGranted": false } } ``` ## api-operation · Address Standardization API - Identity: `api-operation:core-location-get-api-places-woodpecker-address-standardization-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-woodpecker-address-standardization-api - State model: stateless ```json { "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/woodpecker.yml", "sourceFingerprint": "3f28b55a402736d962c9a4249a77738d2435dc61d2274164b43e440892aee908", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/api/places/woodpecker", "baseUrl": "https://atlas.mapmyindia.com", "requestUrl": "https://atlas.mapmyindia.com/api/places/woodpecker?address=237+Okhla+industrial+estate+phase+3+new+Delhi%2C+Delhi+110020", "operationId": "WoodpeckerAPI", "summary": "Address Standardization API", "description": "Address Standardization API is a process to convert the non formatted address into the user readable format by omitting unnecessary information in the address. MapmyIndia address standardization API provides real addresses along with admin and other information. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo", "tags": [ "Address Standardization API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "address", "in": "query", "required": true, "type": "string", "description": "The full human readable address that needs to be standardized", "example": "237 Okhla industrial estate phase 3 new Delhi, Delhi 110020", "enum": [] }, { "name": "bias", "in": "query", "required": false, "type": "number", "description": "parameter value can be set to get the bias result towards the urban or rural side. (Default is 1.5 : urban). Where 1 is neutral and 1 is Urban biased.", "example": 1.5, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "inputAddress", "type": "string", "required": true, "description": "this is the address entered by the user.", "example": "237, MapmyIndia Head Office, Okhla Phase 3, New Delhi, Delhi 110010", "enum": [] }, { "name": "remainingAddress", "type": "string", "required": true, "description": "this is the address striked out by the API.", "example": "mapmyindia head office, okhla new", "enum": [] }, { "name": "referentialInformation", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "referentialInformation.pincodes", "type": "string", "required": true, "description": "PIN code tagged from input address if found any.", "example": "110010", "enum": [] }, { "name": "referentialInformation.floors", "type": "string", "required": true, "description": "Floor info tagged from input address if found any.", "example": "Floor No 1", "enum": [] }, { "name": "referentialInformation.roads", "type": "string", "required": true, "description": "Road tagged from the input address if found any.", "example": "Okhla Road", "enum": [] }, { "name": "referentialInformation.postOffices", "type": "string", "required": true, "description": "Post offices tagged from the input address if found any.", "example": "", "enum": [] }, { "name": "referentialInformation.careOfs", "type": "string", "required": true, "description": "Care of (C/O) tagged from the input address if found any.", "example": "", "enum": [] }, { "name": "referentialInformation.landmarks", "type": "string", "required": true, "description": "Landmark tagged from the input address if found any.", "example": "", "enum": [] }, { "name": "referentialInformation.houseNumbers", "type": "object", "required": true, "description": "House number information tagged from the input address if found any.", "example": "example", "enum": [] }, { "name": "referentialInformation.houseNumbers.prefix", "type": "string", "required": true, "description": "", "example": "", "enum": [] }, { "name": "referentialInformation.houseNumbers.houseNo", "type": "string", "required": true, "description": "", "example": "237", "enum": [] }, { "name": "referentialInformation.houseNumbers.formatted", "type": "string", "required": true, "description": "", "example": "237", "enum": [] }, { "name": "addressInformation", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "addressInformation.adminDetails", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "addressInformation.adminDetails.state", "type": "object", "required": true, "description": "", "example": "1700000000000", "enum": [] }, { "name": "addressInformation.adminDetails.state.originalName", "type": "string", "required": true, "description": "", "example": "Delhi", "enum": [] }, { "name": "addressInformation.adminDetails.locality", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "addressInformation.adminDetails.locality.originalName", "type": "string", "required": true, "description": "", "example": "New Moti Nagar", "enum": [] }, { "name": "addressInformation.adminDetails.city", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "addressInformation.adminDetails.city.originalName", "type": "string", "required": true, "description": "", "example": "New Delhi", "enum": [] }, { "name": "addressInformation.adminDetails.sublocality", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "addressInformation.adminDetails.sublocality.originalName", "type": "string", "required": true, "description": "", "example": "Phase 3", "enum": [] }, { "name": "addressInformation.adminDetails.subsublocality", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "addressInformation.adminDetails.subsublocality.originalName", "type": "string", "required": true, "description": "", "example": "Okhla", "enum": [] }, { "name": "addressInformation.adminPattern", "type": "array", "required": true, "description": "", "example": [ "state", "city", "locality", "subLocality" ], "enum": [] } ], "example": { "inputAddress": "237, MapmyIndia Head Office, Okhla Phase 3, New Delhi, Delhi 110010", "remainingAddress": "mapmyindia head office, okhla new", "referentialInformation": { "pincodes": "110010", "floors": "Floor No 1", "roads": "Okhla Road", "postOffices": "", "careOfs": "", "landmarks": "", "houseNumbers": { "prefix": "", "houseNo": "237", "formatted": "237" } }, "addressInformation": { "adminDetails": { "state": { "originalName": "Delhi" }, "locality": { "originalName": "New Moti Nagar" }, "city": { "originalName": "New Delhi" }, "sublocality": { "originalName": "Phase 3" }, "subsublocality": { "originalName": "Okhla" } }, "adminPattern": [ "state", "city", "locality", "subLocality" ] } } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://atlas.mapmyindia.com/api/places/woodpecker?address=237+Okhla+industrial+estate+phase+3+new+Delhi%2C+Delhi+110020' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://atlas.mapmyindia.com/api/places/woodpecker?address=237+Okhla+industrial+estate+phase+3+new+Delhi%2C+Delhi+110020\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://atlas.mapmyindia.com/api/places/woodpecker?address=237+Okhla+industrial+estate+phase+3+new+Delhi%2C+Delhi+110020\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://atlas.mapmyindia.com/api/places/woodpecker?address=237+Okhla+industrial+estate+phase+3+new+Delhi%2C+Delhi+110020\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://atlas.mapmyindia.com/api/places/woodpecker?address=237+Okhla+industrial+estate+phase+3+new+Delhi%2C+Delhi+110020\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 35, "generationGroup": "core-location-get-api-places-woodpecker-690bbb30d1", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · AutoSuggest API - Identity: `api-operation:core-location-get-api-places-search-json-autosuggest-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-search-json-autosuggest-api - State model: stateless ```json { "slug": "core-location-get-api-places-search-json-autosuggest-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/api/places/search/json", "baseUrl": "https://atlas.mapmyindia.com", "requestUrl": "https://atlas.mapmyindia.com/api/places/search/json?query=mapmyindia", "operationId": "AutoSuggestAPI", "summary": "AutoSuggest API", "description": "The Autosuggest API helps users to complete queries faster by adding intelligent search capabilities to your web or mobile app. This API returns a list of results as well as suggested queries as the user types in the search field. This API also supports Hindi language. If a user enters query in hindi language he will get results in Hindi. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo | Download Sample Code", "tags": [ "Autosuggest API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "query", "in": "query", "required": true, "type": "string", "description": "Enter the query on which the search has to be done.", "example": "mapmyindia", "enum": [] }, { "name": "location", "in": "query", "required": false, "type": "string", "description": "Location is required to get location biased autosuggest results.", "example": "28.612964,77.229463", "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "It takes in the country code. Possible values are listed in a table here. Default is India (IND).", "example": "IND", "enum": [] }, { "name": "tokenizeAddress", "in": "query", "required": false, "type": "boolean", "description": "It is the valueless parameter provides the different address attributes in a structured object.", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "pod", "in": "query", "required": false, "type": "string", "description": "It takes in the place type code which helps in restricting the results to certain chosen type. This optional parameter & its related effect on response is not applicable for regions apart from India (IND). Below mentioned are the codes for the pod: SLC: Sublocality LC: Locality CITY: City VLG: Village SDIST: Subdistrict DIST: District STATE: State SSLC: Subsublocality", "example": "CITY", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "This parameter helps you restrict the result either by mentioning a bounded area or to certain eloc (6 digit code to any poi, locality, city, etc.). This optional parameter & its related effect on response is not applicable for regions apart from India (IND). Below mentioned are the available types: filter = pin:It takes pincode/postal code of an area{e.g. filter=pin:110055} filter = bounds lat1,lng1;lat2,lng2(latitude,longitude){e.g. filter=bounds 28.598882, 77.212407; 28.467375, 77.353513} filter = cop {eloc} (string) {e.g. filter=cop:YMCZ0J}", "example": "pin:110001", "enum": [] }, { "name": "bridge", "in": "query", "required": false, "type": "boolean", "description": "(Valueless)It initiates a bridge to be created to provide applicable nearby API searches in the suggestedSearches response object. This optional parameter & its related effect on response is not applicable for regions apart from India (IND).", "example": "true", "enum": [] }, { "name": "hyperLocal", "in": "query", "required": false, "type": "boolean", "description": "(valueless): This parameter lets the search give results that are hyper-localized to the reference location passed in the location parameter. This means that nearby results are given higher ranking than results far from the reference location. Highly prominent results will still appear in the search results, however they will be lower in the list of results. This parameter will work ONLY in conjunction with the location parameter. This optional parameter & its related effect on response is not applicable for regions apart from India (IND).", "example": "true", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "suggestedLocations", "type": "array", "required": true, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "suggestedLocations[].type", "type": "string", "required": true, "description": "This is the type whether the results is POI or any building point.", "example": "POI", "enum": [] }, { "name": "suggestedLocations[].typeX", "type": "integer", "required": true, "description": "Type attribute for internal use only for MapmyIndia.", "example": 7, "enum": [] }, { "name": "suggestedLocations[].placeAddress", "type": "string", "required": true, "description": "Address of the location.", "example": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "enum": [] }, { "name": "suggestedLocations[].latitude", "type": "number", "required": true, "description": "It shows us the latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedLocations[].longitude", "type": "number", "required": true, "description": "It shows us the longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedLocations[].eLoc", "type": "string", "required": true, "description": "It is the Six or eight digit unique code offered only by mapmyindia to search for any address through this eLoc.", "example": "MMI000", "enum": [] }, { "name": "suggestedLocations[].entryLatitude", "type": "number", "required": true, "description": "It shows us the entry latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedLocations[].entryLongitude", "type": "number", "required": true, "description": "It shows us the entry longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedLocations[].placeName", "type": "string", "required": true, "description": "This shows the name of the POI", "example": "OYO Hotel", "enum": [] }, { "name": "suggestedLocations[].alternateName", "type": "string", "required": true, "description": "This shows the alternate name of the POI", "example": "OyoRooms,OYO 40400 Yippe Rooms,OYO Rooms Hotel", "enum": [] }, { "name": "suggestedLocations[].keywords", "type": "array", "required": true, "description": "The keywords/category codes associated with the given result.", "example": "example", "enum": [] }, { "name": "suggestedLocations[].addressTokens", "type": "object", "required": true, "description": "", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "suggestedLocations[].addressTokens.houseNumber", "type": "string", "required": false, "description": "House Number of the POI.", "example": "237", "enum": [] }, { "name": "suggestedLocations[].addressTokens.houseName", "type": "string", "required": false, "description": "House Name of the POI.", "example": "MMI Building", "enum": [] }, { "name": "suggestedLocations[].addressTokens.poi", "type": "string", "required": false, "description": "Name of the POI.", "example": "MapmyIndia Head Office", "enum": [] }, { "name": "suggestedLocations[].addressTokens.street", "type": "string", "required": false, "description": "Name of the street.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.subSubLocality", "type": "string", "required": false, "description": "Name of the subsublocality.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.subLocality", "type": "string", "required": false, "description": "Name of the sublocality.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.locality", "type": "string", "required": false, "description": "Name of the locality.", "example": "Okhla industrial phase 3", "enum": [] }, { "name": "suggestedLocations[].addressTokens.village", "type": "string", "required": false, "description": "Name of the village.", "example": "Okhla Vilage", "enum": [] }, { "name": "suggestedLocations[].addressTokens.subDistrict", "type": "string", "required": false, "description": "Name of the subDistrict.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.district", "type": "string", "required": true, "description": "Name of the District.", "example": "South Delhi", "enum": [] }, { "name": "suggestedLocations[].addressTokens.city", "type": "string", "required": true, "description": "Name of the city.", "example": "New Delhi", "enum": [] }, { "name": "suggestedLocations[].addressTokens.state", "type": "string", "required": true, "description": "Name of the STATE.", "example": "1700000000000", "enum": [] }, { "name": "suggestedLocations[].addressTokens.pincode", "type": "integer", "required": false, "description": "PINcode of the location.", "example": "110010", "enum": [] }, { "name": "suggestedLocations[].p", "type": "integer", "required": true, "description": "This shows the priority of the POI", "example": 11663, "enum": [] }, { "name": "suggestedLocations[].orderIndex", "type": "integer", "required": true, "description": "This shows the order of the search results priority wise.", "example": 1, "enum": [] }, { "name": "suggestedLocations[].score", "type": "number", "required": true, "description": "This shows the score of the POI.", "example": 1.5075794782130676, "enum": [] }, { "name": "suggestedLocations[].suggester", "type": "string", "required": true, "description": "This shows on which basis the search results has been found.", "example": "alternateName", "enum": [] }, { "name": "suggestedLocations[].richInfo", "type": "array", "required": true, "description": "This shows the rich info associated with the given result.", "example": "", "enum": [] }, { "name": "userAddedLocation", "type": "array", "required": true, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "userAddedLocation[].eLoc", "type": "string", "required": true, "description": "It is the Six or eight digit unique code offered only by mapmyindia to search for any address through this eLoc.", "example": "MMI000", "enum": [] }, { "name": "userAddedLocation[].entryLatitude", "type": "number", "required": true, "description": "latitude of the entrance of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "userAddedLocation[].entryLongitude", "type": "number", "required": true, "description": "longitude of the entrance of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "userAddedLocation[].latitude", "type": "number", "required": true, "description": "It shows us the latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "userAddedLocation[].longitude", "type": "number", "required": true, "description": "It shows us the longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "userAddedLocation[].orderIndex", "type": "integer", "required": true, "description": "This shows the order of the search results priority wise.", "example": 1, "enum": [] }, { "name": "userAddedLocation[].placeAddress", "type": "string", "required": true, "description": "This is the address of the text searched by you.", "example": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "enum": [] }, { "name": "userAddedLocation[].placeName", "type": "string", "required": true, "description": "This shows the name of the POI.", "example": "OYO Hotel", "enum": [] }, { "name": "userAddedLocation[].resultType", "type": "string", "required": true, "description": "It Shows the the category of result falling into. For eg. UAP", "example": "UAP", "enum": [] }, { "name": "userAddedLocation[].type", "type": "string", "required": true, "description": "", "example": "", "enum": [] }, { "name": "userAddedLocation[].userName", "type": "string", "required": true, "description": "It shows the UserID of the person who added the location.", "example": "usr1577100139i799918080", "enum": [] }, { "name": "suggestedSearches", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "suggestedSearches[].keyword", "type": "string", "required": true, "description": "It shows the result keyword", "example": "corona testing lab", "enum": [] }, { "name": "suggestedSearches[].identifier", "type": "string", "required": true, "description": "on what basis the results shown", "example": "near", "enum": [] }, { "name": "suggestedSearches[].location", "type": "string", "required": true, "description": "location near the results are shown", "example": "28.612964,77.229463", "enum": [] }, { "name": "suggestedSearches[].hyperlink", "type": "string", "required": true, "description": "direct link of the poi.", "example": "https://atlas.mapmyindia.com/api/places/nearby/json?explain&richData&username=atlasuser&refLocation=28.550592,77.26877&keywords=hsptst", "enum": [] }, { "name": "suggestedSearches[].orderIndex", "type": "integer", "required": true, "description": "This shows the order of the search results priority wise.", "example": 0, "enum": [] }, { "name": "suggestedSearches[].eLoc", "type": "string", "required": true, "description": "It is the Six or eight digit unique code offered only by mapmyindia to search for any address through this eLoc.", "example": "MMI000", "enum": [] }, { "name": "lang", "type": "string", "required": true, "description": "Used to indicate if the response is in some language other than the default(which is en). Valid values are hi, which indicates Hindi response.", "example": "hi", "enum": [] } ], "example": { "suggestedLocations": [ { "type": "POI", "typeX": 7, "placeAddress": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "latitude": "RESTRICTED", "longitude": "RESTRICTED", "eLoc": "2LH9OC", "entryLatitude": "RESTRICTED", "entryLongitude": "RESTRICTED", "placeName": "OYO Hotel", "alternateName": "OyoRooms,OYO 40400 Yippe Rooms,OYO Rooms Hotel", "keywords": [ "FINATM" ], "addressTokens": { "district": "South Delhi", "city": "New Delhi", "state": "Delhi" }, "p": 11663, "orderIndex": 1, "score": 1.5075794782130676, "suggester": "alternateName", "richInfo": "" } ], "userAddedLocation": [ { "eLoc": "2LH9OC", "entryLatitude": "RESTRICTED", "entryLongitude": "RESTRICTED", "latitude": "RESTRICTED", "longitude": "RESTRICTED", "orderIndex": 1, "placeAddress": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "placeName": "OYO Hotel", "resultType": "UAP", "type": "", "userName": "usr1577100139i799918080" } ], "suggestedSearches": [ { "keyword": "corona testing lab", "identifier": "near", "location": "me", "hyperlink": "https://atlas.mapmyindia.com/api/places/nearby/json?explain&richData&username=atlasuser&refLocation=28.550592,77.26877&keywords=hsptst", "orderIndex": 0, "eLoc": "null" } ], "lang": "hi" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://atlas.mapmyindia.com/api/places/search/json?query=mapmyindia' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://atlas.mapmyindia.com/api/places/search/json?query=mapmyindia\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://atlas.mapmyindia.com/api/places/search/json?query=mapmyindia\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://atlas.mapmyindia.com/api/places/search/json?query=mapmyindia\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://atlas.mapmyindia.com/api/places/search/json?query=mapmyindia\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 66, "generationGroup": "core-location-get-api-places-search-json-7661a987fe", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Distance Matrix API - Identity: `api-operation:core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/distanceMatrix.yml", "sourceFingerprint": "bc3f5585c2351e756400d1280beeb69393a98e5b607c26cde62248e2deb6743d", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{rest-key}/{resources}/{profile}/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_eta/driving/28.612964%2C77.229463", "operationId": "dmAPI", "summary": "Distance Matrix API", "description": "This REST API computes the distance and durations in a matrix of routes between a set of source/primary positions (geographical coordinates) and a set of all supplied secondary positions. Please note that maximum number of points are limited to 100 only including source and secondary positions. Live Demo | Download Sample Code", "tags": [ "Distance Matrix APIs" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "rest-key", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Distance Matrix API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources distancematrix to calculate a route & its duration without considering traffic conditions. distancematrixeta to get the updated duration of a route considering live traffic; Applicable for India only “region=ind” and “rtype=1” is not supported. This is different from distancematrixtraffic ; this resource balances between a preferred path and aggressive traffic", "example": "distance_matrix_eta", "enum": [ "distance_matrix", "distance_matrix_eta", "distance_matrix_traffic" ] }, { "name": "profile", "in": "path", "required": true, "type": "string", "description": "The different profiles available within MapmyIndia Distance Matrix API. These profiles have their own individual transport modes and not all are allocated for evalulations be default. For allocating particular profiles on your API credentials, please contact apisupport@mapmyindia.com Table 2. Profiles Element Value Description Profiles driving Meant for 4-wheeler/passenger car routing. biking Meant for two-wheeler routing. Routing with this profile is restricted to distancematrix only. region & rtype request parameters are not supported in two-wheeler routing. walking Meant for pedestrian routing. Routing with this profile is restricted to distancematrix only. region & rtype request paramete", "example": "driving", "enum": [ "driving", "biking", "walking", "trucking" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be considered as origin point (mandatory); and rest of the geopositions will be considered as destination points (mandatory). Example: 77.983936,28.255904;77.05993,28.487555 OR mmi000 . Geoposition separator is a semicolon ; .", "example": "28.612964,77.229463", "enum": [] }, { "name": "sources", "in": "query", "required": false, "type": "string", "description": "To specify which of the coordinates supplied in the URL are to be treated as source position for many to many distance matrix calculation, indicate that coordinate pair's index. E.g. 0;1 means that 0th and 1st coordinate pairs are source points. Default value is 0 . The indexes must be semi-colon separated. e.g: 0;1;2;...", "example": "0;1;2", "enum": [] }, { "name": "rtype", "in": "query", "required": false, "type": "integer", "description": "type of route (integer) required for navigation, where values mean: 0 optimal (default) 1 shortest (it will calculate route by excluding access penalties like private roads, etc.)", "example": 0, "enum": [ 0, 1 ] }, { "name": "destinations", "in": "query", "required": false, "type": "string", "description": "To specify which of the coordinates supplied in the URL are to be treated as destination position for many to many distance matrix calculation, indicate that coordinate pair's index. E.g. 2;3 means that 0th and 1st coordinate pairs are destination points. Default value is all . The indexes must be semi-colon separated. e.g: 3;4;5;...", "example": "3;4;5", "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "This parameter is optional for India; for other countries (such as Sri Lanka, Nepal, Bangladesh, Bhutan + many more) this parameter is mandatory. Possible values are listed in a table here.", "example": "IND", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] }, { "name": "version", "type": "string", "required": true, "description": "API’s version information.", "example": "250.19.5222", "enum": [] }, { "name": "responseCode", "type": "integer", "required": true, "description": "See the service dependent and general status codes", "example": 200, "enum": [] }, { "name": "results", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "results.code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [] }, { "name": "results.distances", "type": "array", "required": true, "description": "array of float distances in metres.", "example": "example", "enum": [] }, { "name": "results.durations", "type": "array", "required": true, "description": "array of float durations in seconds.", "example": "example", "enum": [] } ], "example": { "Server": "ETA-5100", "version": "250.19.5222", "responseCode": 200, "results": { "code": "Ok", "distances": [ [ 14076.1, 30927.6 ] ], "durations": [ [ 1884.9, 2644.1 ] ] } } }, { "status": "204", "description": "DB Connection error.", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "404", "description": "Not found", "fields": [], "example": null }, { "status": "412", "description": "Precondition Failed, i.e. Some existing pre-condition in formulating a valid API request was not fulfilled.", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_eta/driving/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_eta/driving/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_eta/driving/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_eta/driving/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_eta/driving/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 24, "generationGroup": "core-location-get-rest-key-resources-profile-geopositions-4d28552b20", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Distance Matrix Predictive ETA API - Identity: `api-operation:core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api - State model: stateless ```json { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_predictive/driving/28.612964%2C77.229463", "operationId": "dmPAPI", "summary": "Distance Matrix Predictive ETA API", "description": "This API computes the distance and duration of a route between a source/primary position (geographical coordinates) and a list of all supplied secondary positions. Optionally one can input the deptime parameter and get the distance and duration optimized for that part of the day of a week. Time based functionality is available for selected cities only. Please note that maximum number of points are limited to 100 only including source and secondary positions. PREMIUM API", "tags": [ "Distance Matrix Predictive API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "coordinates", "in": "path", "required": true, "type": "string", "description": "Coordinates are pair of comma separated longitude & latitude values. First coordinate will be consider as start point (mandatory); a last coordinate will be considered as end point (mandatory) and those in between are via points (optional). Example: {longitude},{latitude};{longitude},{latitude}[;{longitude},{latitude} ...] (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "dep_time", "in": "query", "required": false, "type": "integer", "description": "the UNIX timestamp of departure in seconds. Distance and ETA will be optimized as per given time.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "check", "type": "string", "required": true, "description": "internal response (for MMI internal purposes only)", "example": 5025, "enum": [] }, { "name": "version", "type": "string", "required": true, "description": "API’s version information.", "example": "250.19.5222", "enum": [] }, { "name": "responseCode", "type": "string", "required": true, "description": "See the service dependent and general status codes", "example": "200", "enum": [] }, { "name": "results", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "results.code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [] }, { "name": "results.distances", "type": "array", "required": true, "description": "array of float distances in metres.", "example": "example", "enum": [] }, { "name": "results.durations", "type": "array", "required": true, "description": "array of float durations in seconds.", "example": "example", "enum": [] } ], "example": { "check": 5025, "version": "250.19.5222", "responseCode": "200", "results": { "code": "Ok", "distances": [ [ 14076.1, 30927.6 ] ], "durations": [ [ 1884.9, 2644.1 ] ] } } }, { "status": "204", "description": "DB Connection error.", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "404", "description": "Not found", "fields": [], "example": null }, { "status": "412", "description": "Precondition Failed, i.e. Some existing pre-condition in formulating a valid API request was not fulfilled.", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_predictive/driving/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_predictive/driving/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_predictive/driving/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_predictive/driving/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/distance_matrix_predictive/driving/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 19, "generationGroup": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-1668dd2d4b", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Elevation API - Identity: `api-operation:core-location-get-rest-key-elevation-elevation-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-elevation-elevation-api - State model: stateless ```json { "slug": "core-location-get-rest-key-elevation-elevation-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/elevation", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/elevation?locations=28.612964%2C77.229463", "operationId": "ElevationAPI", "summary": "Elevation API", "description": "The Elevation API provides elevation data above the sea level for location on Earth’s surface. The Elevation API allows you to retrieve sampled elevation data along a path. This API can be useful for biking, trucking & in other routing applications.", "tags": [ "Elevation API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "locations", "in": "query", "required": true, "type": "string", "description": "The location coordinates are expressed in pairs of (latitude,longitude|latitude,longitude)", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "responseCode", "type": "integer", "required": true, "description": "This shows the response code of the results.", "example": 200, "enum": [] }, { "name": "version", "type": "string", "required": true, "description": "This shows the API version", "example": "211.18", "enum": [] }, { "name": "results", "type": "array", "required": true, "description": "The object contains the results of the Elevation API.", "example": "example", "enum": [] }, { "name": "results[].longitude", "type": "integer", "required": true, "description": "It shows us the longitude of the location serached", "example": "77.229463", "enum": [] }, { "name": "results[].latitude", "type": "integer", "required": true, "description": "It shows us the latitude of the location searched", "example": "28.612964", "enum": [] }, { "name": "results[].elevation", "type": "integer", "required": true, "description": "The elevation of the location", "example": 523, "enum": [] } ], "example": { "responseCode": 200, "version": "211.18", "results": [ { "longitude": 76.998825, "latitude": 9.53835, "elevation": 523 } ] } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/elevation?locations=28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/elevation?locations=28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/elevation?locations=28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/elevation?locations=28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/elevation?locations=28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 15, "generationGroup": "core-location-get-rest-key-elevation-5422d506dc", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Geocode API - Identity: `api-operation:core-location-get-api-places-geocode-geocode-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-geocode-geocode-api - State model: stateless ```json { "slug": "core-location-get-api-places-geocode-geocode-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/api/places/geocode", "baseUrl": "https://atlas.mapmyindia.com", "requestUrl": "https://atlas.mapmyindia.com/api/places/geocode?address=237+Okhla+industrial+estate+phase+3+new+delhi%2C+delhi+110020", "operationId": "AtlasGeocodeAPI", "summary": "Geocode API", "description": "All mapping APIs that are used in mobile or web apps need some geo-position coordinates to refer to any given point on the map. Our Geocoding API converts real addresses into these geographic reference positions to be placed on a map, be it for any street, area, postal code, POI or a house number etc. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo | Download Sample Code", "tags": [ "Geocode API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "region", "in": "query", "required": false, "type": "string", "description": "'It takes in the country code. Possible values are listed in a table here. Default is India (IND).'", "example": "ind", "enum": [] }, { "name": "address", "in": "query", "required": true, "type": "string", "description": "address to be geocoded", "example": "237 Okhla industrial estate phase 3 new delhi, delhi 110020", "enum": [] }, { "name": "itemCount", "in": "query", "required": false, "type": "integer", "description": "parameter can be set to get maximum number of result items from the API (default: 1).", "example": 1, "enum": [] }, { "name": "bias", "in": "query", "required": false, "type": "integer", "description": "This parameter can be used to set Urban or Rural bias. A positive value sets the Urban bias and a negative value sets Rural bias. This optional parameter & its related effect on response is not applicable for regions apart from India (IND). Allowed values are: 0 : Default: (No bias) -1 : Rural 1 : Urban", "example": 0, "enum": [] }, { "name": "podFilter", "in": "query", "required": false, "type": "string", "description": "This parameter can be used to set admin level restriction. The result will be either the given admin level or equivalent admin or higher in the hierarchy. No lower admin will be considered for geocoding.This optional parameter & its related effect on response is not applicable for regions apart from India (IND). Allowed values are: hno : house number hna : house name poi : point of interest street : street sslc : sub sub locality village : village slc : sub locality sdist : sub district loc : locality city : city dist : district pincode :pincode state : state", "example": "example", "enum": [] }, { "name": "bound", "in": "query", "required": false, "type": "string", "description": "This parameter can be used to set admin boundary, which means geocoding will be done within the given admin. The allowed admin bounds are Sub-District, District, City, State and Pincode. The parameter accepts the admin eLoc as value. This optional parameter & its related effect on response is not applicable for regions apart from India (IND). Note: Please note that podFilter & bound parameters are mutually exclusive. They cannot be used together in an API call.", "example": "TAVI5S", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "copResults", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "copResults.houseNumber", "type": "string", "required": false, "description": "House Number of the POI.", "example": "237", "enum": [] }, { "name": "copResults.houseName", "type": "string", "required": false, "description": "House Name of the POI.", "example": "MMI Building", "enum": [] }, { "name": "copResults.poi", "type": "string", "required": false, "description": "Name of the POI.", "example": "MapmyIndia Head Office", "enum": [] }, { "name": "copResults.street", "type": "string", "required": false, "description": "Name of the street.", "example": "", "enum": [] }, { "name": "copResults.subSubLocality", "type": "string", "required": false, "description": "Name of the subsublocality.", "example": "", "enum": [] }, { "name": "copResults.subLocality", "type": "string", "required": false, "description": "Name of the sublocality.", "example": "", "enum": [] }, { "name": "copResults.locality", "type": "string", "required": false, "description": "Name of the locality.", "example": "Okhla industrial phase 3", "enum": [] }, { "name": "copResults.village", "type": "string", "required": false, "description": "Name of the village.", "example": "Okhla Vilage", "enum": [] }, { "name": "copResults.subDistrict", "type": "string", "required": false, "description": "Name of the subDistrict.", "example": "", "enum": [] }, { "name": "copResults.district", "type": "string", "required": true, "description": "Name of the District.", "example": "South Delhi", "enum": [] }, { "name": "copResults.city", "type": "string", "required": true, "description": "Name of the city.", "example": "New Delhi", "enum": [] }, { "name": "copResults.state", "type": "string", "required": true, "description": "Name of the State.", "example": "1700000000000", "enum": [] }, { "name": "copResults.pincode", "type": "integer", "required": false, "description": "Pincode of the location.", "example": "110010", "enum": [] }, { "name": "copResults.formattedAddress", "type": "string", "required": true, "description": "This shows the formatted address of the POI.", "example": "237, MMI Building, MapmyIndia Head Office, Okhla industrial phase 3, Okhla Vilage, South Delhi, New Delhi, Delhi, 110010", "enum": [] }, { "name": "copResults.eLoc", "type": "string", "required": true, "description": "It is the Six or eight digit unique code offered only by mapmyindia to search for any address through this eLoc.", "example": "MMI000", "enum": [] }, { "name": "copResults.latitude", "type": "integer", "required": true, "description": "It shows us the latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "copResults.longitude", "type": "integer", "required": true, "description": "It shows us the longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "copResults.geocodeLevel", "type": "string", "required": true, "description": "This shows the level of the geocode means on which basis the poi has been geocoded.", "example": "houseNumber", "enum": [] }, { "name": "copResults.confidenceScore", "type": "integer", "required": true, "description": "The confidence for current of geocodelevel.", "example": 0.4, "enum": [] } ], "example": { "copResults": { "district": "South Delhi", "city": "New Delhi", "state": "Delhi", "formattedAddress": "237, MMI Building, MapmyIndia Head Office, Okhla industrial phase 3, Okhla Vilage, South Delhi, New Delhi, Delhi, 110010", "eLoc": "2LH9OC", "latitude": "RESTRICTED", "longitude": "RESTRICTED", "geocodeLevel": "houseNumber", "confidenceScore": 0.4 } } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://atlas.mapmyindia.com/api/places/geocode?address=237+Okhla+industrial+estate+phase+3+new+delhi%2C+delhi+110020' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://atlas.mapmyindia.com/api/places/geocode?address=237+Okhla+industrial+estate+phase+3+new+delhi%2C+delhi+110020\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://atlas.mapmyindia.com/api/places/geocode?address=237+Okhla+industrial+estate+phase+3+new+delhi%2C+delhi+110020\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://atlas.mapmyindia.com/api/places/geocode?address=237+Okhla+industrial+estate+phase+3+new+delhi%2C+delhi+110020\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://atlas.mapmyindia.com/api/places/geocode?address=237+Okhla+industrial+estate+phase+3+new+delhi%2C+delhi+110020\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 33, "generationGroup": "core-location-get-api-places-geocode-a66a6b471a", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Nearby API - Identity: `api-operation:core-location-get-api-places-nearby-json-nearby-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-nearby-json-nearby-api - State model: stateless ```json { "slug": "core-location-get-api-places-nearby-json-nearby-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/api/places/nearby/json", "baseUrl": "https://atlas.mapmyindia.com", "requestUrl": "https://atlas.mapmyindia.com/api/places/nearby/json?keywords=FODCOF&refLocation=28.612964%2C77.229463", "operationId": "AtlasNearbyAPI", "summary": "Nearby API", "description": "Nearby Places API, enables you to add discovery and search of nearby POIs by searching for a generic keyword used to describe a category of places or via the unique code assigned to that category. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo | Download Sample Code", "tags": [ "Nearby API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "keywords", "in": "query", "required": true, "type": "string", "description": "Enter the query on which the search has to be done. Operators in Keywords parameter To send multiple keywords in a request, we’ve defined a couple of operators that can help the developers wrap their applications around this functionality. Below are the operators: The “ ; ” Operator: This operator is an “or” operator. Defining multiple keywords separated with a “ ; ” would provide results that satisfies either of the keywords. The “ $ ” Operator: This operator is a “and” operator. Defining multiple keywords separated with a “ $ ” would provide results that satisfy all the provided keywords. (default). To use these operators, simple just send in the keywords parameter like below: &keywords=co", "example": "FODCOF", "enum": [] }, { "name": "refLocation", "in": "query", "required": true, "type": "string", "description": "Provides the location around which the search will be performed. e.g. refLocation=28.454,77.435. The refLocation parameter can also accept eLoc as reference location. This configuration is not active by default. Please contact MapmyIndia API support for further details. Example: refLocation=17ZUL7", "example": "28.612964,77.229463", "enum": [] }, { "name": "page", "in": "query", "required": false, "type": "integer", "description": "provides number of the page to provide results from.", "example": 1, "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "it takes in the country code. LKA, IND, BTN, BGD, NPL for Sri-Lanka, India, Bhutan, Bangladesh, Nepal respectively. Default is India (IND)", "example": "IND", "enum": [] }, { "name": "radius", "in": "query", "required": false, "type": "integer", "description": "Provides the range of distance to search over (default 1000, min, 500, max, 10000)", "example": 10000, "enum": [] }, { "name": "bounds", "in": "query", "required": false, "type": "string", "description": "(x1,y1;x2,y2) Allows the developer to send in map bounds to provide a nearby search of the geobounds. where x1,y1 are the lat lng of the bound. The bounds are set from topLeft to bottomRight (North-West to South-East).", "example": "28.639256,77.211133;28.625214,77.237483", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "It uses key:value pair(s) to fine tune discovery of places by filtering the results. e.g. categoryCode:FODCOF valid IDs for key value pairs are: categoryCode: can take in category codes as input", "example": "categoryCode:FODCOF", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Provides configured sorting operations for the client on cloud. Below are the available sorts: dist:asc & dist:desc - will sort data in order of distance from the passed location (default). name:asc & name:desc - will sort the data on alphabetically bases. imp - will sort data in order of decreasing prominence of the place.", "example": "dist:asc", "enum": [] }, { "name": "searchBy", "in": "query", "required": false, "type": "string", "description": "provides configurable search operations for the client on cloud. Below are the available sorts: dist(default) - will sort data in order of distance from the passed location (default). imp - will search data in order of prominence of the place.", "example": "dist", "enum": [] }, { "name": "pod", "in": "query", "required": false, "type": "string", "description": "It takes in the place type code which helps in restricting the results to certain chosen type. Access to this parameter is controlled from the backend. This parameter, if provided will override any values provided in keywords request param. Below mentioned are the available values for pod: SLC - Sublocality LC - Locality CITY - City STATE - State", "example": "LC", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "suggestedLocations", "type": "array", "required": true, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "suggestedLocations[].addressTokens", "type": "object", "required": true, "description": "", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "suggestedLocations[].addressTokens.houseNumber", "type": "string", "required": false, "description": "House Number of the POI.", "example": "237", "enum": [] }, { "name": "suggestedLocations[].addressTokens.houseName", "type": "string", "required": false, "description": "House Name of the POI.", "example": "MMI Building", "enum": [] }, { "name": "suggestedLocations[].addressTokens.poi", "type": "string", "required": false, "description": "Name of the POI.", "example": "MapmyIndia Head Office", "enum": [] }, { "name": "suggestedLocations[].addressTokens.street", "type": "string", "required": false, "description": "Name of the street.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.subSubLocality", "type": "string", "required": false, "description": "Name of the subsublocality.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.subLocality", "type": "string", "required": false, "description": "Name of the sublocality.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.locality", "type": "string", "required": false, "description": "Name of the locality.", "example": "Okhla industrial phase 3", "enum": [] }, { "name": "suggestedLocations[].addressTokens.village", "type": "string", "required": false, "description": "Name of the village.", "example": "Okhla Vilage", "enum": [] }, { "name": "suggestedLocations[].addressTokens.subDistrict", "type": "string", "required": false, "description": "Name of the subDistrict.", "example": "", "enum": [] }, { "name": "suggestedLocations[].addressTokens.district", "type": "string", "required": true, "description": "Name of the District.", "example": "South Delhi", "enum": [] }, { "name": "suggestedLocations[].addressTokens.city", "type": "string", "required": true, "description": "Name of the city.", "example": "New Delhi", "enum": [] }, { "name": "suggestedLocations[].addressTokens.state", "type": "string", "required": true, "description": "Name of the STATE.", "example": "1700000000000", "enum": [] }, { "name": "suggestedLocations[].addressTokens.pincode", "type": "integer", "required": false, "description": "PINcode of the location.", "example": "110010", "enum": [] }, { "name": "suggestedLocations[].distance", "type": "string", "required": true, "description": "provides the distance from the provided location bias in meters", "example": 64, "enum": [] }, { "name": "suggestedLocations[].eloc", "type": "string", "required": true, "description": "Place Id of the location 6-char alphanumeric", "example": "MMI000", "enum": [] }, { "name": "suggestedLocations[].email", "type": "string", "required": true, "description": "Email for contact", "example": "xyz@email.com", "enum": [] }, { "name": "suggestedLocations[].entryLatitude", "type": "number", "required": true, "description": "latitude of the entrance of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedLocations[].entryLongitude", "type": "number", "required": true, "description": "longitude of the entrance of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedLocations[].hourOfOperation", "type": "string", "required": true, "description": "The hours of operation of the POI in a day.", "example": "poi", "enum": [] }, { "name": "suggestedLocations[].keywords", "type": "array", "required": true, "description": "The keywords/category codes associated with the given result.", "example": "example", "enum": [] }, { "name": "suggestedLocations[].landlineNo", "type": "number", "required": true, "description": "phone no for contact", "example": 911133107634, "enum": [] }, { "name": "suggestedLocations[].latitude", "type": "number", "required": true, "description": "Latitude of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedLocations[].longitude", "type": "number", "required": true, "description": "longitude of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedLocations[].mobileNo", "type": "number", "required": true, "description": "Phone number for contact", "example": 919999827144, "enum": [] }, { "name": "suggestedLocations[].orderIndex", "type": "integer", "required": true, "description": "the order where this result should be placed", "example": 1, "enum": [] }, { "name": "suggestedLocations[].placeAddress", "type": "string", "required": true, "description": "Address of the location", "example": "G-72, 1st Floor, Outer Circle, Connaught Place, New Delhi, Delhi, 110001", "enum": [] }, { "name": "suggestedLocations[].placeName", "type": "string", "required": true, "description": "Name of the location", "example": "Lord of The Drinks", "enum": [] }, { "name": "suggestedLocations[].type", "type": "string", "required": true, "description": "Type of location POI or Country or City", "example": "poi", "enum": [] }, { "name": "pageInfo", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "pageInfo.pageCount", "type": "integer", "required": true, "description": "The number of pages with results.", "example": 1, "enum": [] }, { "name": "pageInfo.totalHits", "type": "integer", "required": true, "description": "Total number of places in the results.", "example": 2730, "enum": [] }, { "name": "pageInfo.totalPages", "type": "integer", "required": true, "description": "Total number of pages as per page size and no of results.", "example": 2730, "enum": [] }, { "name": "pageInfo.pageSize", "type": "integer", "required": true, "description": "The number of results per page.", "example": 2730, "enum": [] } ], "example": { "suggestedLocations": [ { "addressTokens": { "district": "South Delhi", "city": "New Delhi", "state": "Delhi" }, "distance": 64, "eloc": "CHZZ3S", "email": "xyz@email.com", "entryLatitude": "RESTRICTED", "entryLongitude": "RESTRICTED", "hourOfOperation": "poi", "keywords": [ "FINATM" ], "landlineNo": 911133107634, "latitude": "RESTRICTED", "longitude": "RESTRICTED", "mobileNo": 919999827144, "orderIndex": 1, "placeAddress": "G-72, 1st Floor, Outer Circle, Connaught Place, New Delhi, Delhi, 110001", "placeName": "Lord of The Drinks", "type": "poi" } ], "pageInfo": { "pageCount": 1, "totalHits": 2730, "totalPages": 2730, "pageSize": 2730 } } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://atlas.mapmyindia.com/api/places/nearby/json?keywords=FODCOF&refLocation=28.612964%2C77.229463' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://atlas.mapmyindia.com/api/places/nearby/json?keywords=FODCOF&refLocation=28.612964%2C77.229463\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://atlas.mapmyindia.com/api/places/nearby/json?keywords=FODCOF&refLocation=28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://atlas.mapmyindia.com/api/places/nearby/json?keywords=FODCOF&refLocation=28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://atlas.mapmyindia.com/api/places/nearby/json?keywords=FODCOF&refLocation=28.612964%2C77.229463\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 52, "generationGroup": "core-location-get-api-places-nearby-json-7daf645e41", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · POI Along the Route API - Identity: `api-operation:core-location-post-api-places-along-route-poi-along-the-route-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api - State model: stateless ```json { "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/alongRoute.yml", "sourceFingerprint": "e4b96b425a6607716c1739b3d7d3e384c3dbab7b354267da45f82e73f00910c9", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/api/places/along_route", "baseUrl": "https://atlas.mapmyindia.com", "requestUrl": "https://atlas.mapmyindia.com/api/places/along_route", "operationId": "AtlasPOIAlongtheRouteAPI", "summary": "POI Along the Route API", "description": "With POI Along the Route API user will be able to get the details of POIs of a particular category along his set route. The main focus of this API is to provide convenience to the user and help him in locating the place of his interest on his set route. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here", "tags": [ "POI Along the Route API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/x-www-form-urlencoded" ], "fields": [ { "name": "path", "type": "string", "required": true, "description": "This parameter takes the encoded route along which POIs to be searched.", "example": "mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\GNGb@W\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[", "enum": [] }, { "name": "category", "type": "string", "required": true, "description": "The POI category code to be searched. Only one category input supported.", "example": "FODCOF", "enum": [] }, { "name": "geometries", "type": "string", "required": false, "description": "Type of geometry encoding, accepted values are polyline5 , polyline6 , and base64 . Default value is polyline5.", "example": "polyline5", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer of the road. Minimum value is 25, maximum is 1000 and default is 25.", "example": 50, "enum": [] }, { "name": "sort", "type": "boolean", "required": false, "description": "Gets the sorted POIs along route. Valueless parameter.", "example": "true", "enum": [] }, { "name": "page", "type": "integer", "required": false, "description": "Used for pagination. By default, a request returns maximum 10 results and to get the next 10 or so on pass the page value accordingly. Default is 1.", "example": 1, "enum": [] } ], "example": { "path": "mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\GNGb@W\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[", "category": "FODCOF" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "suggestedPOIs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "suggestedPOIs[].distance", "type": "integer", "required": true, "description": "distance of the POI.", "example": 1065, "enum": [] }, { "name": "suggestedPOIs[].place_id", "type": "string", "required": true, "description": "eLoc of the POI", "example": "MMI000", "enum": [] }, { "name": "suggestedPOIs[].poi", "type": "string", "required": true, "description": "Name of the POI.", "example": "Cafe Nescafe", "enum": [] }, { "name": "suggestedPOIs[].subSubLocality", "type": "string", "required": true, "description": "Subsublocality of the POI", "example": "example", "enum": [] }, { "name": "suggestedPOIs[].subLocality", "type": "string", "required": true, "description": "Sublocality of the POI", "example": "example", "enum": [] }, { "name": "suggestedPOIs[].locality", "type": "string", "required": true, "description": "Locality of the POI", "example": "Pragati Maidan", "enum": [] }, { "name": "suggestedPOIs[].city", "type": "string", "required": true, "description": "City of the POI", "example": "New Delhi", "enum": [] }, { "name": "suggestedPOIs[].subDistrict", "type": "string", "required": true, "description": "Sub district of the POI", "example": "Connaught Place", "enum": [] }, { "name": "suggestedPOIs[].district", "type": "string", "required": true, "description": "District of the POI", "example": "New Delhi District", "enum": [] }, { "name": "suggestedPOIs[].state", "type": "string", "required": true, "description": "State of the POI", "example": "1700000000000", "enum": [] }, { "name": "suggestedPOIs[].poplrName", "type": "string", "required": true, "description": "Popular name of the POI", "example": "Oberoi Hotel New Delhi", "enum": [] }, { "name": "suggestedPOIs[].address", "type": "string", "required": true, "description": "Address of the POI", "example": "Khan Market, New Delhi, Delhi, 110003", "enum": [] }, { "name": "suggestedPOIs[].tel", "type": "string", "required": true, "description": "Telephone number of the POI", "example": "+911122205205", "enum": [] }, { "name": "suggestedPOIs[].email", "type": "string", "required": true, "description": "Email of the POI", "example": "reservations@oberoigroup.com", "enum": [] }, { "name": "suggestedPOIs[].website", "type": "string", "required": true, "description": "Website of the POI", "example": "www.nescafe.com", "enum": [] }, { "name": "suggestedPOIs[].longitude", "type": "number", "required": true, "description": "Longitude of the POI. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedPOIs[].latitude", "type": "number", "required": true, "description": "Latitude of the POI. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedPOIs[].e_lng", "type": "number", "required": true, "description": "Entry longitude of the POI. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "RESTRICTED", "enum": [] }, { "name": "suggestedPOIs[].e_lat", "type": "number", "required": true, "description": "Entry latitude of the POI. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "RESTRICTED", "enum": [] }, { "name": "suggestedPOIs[].brand_code", "type": "string", "required": true, "description": "Brand id of the POI", "example": "0", "enum": [] } ], "example": { "suggestedPOIs": [ { "distance": 1065, "place_id": "74835C", "poi": "Cafe Nescafe", "subSubLocality": "example", "subLocality": "example", "locality": "Pragati Maidan", "city": "New Delhi", "subDistrict": "Connaught Place", "district": "New Delhi District", "state": "Delhi", "poplrName": "Oberoi Hotel New Delhi", "address": "Khan Market, New Delhi, Delhi, 110003", "tel": "+911122205205", "email": "reservations@oberoigroup.com", "website": "www.nescafe.com", "longitude": "RESTRICTED", "latitude": "RESTRICTED", "e_lng": "RESTRICTED", "e_lat": "RESTRICTED", "brand_code": "0" } ] } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://atlas.mapmyindia.com/api/places/along_route' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"path\": \"mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\\\GNGb@W\\\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[\",\n \"category\": \"FODCOF\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://atlas.mapmyindia.com/api/places/along_route\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"path\": \"mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\\\GNGb@W\\\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[\",\n \"category\": \"FODCOF\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://atlas.mapmyindia.com/api/places/along_route\",\n headers=headers,\n json={\n \"path\": \"mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\\\GNGb@W\\\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[\",\n \"category\": \"FODCOF\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://atlas.mapmyindia.com/api/places/along_route\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"path\": \"mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\\\GNGb@W\\\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[\",\n \"category\": \"FODCOF\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://atlas.mapmyindia.com/api/places/along_route\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"path\": \"mfvmDcalvMB?B?@EB}@lABzABrBDAaAFoDFuCFuC@{@@m@DoAFu@D_@VmAFWHSHKBCFCbA]n@S`@IX?^BdAL|ANtCV~ANXBfBDfBBl@Bp@BrA@Pa@FKHMf@@`CHXDLBJFHJHRbD@`D@Z?h@@f@@h@@bAB^@jDDlBB~@BT@N?dDDV?x@Bt@@dCFdCFzB@nD?N?|BEzBEzBE`@AJ?lCOxCMfAClCGnCIlCIlCIhDKfDIhDIzCK|AG|AEbBG`A@d@FVD^FjARlBVn@D`AD|@Fn@DnCZnCZtBTH@J?V@`A@lC@nC@lCB`AGNCTCPEl@SRI|@a@~BqAb@OZGt@E|BEl@AxA?|@?pA@T?V@bCB`AJNBn@L^NpAl@t@`@d@V~BlA`CnA~BnA`A`@VJd@NXF~@JN@xBBL?hA?x@Ar@?x@A@?vCAvCAvCAxCAj@F`@Fd@Nf@RrAn@|@b@dBz@fBz@nBfAJF~Ax@`CfAXLRHp@XtCpAtCrAf@V|@Rf@Px@TxAZ\\\\F`BL`BLZEPERGNKPQR_@BaBPeEHeAXo@NcDLaDNaDNaDAkB?kAKqDIoD_@mAI{BI{BGgBIgBGiBCm@ASAi@Cu@Cc@Ag@Aa@GgBGgBGkBAu@IeCAUJARARA~@GB?f@C|AK`BIbBIt@IPCPCZO`@[FKLOR]Vk@Pi@DUL{@D[P}CP{C@i@@a@Ae@EiBCiBAyC?_ACaB?QAeBAgB?WB_@BSDSDOTu@dA{Cr@sBRi@JU^q@j@cATYZ_@TUbBsAHIhA}@jA_AlAaA`Ay@bAy@d@c@pAgAv@q@`AcA^_@tAoAVSVQLGdAg@f@Yz@e@W_@KSWIoAuCmAwCLMBCDCNE@AJ?H@F@v@fB\\\\GNGb@W\\\\YfAcALI@C@CBADCD@JBDBBBBD@D?DDLBFJNFDHDF@J@|CKbCItAEHCHA@EBEDCDABAF?D@DB@BDH@D?JADL@l@?j@BbAGGcAGiACc@Cm@C[\",\n \"category\": \"FODCOF\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 34, "generationGroup": "core-location-post-api-places-along-route-a353418e56", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Place Detail API - Identity: `api-operation:core-location-get-apis-o2o-entity-eloc-place-detail-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api - State model: stateless ```json { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "baseUrl": "https://explore.mapmyindia.com", "requestUrl": "https://explore.mapmyindia.com/apis/O2O/entity/MMI000", "operationId": "placeDetail", "summary": "Place Detail API", "description": "MapmyIndia eloc is a simple, standardized and precise pan-India digital address system. Every location has been assigned a unique digital address or an eLoc. Place Detail API can be used to extract the details of a place with the help of its eLoc i.e. a 6 digit code or a placeid. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "tags": [ "Place Detail API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "eLoc", "in": "path", "required": true, "type": "string", "description": "Six or Eight Digit unique code.", "example": "MMI000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "This API is highly configurable API that enables to provision the required set of attributes to the user on the basis of their required use case. The default configuration with available with basic pay-as-you-go rates is that of General Details subtemplate.", "fields": [], "example": { "eloc": "3F45CB", "name": "The Lalit New Delhi", "address": "15, Barakhamba Avenue, Connaught Place, New Delhi, Delhi, 110001" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://explore.mapmyindia.com/apis/O2O/entity/MMI000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://explore.mapmyindia.com/apis/O2O/entity/MMI000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://explore.mapmyindia.com/apis/O2O/entity/MMI000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://explore.mapmyindia.com/apis/O2O/entity/MMI000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://explore.mapmyindia.com/apis/O2O/entity/MMI000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 8, "generationGroup": "core-location-get-apis-o2o-entity-eloc-a77f98ec42", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Reverse Geocode API - Identity: `api-operation:core-location-get-rest-key-rev-geocode-reverse-geocode-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api - State model: stateless ```json { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/rev_geocode?lat=28.612964&lng=77.229463", "operationId": "ReverseGeocodeAPI", "summary": "Reverse Geocode API", "description": "Reverse Geocoding is a process to give the closest matching address to a provided geographical coordinates (latitude/longitude). MapmyIndia reverse geocoding API provides real addresses along with nearest popular landmark for any such geo-positions on the map. This API also works in Hindi language response. Live Demo | Download Sample Code", "tags": [ "Reverse Geocode API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "lat", "in": "query", "required": true, "type": "number", "description": "The latitude of the location", "example": "28.612964", "enum": [] }, { "name": "lng", "in": "query", "required": true, "type": "number", "description": "The longitude of the location", "example": "77.229463", "enum": [] }, { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The rest key allocated to your account.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "It takes in the country code. Possible values are listed in a table here. Default is India (IND).", "example": "IND", "enum": [] }, { "name": "lang", "in": "query", "required": false, "type": "string", "description": "This parameter accepts the \"hi\" (ISO 639-1 Language Code for Hindi) as a value. This optional parameter & its related effect on response is not applicable for regions apart from India (IND).", "example": "hi", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "responseCode", "type": "integer", "required": true, "description": "This shows the response code of the results.", "example": 200, "enum": [] }, { "name": "version", "type": "string", "required": true, "description": "This shows the API version", "example": "211.19", "enum": [] }, { "name": "results", "type": "array", "required": true, "description": "The object contains the results of the reverse geocode API.", "example": "example", "enum": [] }, { "name": "results[].houseNumber", "type": "string", "required": false, "description": "House Number of the POI.", "example": "237", "enum": [] }, { "name": "results[].houseName", "type": "string", "required": false, "description": "House Name of the POI.", "example": "MMI Building", "enum": [] }, { "name": "results[].poi", "type": "string", "required": false, "description": "Name of the POI.", "example": "MapmyIndia Head Office", "enum": [] }, { "name": "results[].poi_dist", "type": "string", "required": false, "description": "The value of the poi district", "example": "8", "enum": [] }, { "name": "results[].street", "type": "string", "required": false, "description": "Name of the street.", "example": "Unnamed Road", "enum": [] }, { "name": "results[].street_dist", "type": "string", "required": false, "description": "The value of the street district.", "example": "14", "enum": [] }, { "name": "results[].subSubLocality", "type": "string", "required": false, "description": "Name of the subsublocality.", "example": "", "enum": [] }, { "name": "results[].subLocality", "type": "string", "required": false, "description": "Name of the sublocality.", "example": "", "enum": [] }, { "name": "results[].locality", "type": "string", "required": false, "description": "Name of the locality.", "example": "Okhla industrial phase 3", "enum": [] }, { "name": "results[].village", "type": "string", "required": false, "description": "Name of the village.", "example": "Okhla Vilage", "enum": [] }, { "name": "results[].subDistrict", "type": "string", "required": false, "description": "Name of the subDistrict.", "example": "", "enum": [] }, { "name": "results[].city", "type": "string", "required": true, "description": "Name of the city.", "example": "New Delhi", "enum": [] }, { "name": "results[].state", "type": "string", "required": true, "description": "Name of the state.", "example": "1700000000000", "enum": [] }, { "name": "results[].pincode", "type": "integer", "required": false, "description": "Pincode of the location.", "example": "110010", "enum": [] }, { "name": "results[].lat", "type": "string", "required": true, "description": "It shows us the latitude of the location searched.", "example": "28.612964", "enum": [] }, { "name": "results[].lng", "type": "string", "required": true, "description": "It shows us the longitude of the location searched.", "example": "77.229463", "enum": [] }, { "name": "results[].area", "type": "string", "required": false, "description": "It shows the area on which the result has been found. for eg: India, Bangladesh, etc.", "example": "India", "enum": [] }, { "name": "results[].formatted_address", "type": "string", "required": true, "description": "This shows the formatted address of the POI.", "example": "237, MMI Building, MapmyIndia Head Office, Okhla industrial phase 3, Okhla Vilage, South Delhi, New Delhi, Delhi, 110010", "enum": [] } ], "example": { "responseCode": 200, "version": "211.19", "results": [ { "city": "New Delhi", "state": "Delhi", "lat": "28.426335", "lng": "77.092001", "formatted_address": "237, MMI Building, MapmyIndia Head Office, Okhla industrial phase 3, Okhla Vilage, South Delhi, New Delhi, Delhi, 110010" } ] } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/rev_geocode?lat=28.612964&lng=77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/rev_geocode?lat=28.612964&lng=77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/rev_geocode?lat=28.612964&lng=77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/rev_geocode?lat=28.612964&lng=77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/rev_geocode?lat=28.612964&lng=77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 33, "generationGroup": "core-location-get-rest-key-rev-geocode-463e80bf6b", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Route Optimization API - Identity: `api-operation:core-location-get-rest-key-resources-profile-geopositions-route-optimization-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routeOpt.yml", "sourceFingerprint": "af458e128aba8f5264d3747175f1b5cfdf6929686fb4e12872d20d69b8fa7ac9", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{rest_key}/{resources}/{profile}/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/trip_optimization_eta/driving/28.612964%2C77.229463", "operationId": "routeOptAPI", "summary": "Route Optimization API", "description": "Route Optimization is the process of determining the most cost-efficient route. It needs to include all relevant factors such as the number and location of all the required stops on the route. In other words, this API will solve the Traveling Salesman Problem of routing and the returned path does not have to be the fastest path. As TSP is NP-hard it only returns an approximation. Currently, not all combinations of roundtrip, source and destination are supported. Right now, the following combinations are possible: | roundtrip | source | destination | supported | | --- | --- | --- | --- | | true | first | last | yes | | true | first | any | yes | | true | any | last | yes | | true | any | any | yes | | false | first | last | yes | Live Demo | PREMIUM API", "tags": [ "Route Optimization API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "rest_key", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Routing API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources tripoptimization to calculate a route & its duration without considering traffic conditions. tripoptimizationeta to get the updated duration of a route considering live traffic; Applicable for India only “region=ind” and “rtype=1” is not supported. This is different from tripoptimizationtraffic ; this resource balances between a preferred path and aggressive traffic c", "example": "trip_optimization_eta", "enum": [ "trip_optimization", "trip_optimization_eta", "trip_optimization_traffic" ] }, { "name": "profile", "in": "path", "required": true, "type": "string", "description": "The different profiles available within MapmyIndia Routing API. These profiles have their own individual transport modes and not all are allocated for evalulations be default. For allocating particular profiles on your API credentials, please contact apisupport@mapmyindia.com Table 2. Profiles Element Value Description Profiles driving Meant for 4-wheeler/passenger car routing. biking Meant for two-wheeler routing. Routing with this profile is restricted to tripoptimization only. region & rtype request parameters are not supported in two-wheeler routing. walking Meant for pedestrian routing. Routing with this profile is restricted to tripoptimization only. region & rtype request parameters a", "example": "driving", "enum": [ "driving", "biking", "walking", "trucking" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be consider as start point (mandatory); a last geoposition will be considered as end point (mandatory) and those in between are via points (optional). {longitude1},{latitude1};{longitude2},{latitude2};eLoc1;eLoc2; ... (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometries", "in": "query", "required": false, "type": "string", "description": "This parameter used to change the route geometry format/density (influences overview and per step).", "example": "polyline", "enum": [ "polyline", "polyline6", "geojson" ] }, { "name": "source", "in": "query", "required": false, "type": "string", "description": "Use location with given index as source.", "example": "any", "enum": [ "first", "last", "any" ] }, { "name": "destination", "in": "query", "required": false, "type": "string", "description": "Use location with given index as destination.", "example": "any", "enum": [ "first", "last", "any" ] }, { "name": "steps", "in": "query", "required": false, "type": "boolean", "description": "Return route steps for each route leg. Possible values are true/false. By default it will be used as false.", "example": true, "enum": [ true, false ] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "This parameter is optional for India; for other countries (such as Sri Lanka, Nepal, Bangladesh, Bhutan + many more) this parameter is mandatory. Possible values are listed in a table here.", "example": "IND", "enum": [] }, { "name": "roundtrip", "in": "query", "required": false, "type": "boolean", "description": "Returned route is a roundtrip (route returns to first location).", "example": true, "enum": [ true, false ] }, { "name": "overview", "in": "query", "required": false, "type": "string", "description": "Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all. Possible values are simplified (default), full , false . (Part of premium offering)", "example": "simplified", "enum": [ "simplified", "full", false ] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "trips", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "trips[].legs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "trips[].legs[].steps", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "trips[].legs[].steps[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "trips[].legs[].steps[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "trips[].legs[].steps[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "trips[].legs[].steps[].geometry", "type": "number", "required": true, "description": "The un-simplified geometry of the step segment, depends on the given geometries request parameter. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "trips[].legs[].steps[].intersections", "type": "array", "required": true, "description": "A list of Intersection objects(1) that are passed along the segment, the very first belonging to the StepManeuver(2). Note: An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (intersections[0]) corresponds to the location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction. An object type representing maneuver.", "example": "example", "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the location of the intersection.", "example": "28.612964,77.229463", "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].classes", "type": "array", "required": true, "description": "Categorised types of road segments e.g. Motorway", "example": [ "motorway" ], "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].bearings", "type": "array", "required": true, "description": "A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.", "example": [ 60, 210, 240 ], "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].entry", "type": "array", "required": true, "description": "A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true indicates that the respective road could be entered on a valid route. false indicates that the turn onto the respective road would violate a restriction.", "example": [ false, true, true ], "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].in", "type": "integer", "required": true, "description": "index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for depart maneuvers.", "example": 0, "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].out", "type": "integer", "required": true, "description": "index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for arrive maneuvers.", "example": 2, "enum": [] }, { "name": "trips[].legs[].steps[].intersections[].lanes", "type": "array", "required": true, "description": "Array of Lane objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the lanes property will not be present.", "example": "example", "enum": [] }, { "name": "trips[].legs[].steps[].driving_side", "type": "number", "required": true, "description": "“Left” (default) for India, Sri Lanka, Nepal, Bangladesh & Bhutan.", "example": "left", "enum": [] }, { "name": "trips[].legs[].steps[].name", "type": "string", "required": true, "description": "The name of the way along which travel proceeds.", "example": "Safdar Hashmi Marg", "enum": [] }, { "name": "trips[].legs[].steps[].mode", "type": "string", "required": true, "description": "signifies the mode of transportation; driving as default.", "example": "driving", "enum": [] }, { "name": "trips[].legs[].steps[].maneuver", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "trips[].legs[].steps[].maneuver.location", "type": "array", "required": true, "description": "A [longitude, latitude] pair describing the location of the turn.", "example": "28.612964,77.229463", "enum": [] }, { "name": "trips[].legs[].steps[].maneuver.bearing_before", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately before the maneuver.", "example": 357, "enum": [] }, { "name": "trips[].legs[].steps[].maneuver.bearing_after", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately after the maneuver.", "example": 254, "enum": [] }, { "name": "trips[].legs[].steps[].maneuver.modifier", "type": "string", "required": true, "description": "An optional string indicating the direction change of the maneuver. To see the complete list of modifiers, please see article in wiki.", "example": "left", "enum": [] }, { "name": "trips[].legs[].steps[].maneuver.type", "type": "string", "required": true, "description": "A string indicating the type of maneuver. New identifiers might be introduced without API change. Types unknown to the client should be handled like the ‘turn’ type, the existence of correct modifier values is guaranteed. To see the complete list of types, please see article in wiki.", "example": "turn", "enum": [] }, { "name": "trips[].legs[].summary", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "Patel Road, Bhagwan Mahavir Marg", "enum": [] }, { "name": "trips[].legs[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "trips[].legs[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "trips[].legs[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "trips[].weight_name", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "routability", "enum": [] }, { "name": "trips[].geometry", "type": "number", "required": true, "description": "Returns the whole geometry of the route as per given geometries request parameter. Default is encoded polyline with 5 digit accuracy (1e5) for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "trips[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "trips[].distance", "type": "number", "required": true, "description": "The distance of travel, in float meters.", "example": 2282.2, "enum": [] }, { "name": "trips[].duration", "type": "number", "required": true, "description": "The estimated travel time, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "waypoints", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "waypoints[].hint", "type": "string", "required": true, "description": "Unique internal identifier of the segment (ephemeral, not constant over data updates) This can be used on subsequent request to significantly speed up the query and to connect multiple services. E.g. you can use the hint value obtained by the nearest query as hint values for route inputs.", "example": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "enum": [] }, { "name": "waypoints[].name", "type": "string", "required": true, "description": "Name of the street the coordinate snapped to.", "example": "Delhi Gurgaon Expressway", "enum": [] }, { "name": "waypoints[].distance", "type": "number", "required": true, "description": "distance to snapped location from actual location.", "example": 4.033839, "enum": [] }, { "name": "waypoints[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the snapped location of the waypoint.", "example": "28.612964,77.229463", "enum": [] }, { "name": "code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [ "Ok", "InvalidUrl", "InvalidService", "InvalidVersion", "InvalidOptions", "InvalidQuery", "InvalidValue", "NoSegment", "TooBig", "NoRoute" ] }, { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] } ], "example": { "trips": [ { "legs": [ { "steps": "example", "summary": "Patel Road, Bhagwan Mahavir Marg", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "weight_name": "routability", "geometry": "osgmDutwuMjA~@vEfGx@X~RlXLnAhGbJfHjQzBxDb@jEpAj@nAFt@`A?fAQn@aDbBcAhBmChQ", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "waypoints": [ { "hint": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "name": "Delhi Gurgaon Expressway", "distance": 4.033839, "location": [ 77.113089, 28.544643 ] } ], "code": "Ok", "Server": "ETA-5100" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/trip_optimization_eta/driving/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/trip_optimization_eta/driving/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/trip_optimization_eta/driving/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/trip_optimization_eta/driving/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/trip_optimization_eta/driving/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 58, "generationGroup": "core-location-get-rest-key-resources-profile-geopositions-03d4b10931", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Routing API - Identity: `api-operation:core-location-get-rest-key-resources-profile-geopositions-routing-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463", "operationId": "routingAPI", "summary": "Routing API", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. Live Demo | Download Sample Code", "tags": [ "Routing API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Routing API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources routeadv to calculate a route & its duration without considering traffic conditions. routeeta to get the updated duration of a route considering live traffic; Applicable for India only “region=ind” and “rtype=1” is not supported. This is different from routetraffic ; this resource balances between a preferred path and aggressive traffic congestion avoidance. routetraf", "example": "route_eta", "enum": [ "route_adv", "route_eta", "route_traffic" ] }, { "name": "profile", "in": "path", "required": true, "type": "string", "description": "The different profiles available within MapmyIndia Routing API. These profiles have their own individual transport modes and not all are allocated for evalulations be default. For allocating particular profiles on your API credentials, please contact apisupport@mapmyindia.com Table 2. Profiles Element Value Description Profiles driving Meant for 4-wheeler/passenger car routing. biking Meant for two-wheeler routing. Routing with this profile is restricted to routeadv only. region & rtype request parameters are not supported in two-wheeler routing. walking Meant for pedestrian routing. Routing with this profile is restricted to routeadv only. region & rtype request parameters are not supported", "example": "driving", "enum": [ "driving", "biking", "walking", "trucking" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be consider as start point (mandatory); a last geoposition will be considered as end point (mandatory) and those in between are via points (optional). {longitude1},{latitude1};{longitude2},{latitude2};eLoc1;eLoc2; ... (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometries", "in": "query", "required": false, "type": "string", "description": "This parameter used to change the route geometry format/density (influences overview and per step).", "example": "polyline", "enum": [ "polyline", "polyline6", "geojson" ] }, { "name": "rtype", "in": "query", "required": false, "type": "integer", "description": "type of route (integer) required for navigation, where values mean: 0 optimal (default) 1 shortest (it will calculate route by excluding access penalties like private roads, etc.)", "example": 0, "enum": [ 0, 1 ] }, { "name": "steps", "in": "query", "required": false, "type": "boolean", "description": "Return route steps for each route leg. Possible values are true/false. By default it will be used as false.", "example": true, "enum": [ true, false ] }, { "name": "exclude", "in": "query", "required": false, "type": "string", "description": "Additive list of road classes to avoid, order does not matter. Possible values are toll, motorway & ferry. Multiple values can be sent separated by comma.", "example": "ferry", "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "This parameter is optional for India; for other countries (such as Sri Lanka, Nepal, Bangladesh, Bhutan + many more) this parameter is mandatory. Possible values are listed in a table here.", "example": "IND", "enum": [] }, { "name": "bearings", "in": "query", "required": false, "type": "integer", "description": "Limits the search to segments with given bearing in degrees. The referencing will be to the true north and in clockwise direction. (Part of premium offering)", "example": 180, "enum": [] }, { "name": "alternatives", "in": "query", "required": false, "type": "integer", "description": "Search for alternative routes. Passing a number: e.g. alternatives=n searches for up to n alternative routes. Please note that even if alternative routes are requested, a result cannot be guaranteed.", "example": 2, "enum": [] }, { "name": "radiuses", "in": "query", "required": false, "type": "string", "description": "Limits the search to given radius in meters. For all way-points including start and end points. {radius};{radius}[;{radius} ...]. (Part of premium offering)", "example": "100;100", "enum": [] }, { "name": "overview", "in": "query", "required": false, "type": "string", "description": "Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all. Possible values are simplified (default), full , false . (Part of premium offering)", "example": "simplified", "enum": [ "simplified", "full", false ] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "routes", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].legs[].steps[].geometry", "type": "number", "required": true, "description": "The un-simplified geometry of the step segment, depends on the given geometries request parameter. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections", "type": "array", "required": true, "description": "A list of Intersection objects(1) that are passed along the segment, the very first belonging to the StepManeuver(2). Note: An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (intersections[0]) corresponds to the location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction. An object type representing maneuver.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the location of the intersection.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].classes", "type": "array", "required": true, "description": "Categorised types of road segments e.g. Motorway", "example": [ "motorway" ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].bearings", "type": "array", "required": true, "description": "A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.", "example": [ 60, 210, 240 ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].entry", "type": "array", "required": true, "description": "A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true indicates that the respective road could be entered on a valid route. false indicates that the turn onto the respective road would violate a restriction.", "example": [ false, true, true ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].in", "type": "integer", "required": true, "description": "index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for depart maneuvers.", "example": 0, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].out", "type": "integer", "required": true, "description": "index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for arrive maneuvers.", "example": 2, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].lanes", "type": "array", "required": true, "description": "Array of Lane objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the lanes property will not be present.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].driving_side", "type": "number", "required": true, "description": "“Left” (default) for India, Sri Lanka, Nepal, Bangladesh & Bhutan.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].name", "type": "string", "required": true, "description": "The name of the way along which travel proceeds.", "example": "Safdar Hashmi Marg", "enum": [] }, { "name": "routes[].legs[].steps[].mode", "type": "string", "required": true, "description": "signifies the mode of transportation; driving as default.", "example": "driving", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.location", "type": "array", "required": true, "description": "A [longitude, latitude] pair describing the location of the turn.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_before", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately before the maneuver.", "example": 357, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_after", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately after the maneuver.", "example": 254, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.modifier", "type": "string", "required": true, "description": "An optional string indicating the direction change of the maneuver. To see the complete list of modifiers, please see article in wiki.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.type", "type": "string", "required": true, "description": "A string indicating the type of maneuver. New identifiers might be introduced without API change. Types unknown to the client should be handled like the ‘turn’ type, the existence of correct modifier values is guaranteed. To see the complete list of types, please see article in wiki.", "example": "turn", "enum": [] }, { "name": "routes[].legs[].summary", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "Patel Road, Bhagwan Mahavir Marg", "enum": [] }, { "name": "routes[].legs[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].weight_name", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "routability", "enum": [] }, { "name": "routes[].geometry", "type": "number", "required": true, "description": "Returns the whole geometry of the route as per given geometries request parameter. Default is encoded polyline with 5 digit accuracy (1e5) for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].distance", "type": "number", "required": true, "description": "The distance of travel, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].duration", "type": "number", "required": true, "description": "The estimated travel time, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "waypoints", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "waypoints[].hint", "type": "string", "required": true, "description": "Unique internal identifier of the segment (ephemeral, not constant over data updates) This can be used on subsequent request to significantly speed up the query and to connect multiple services. E.g. you can use the hint value obtained by the nearest query as hint values for route inputs.", "example": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "enum": [] }, { "name": "waypoints[].name", "type": "string", "required": true, "description": "Name of the street the coordinate snapped to.", "example": "Delhi Gurgaon Expressway", "enum": [] }, { "name": "waypoints[].distance", "type": "number", "required": true, "description": "distance to snapped location from actual location.", "example": 4.033839, "enum": [] }, { "name": "waypoints[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the snapped location of the waypoint.", "example": "28.612964,77.229463", "enum": [] }, { "name": "code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [ "Ok", "InvalidUrl", "InvalidService", "InvalidVersion", "InvalidOptions", "InvalidQuery", "InvalidValue", "NoSegment", "TooBig", "NoRoute" ] }, { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] } ], "example": { "routes": [ { "legs": [ { "steps": "example", "summary": "Patel Road, Bhagwan Mahavir Marg", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "weight_name": "routability", "geometry": "osgmDutwuMjA~@vEfGx@X~RlXLnAhGbJfHjQzBxDb@jEpAj@nAFt@`A?fAQn@aDbBcAhBmChQ", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "waypoints": [ { "hint": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "name": "Delhi Gurgaon Expressway", "distance": 4.033839, "location": [ 77.113089, 28.544643 ] } ], "code": "Ok", "Server": "ETA-5100" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 60, "generationGroup": "core-location-get-rest-key-resources-profile-geopositions-4184121e97", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Routing API with biking profile - Identity: `api-operation:core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/biking/28.612964%2C77.229463", "operationId": "routingAPI", "summary": "Routing API with biking profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. The MapmyIndia Bike Routing API takes into consideration routes where bikes are allowed to travel as well as those roads which might be non-navigable to larger vehicles. Live Demo | Download Sample Code", "tags": [ "Routing API with Biking Profile" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Routing API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources routeadv to calculate a route & its duration without considering traffic conditions. routeeta Not applicable with biking profile. routetraffic Not applicable with biking profile.", "example": "route_adv", "enum": [ "route_adv" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be consider as start point (mandatory); a last geoposition will be considered as end point (mandatory) and those in between are via points (optional). {longitude1},{latitude1};{longitude2},{latitude2};eLoc1;eLoc2; ... (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometries", "in": "query", "required": false, "type": "string", "description": "This parameter used to change the route geometry format/density (influences overview and per step).", "example": "polyline", "enum": [ "polyline", "polyline6", "geojson" ] }, { "name": "steps", "in": "query", "required": false, "type": "boolean", "description": "Return route steps for each route leg. Possible values are true/false. By default it will be used as false.", "example": true, "enum": [ true, false ] }, { "name": "exclude", "in": "query", "required": false, "type": "string", "description": "Additive list of road classes to avoid, order does not matter. Possible values are toll, motorway & ferry. Multiple values can be sent separated by comma.", "example": "ferry", "enum": [] }, { "name": "bearings", "in": "query", "required": false, "type": "integer", "description": "Limits the search to segments with given bearing in degrees. The referencing will be to the true north and in clockwise direction. (Part of premium offering)", "example": 180, "enum": [] }, { "name": "alternatives", "in": "query", "required": false, "type": "integer", "description": "Search for alternative routes. Passing a number: e.g. alternatives=n searches for up to n alternative routes. Please note that even if alternative routes are requested, a result cannot be guaranteed.", "example": 2, "enum": [] }, { "name": "radiuses", "in": "query", "required": false, "type": "string", "description": "Limits the search to given radius in meters. For all way-points including start and end points. {radius};{radius}[;{radius} ...]. (Part of premium offering)", "example": "100;100", "enum": [] }, { "name": "overview", "in": "query", "required": false, "type": "string", "description": "Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all. Possible values are simplified (default), full , false . (Part of premium offering)", "example": "simplified", "enum": [ "simplified", "full", false ] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "routes", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].legs[].steps[].geometry", "type": "number", "required": true, "description": "The un-simplified geometry of the step segment, depends on the given geometries request parameter. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections", "type": "array", "required": true, "description": "A list of Intersection objects(1) that are passed along the segment, the very first belonging to the StepManeuver(2). Note: An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (intersections[0]) corresponds to the location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction. An object type representing maneuver.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the location of the intersection.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].classes", "type": "array", "required": true, "description": "Categorised types of road segments e.g. Motorway", "example": [ "motorway" ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].bearings", "type": "array", "required": true, "description": "A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.", "example": [ 60, 210, 240 ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].entry", "type": "array", "required": true, "description": "A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true indicates that the respective road could be entered on a valid route. false indicates that the turn onto the respective road would violate a restriction.", "example": [ false, true, true ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].in", "type": "integer", "required": true, "description": "index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for depart maneuvers.", "example": 0, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].out", "type": "integer", "required": true, "description": "index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for arrive maneuvers.", "example": 2, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].lanes", "type": "array", "required": true, "description": "Array of Lane objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the lanes property will not be present.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].driving_side", "type": "number", "required": true, "description": "“Left” (default) for India, Sri Lanka, Nepal, Bangladesh & Bhutan.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].name", "type": "string", "required": true, "description": "The name of the way along which travel proceeds.", "example": "Safdar Hashmi Marg", "enum": [] }, { "name": "routes[].legs[].steps[].mode", "type": "string", "required": true, "description": "signifies the mode of transportation; driving as default.", "example": "biking", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.location", "type": "array", "required": true, "description": "A [longitude, latitude] pair describing the location of the turn.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_before", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately before the maneuver.", "example": 357, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_after", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately after the maneuver.", "example": 254, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.modifier", "type": "string", "required": true, "description": "An optional string indicating the direction change of the maneuver. To see the complete list of modifiers, please see article in wiki.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.type", "type": "string", "required": true, "description": "A string indicating the type of maneuver. New identifiers might be introduced without API change. Types unknown to the client should be handled like the ‘turn’ type, the existence of correct modifier values is guaranteed. To see the complete list of types, please see article in wiki.", "example": "turn", "enum": [] }, { "name": "routes[].legs[].summary", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "Patel Road, Bhagwan Mahavir Marg", "enum": [] }, { "name": "routes[].legs[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].weight_name", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "routability", "enum": [] }, { "name": "routes[].geometry", "type": "number", "required": true, "description": "Returns the whole geometry of the route as per given geometries request parameter. Default is encoded polyline with 5 digit accuracy (1e5) for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].distance", "type": "number", "required": true, "description": "The distance of travel, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].duration", "type": "number", "required": true, "description": "The estimated travel time, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "waypoints", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "waypoints[].hint", "type": "string", "required": true, "description": "Unique internal identifier of the segment (ephemeral, not constant over data updates) This can be used on subsequent request to significantly speed up the query and to connect multiple services. E.g. you can use the hint value obtained by the nearest query as hint values for route inputs.", "example": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "enum": [] }, { "name": "waypoints[].name", "type": "string", "required": true, "description": "Name of the street the coordinate snapped to.", "example": "Delhi Gurgaon Expressway", "enum": [] }, { "name": "waypoints[].distance", "type": "number", "required": true, "description": "distance to snapped location from actual location.", "example": 4.033839, "enum": [] }, { "name": "waypoints[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the snapped location of the waypoint.", "example": "28.612964,77.229463", "enum": [] }, { "name": "code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [ "Ok", "InvalidUrl", "InvalidService", "InvalidVersion", "InvalidOptions", "InvalidQuery", "InvalidValue", "NoSegment", "TooBig", "NoRoute" ] }, { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] } ], "example": { "routes": [ { "legs": [ { "steps": "example", "summary": "Patel Road, Bhagwan Mahavir Marg", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "weight_name": "routability", "geometry": "osgmDutwuMjA~@vEfGx@X~RlXLnAhGbJfHjQzBxDb@jEpAj@nAFt@`A?fAQn@aDbBcAhBmChQ", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "waypoints": [ { "hint": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "name": "Delhi Gurgaon Expressway", "distance": 4.033839, "location": [ 77.113089, 28.544643 ] } ], "code": "Ok", "Server": "ETA-5100" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/biking/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/biking/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/biking/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/biking/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/biking/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 57, "generationGroup": "core-location-get-rest-key-resources-biking-geopositions-157cd574e1", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Routing API with driving profile - Identity: `api-operation:core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463", "operationId": "routingAPI", "summary": "Routing API with driving profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. Live Demo | Download Sample Code", "tags": [ "Routing API with Driving Profile" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Routing API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources routeadv to calculate a route & its duration without considering traffic conditions. routeeta to get the updated duration of a route considering live traffic; Applicable for India only “region=ind” and “rtype=1” is not supported. This is different from routetraffic ; this resource balances between a preferred path and aggressive traffic congestion avoidance. routetraf", "example": "route_eta", "enum": [ "route_adv", "route_eta", "route_traffic" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be consider as start point (mandatory); a last geoposition will be considered as end point (mandatory) and those in between are via points (optional). {longitude1},{latitude1};{longitude2},{latitude2};eLoc1;eLoc2; ... (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometries", "in": "query", "required": false, "type": "string", "description": "This parameter used to change the route geometry format/density (influences overview and per step).", "example": "polyline", "enum": [ "polyline", "polyline6", "geojson" ] }, { "name": "rtype", "in": "query", "required": false, "type": "integer", "description": "type of route (integer) required for navigation, where values mean: 0 optimal (default) 1 shortest (it will calculate route by excluding access penalties like private roads, etc.)", "example": 0, "enum": [ 0, 1 ] }, { "name": "steps", "in": "query", "required": false, "type": "boolean", "description": "Return route steps for each route leg. Possible values are true/false. By default it will be used as false.", "example": true, "enum": [ true, false ] }, { "name": "exclude", "in": "query", "required": false, "type": "string", "description": "Additive list of road classes to avoid, order does not matter. Possible values are toll, motorway & ferry. Multiple values can be sent separated by comma.", "example": "ferry", "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "This parameter is optional for India; for other countries (such as Sri Lanka, Nepal, Bangladesh, Bhutan + many more) this parameter is mandatory. Possible values are listed in a table here.", "example": "IND", "enum": [] }, { "name": "bearings", "in": "query", "required": false, "type": "integer", "description": "Limits the search to segments with given bearing in degrees. The referencing will be to the true north and in clockwise direction. (Part of premium offering)", "example": 180, "enum": [] }, { "name": "alternatives", "in": "query", "required": false, "type": "integer", "description": "Search for alternative routes. Passing a number: e.g. alternatives=n searches for up to n alternative routes. Please note that even if alternative routes are requested, a result cannot be guaranteed.", "example": 2, "enum": [] }, { "name": "radiuses", "in": "query", "required": false, "type": "string", "description": "Limits the search to given radius in meters. For all way-points including start and end points. {radius};{radius}[;{radius} ...]. (Part of premium offering)", "example": "100;100", "enum": [] }, { "name": "overview", "in": "query", "required": false, "type": "string", "description": "Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all. Possible values are simplified (default), full , false . (Part of premium offering)", "example": "simplified", "enum": [ "simplified", "full", false ] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "routes", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].legs[].steps[].geometry", "type": "number", "required": true, "description": "The un-simplified geometry of the step segment, depends on the given geometries request parameter. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections", "type": "array", "required": true, "description": "A list of Intersection objects(1) that are passed along the segment, the very first belonging to the StepManeuver(2). Note: An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (intersections[0]) corresponds to the location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction. An object type representing maneuver.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the location of the intersection.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].classes", "type": "array", "required": true, "description": "Categorised types of road segments e.g. Motorway", "example": [ "motorway" ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].bearings", "type": "array", "required": true, "description": "A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.", "example": [ 60, 210, 240 ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].entry", "type": "array", "required": true, "description": "A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true indicates that the respective road could be entered on a valid route. false indicates that the turn onto the respective road would violate a restriction.", "example": [ false, true, true ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].in", "type": "integer", "required": true, "description": "index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for depart maneuvers.", "example": 0, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].out", "type": "integer", "required": true, "description": "index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for arrive maneuvers.", "example": 2, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].lanes", "type": "array", "required": true, "description": "Array of Lane objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the lanes property will not be present.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].driving_side", "type": "number", "required": true, "description": "“Left” (default) for India, Sri Lanka, Nepal, Bangladesh & Bhutan.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].name", "type": "string", "required": true, "description": "The name of the way along which travel proceeds.", "example": "Safdar Hashmi Marg", "enum": [] }, { "name": "routes[].legs[].steps[].mode", "type": "string", "required": true, "description": "signifies the mode of transportation; driving as default.", "example": "driving", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.location", "type": "array", "required": true, "description": "A [longitude, latitude] pair describing the location of the turn.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_before", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately before the maneuver.", "example": 357, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_after", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately after the maneuver.", "example": 254, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.modifier", "type": "string", "required": true, "description": "An optional string indicating the direction change of the maneuver. To see the complete list of modifiers, please see article in wiki.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.type", "type": "string", "required": true, "description": "A string indicating the type of maneuver. New identifiers might be introduced without API change. Types unknown to the client should be handled like the ‘turn’ type, the existence of correct modifier values is guaranteed. To see the complete list of types, please see article in wiki.", "example": "turn", "enum": [] }, { "name": "routes[].legs[].summary", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "Patel Road, Bhagwan Mahavir Marg", "enum": [] }, { "name": "routes[].legs[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].weight_name", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "routability", "enum": [] }, { "name": "routes[].geometry", "type": "number", "required": true, "description": "Returns the whole geometry of the route as per given geometries request parameter. Default is encoded polyline with 5 digit accuracy (1e5) for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].distance", "type": "number", "required": true, "description": "The distance of travel, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].duration", "type": "number", "required": true, "description": "The estimated travel time, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "waypoints", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "waypoints[].hint", "type": "string", "required": true, "description": "Unique internal identifier of the segment (ephemeral, not constant over data updates) This can be used on subsequent request to significantly speed up the query and to connect multiple services. E.g. you can use the hint value obtained by the nearest query as hint values for route inputs.", "example": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "enum": [] }, { "name": "waypoints[].name", "type": "string", "required": true, "description": "Name of the street the coordinate snapped to.", "example": "Delhi Gurgaon Expressway", "enum": [] }, { "name": "waypoints[].distance", "type": "number", "required": true, "description": "distance to snapped location from actual location.", "example": 4.033839, "enum": [] }, { "name": "waypoints[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the snapped location of the waypoint.", "example": "28.612964,77.229463", "enum": [] }, { "name": "code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [ "Ok", "InvalidUrl", "InvalidService", "InvalidVersion", "InvalidOptions", "InvalidQuery", "InvalidValue", "NoSegment", "TooBig", "NoRoute" ] }, { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] } ], "example": { "routes": [ { "legs": [ { "steps": "example", "summary": "Patel Road, Bhagwan Mahavir Marg", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "weight_name": "routability", "geometry": "osgmDutwuMjA~@vEfGx@X~RlXLnAhGbJfHjQzBxDb@jEpAj@nAFt@`A?fAQn@aDbBcAhBmChQ", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "waypoints": [ { "hint": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "name": "Delhi Gurgaon Expressway", "distance": 4.033839, "location": [ 77.113089, 28.544643 ] } ], "code": "Ok", "Server": "ETA-5100" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_eta/driving/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 59, "generationGroup": "core-location-get-rest-key-resources-driving-geopositions-55fe3b1940", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Routing API with trucking profile - Identity: `api-operation:core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/trucking/28.612964%2C77.229463", "operationId": "routingAPI", "summary": "Routing API with trucking profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. MapmyIndia Truck Routing API calculates routes optimized for trucks and other commercial vehicles. Designed for professional transportation routing logistics, the API calculates safe and efficient routes that consider a vehicle’s attributes in relation to any route limitations. It also uses live traffic to determine precise ETAs, especially for areas that tend to be more congested. The routes include information such as route instructions, travel duration, and travel distance. Live Demo | Download Sample Code", "tags": [ "Routing API with Trucking Profile" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Routing API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources routeadv to calculate a route & its duration without considering traffic conditions. routeeta Not applicable with trucking profile. routetraffic Not applicable with trucking profile.", "example": "route_adv", "enum": [ "route_adv" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be consider as start point (mandatory); a last geoposition will be considered as end point (mandatory) and those in between are via points (optional). {longitude1},{latitude1};{longitude2},{latitude2};eLoc1;eLoc2; ... (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometries", "in": "query", "required": false, "type": "string", "description": "This parameter used to change the route geometry format/density (influences overview and per step).", "example": "polyline", "enum": [ "polyline", "polyline6", "geojson" ] }, { "name": "steps", "in": "query", "required": false, "type": "boolean", "description": "Return route steps for each route leg. Possible values are true/false. By default it will be used as false.", "example": true, "enum": [ true, false ] }, { "name": "exclude", "in": "query", "required": false, "type": "string", "description": "Additive list of road classes to avoid, order does not matter. Possible values are toll, motorway & ferry. Multiple values can be sent separated by comma.", "example": "ferry", "enum": [] }, { "name": "bearings", "in": "query", "required": false, "type": "integer", "description": "Limits the search to segments with given bearing in degrees. The referencing will be to the true north and in clockwise direction. (Part of premium offering)", "example": 180, "enum": [] }, { "name": "alternatives", "in": "query", "required": false, "type": "integer", "description": "Search for alternative routes. Passing a number: e.g. alternatives=n searches for up to n alternative routes. Please note that even if alternative routes are requested, a result cannot be guaranteed.", "example": 2, "enum": [] }, { "name": "radiuses", "in": "query", "required": false, "type": "string", "description": "Limits the search to given radius in meters. For all way-points including start and end points. {radius};{radius}[;{radius} ...]. (Part of premium offering)", "example": "100;100", "enum": [] }, { "name": "overview", "in": "query", "required": false, "type": "string", "description": "Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all. Possible values are simplified (default), full , false . (Part of premium offering)", "example": "simplified", "enum": [ "simplified", "full", false ] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "routes", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].legs[].steps[].geometry", "type": "number", "required": true, "description": "The un-simplified geometry of the step segment, depends on the given geometries request parameter. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections", "type": "array", "required": true, "description": "A list of Intersection objects(1) that are passed along the segment, the very first belonging to the StepManeuver(2). Note: An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (intersections[0]) corresponds to the location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction. An object type representing maneuver.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the location of the intersection.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].classes", "type": "array", "required": true, "description": "Categorised types of road segments e.g. Motorway", "example": [ "motorway" ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].bearings", "type": "array", "required": true, "description": "A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.", "example": [ 60, 210, 240 ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].entry", "type": "array", "required": true, "description": "A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true indicates that the respective road could be entered on a valid route. false indicates that the turn onto the respective road would violate a restriction.", "example": [ false, true, true ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].in", "type": "integer", "required": true, "description": "index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for depart maneuvers.", "example": 0, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].out", "type": "integer", "required": true, "description": "index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for arrive maneuvers.", "example": 2, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].lanes", "type": "array", "required": true, "description": "Array of Lane objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the lanes property will not be present.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].driving_side", "type": "number", "required": true, "description": "“Left” (default) for India, Sri Lanka, Nepal, Bangladesh & Bhutan.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].name", "type": "string", "required": true, "description": "The name of the way along which travel proceeds.", "example": "Safdar Hashmi Marg", "enum": [] }, { "name": "routes[].legs[].steps[].mode", "type": "string", "required": true, "description": "signifies the mode of transportation; driving as default.", "example": "trucking", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.location", "type": "array", "required": true, "description": "A [longitude, latitude] pair describing the location of the turn.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_before", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately before the maneuver.", "example": 357, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_after", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately after the maneuver.", "example": 254, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.modifier", "type": "string", "required": true, "description": "An optional string indicating the direction change of the maneuver. To see the complete list of modifiers, please see article in wiki.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.type", "type": "string", "required": true, "description": "A string indicating the type of maneuver. New identifiers might be introduced without API change. Types unknown to the client should be handled like the ‘turn’ type, the existence of correct modifier values is guaranteed. To see the complete list of types, please see article in wiki.", "example": "turn", "enum": [] }, { "name": "routes[].legs[].summary", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "Patel Road, Bhagwan Mahavir Marg", "enum": [] }, { "name": "routes[].legs[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].weight_name", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "routability", "enum": [] }, { "name": "routes[].geometry", "type": "number", "required": true, "description": "Returns the whole geometry of the route as per given geometries request parameter. Default is encoded polyline with 5 digit accuracy (1e5) for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].distance", "type": "number", "required": true, "description": "The distance of travel, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].duration", "type": "number", "required": true, "description": "The estimated travel time, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "waypoints", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "waypoints[].hint", "type": "string", "required": true, "description": "Unique internal identifier of the segment (ephemeral, not constant over data updates) This can be used on subsequent request to significantly speed up the query and to connect multiple services. E.g. you can use the hint value obtained by the nearest query as hint values for route inputs.", "example": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "enum": [] }, { "name": "waypoints[].name", "type": "string", "required": true, "description": "Name of the street the coordinate snapped to.", "example": "Delhi Gurgaon Expressway", "enum": [] }, { "name": "waypoints[].distance", "type": "number", "required": true, "description": "distance to snapped location from actual location.", "example": 4.033839, "enum": [] }, { "name": "waypoints[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the snapped location of the waypoint.", "example": "28.612964,77.229463", "enum": [] }, { "name": "code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [ "Ok", "InvalidUrl", "InvalidService", "InvalidVersion", "InvalidOptions", "InvalidQuery", "InvalidValue", "NoSegment", "TooBig", "NoRoute" ] }, { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] } ], "example": { "routes": [ { "legs": [ { "steps": "example", "summary": "Patel Road, Bhagwan Mahavir Marg", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "weight_name": "routability", "geometry": "osgmDutwuMjA~@vEfGx@X~RlXLnAhGbJfHjQzBxDb@jEpAj@nAFt@`A?fAQn@aDbBcAhBmChQ", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "waypoints": [ { "hint": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "name": "Delhi Gurgaon Expressway", "distance": 4.033839, "location": [ 77.113089, 28.544643 ] } ], "code": "Ok", "Server": "ETA-5100" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/trucking/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/trucking/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/trucking/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/trucking/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/trucking/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 57, "generationGroup": "core-location-get-rest-key-resources-trucking-geopositions-0ed7ab839f", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Routing API with walking profile - Identity: `api-operation:core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile - State model: stateless ```json { "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingWalking.yml", "sourceFingerprint": "dd614ed88ba528548b43633bcdf89d01b25ae8d906e32c00ab61fa3fe5b76d63", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/{resources}/walking/{geopositions}", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/walking/28.612964%2C77.229463", "operationId": "routingAPI", "summary": "Routing API with walking profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. MapmyIndia Pedestrian Routing API calculates the best route for pedestrians. It takes into account how easy it is for pedestrians to maneuver between links in the route while disregarding traffic conditions. The API recommends actions that are relevant for pedestrians and the maneuver instructions contain texts that are suitable for someone who is walking. Live Demo | Download Sample Code", "tags": [ "Routing API with Walking Profile" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "resources", "in": "path", "required": true, "type": "string", "description": "The different resources available within MapmyIndia Routing API. These resources have their own individual allocations and not all are allocated for evalulations be default. For allocating particular resource on your API credentials, please contact apisupport@mapmyindia.com Table 1. Resources Element Value Description Resources routeadv to calculate a route & its duration without considering traffic conditions. routeeta Not applicable with walking profile. routetraffic Not applicable with walking profile.", "example": "route_adv", "enum": [ "route_adv" ] }, { "name": "geopositions", "in": "path", "required": true, "type": "string", "description": "geopositions(part of URL) are either: pair of comma separated longitude & latitude values OR eLoc(s). First geoposition will be consider as start point (mandatory); a last geoposition will be considered as end point (mandatory) and those in between are via points (optional). {longitude1},{latitude1};{longitude2},{latitude2};eLoc1;eLoc2; ... (part of URL).", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometries", "in": "query", "required": false, "type": "string", "description": "This parameter used to change the route geometry format/density (influences overview and per step).", "example": "polyline", "enum": [ "polyline", "polyline6", "geojson" ] }, { "name": "steps", "in": "query", "required": false, "type": "boolean", "description": "Return route steps for each route leg. Possible values are true/false. By default it will be used as false.", "example": true, "enum": [ true, false ] }, { "name": "exclude", "in": "query", "required": false, "type": "string", "description": "Additive list of road classes to avoid, order does not matter. Possible values are toll, motorway & ferry. Multiple values can be sent separated by comma.", "example": "ferry", "enum": [] }, { "name": "bearings", "in": "query", "required": false, "type": "integer", "description": "Limits the search to segments with given bearing in degrees. The referencing will be to the true north and in clockwise direction. (Part of premium offering)", "example": 180, "enum": [] }, { "name": "alternatives", "in": "query", "required": false, "type": "integer", "description": "Search for alternative routes. Passing a number: e.g. alternatives=n searches for up to n alternative routes. Please note that even if alternative routes are requested, a result cannot be guaranteed.", "example": 2, "enum": [] }, { "name": "radiuses", "in": "query", "required": false, "type": "string", "description": "Limits the search to given radius in meters. For all way-points including start and end points. {radius};{radius}[;{radius} ...]. (Part of premium offering)", "example": "100;100", "enum": [] }, { "name": "overview", "in": "query", "required": false, "type": "string", "description": "Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all. Possible values are simplified (default), full , false . (Part of premium offering)", "example": "simplified", "enum": [ "simplified", "full", false ] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "routes", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].steps[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].legs[].steps[].geometry", "type": "number", "required": true, "description": "The un-simplified geometry of the step segment, depends on the given geometries request parameter. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections", "type": "array", "required": true, "description": "A list of Intersection objects(1) that are passed along the segment, the very first belonging to the StepManeuver(2). Note: An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (intersections[0]) corresponds to the location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction. An object type representing maneuver.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the location of the intersection.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].classes", "type": "array", "required": true, "description": "Categorised types of road segments e.g. Motorway", "example": [ "motorway" ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].bearings", "type": "array", "required": true, "description": "A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.", "example": [ 60, 210, 240 ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].entry", "type": "array", "required": true, "description": "A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true indicates that the respective road could be entered on a valid route. false indicates that the turn onto the respective road would violate a restriction.", "example": [ false, true, true ], "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].in", "type": "integer", "required": true, "description": "index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for depart maneuvers.", "example": 0, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].out", "type": "integer", "required": true, "description": "index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for arrive maneuvers.", "example": 2, "enum": [] }, { "name": "routes[].legs[].steps[].intersections[].lanes", "type": "array", "required": true, "description": "Array of Lane objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the lanes property will not be present.", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].driving_side", "type": "number", "required": true, "description": "“Left” (default) for India, Sri Lanka, Nepal, Bangladesh & Bhutan.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].name", "type": "string", "required": true, "description": "The name of the way along which travel proceeds.", "example": "Safdar Hashmi Marg", "enum": [] }, { "name": "routes[].legs[].steps[].mode", "type": "string", "required": true, "description": "signifies the mode of transportation; driving as default.", "example": "walking", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.location", "type": "array", "required": true, "description": "A [longitude, latitude] pair describing the location of the turn.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_before", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately before the maneuver.", "example": 357, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.bearing_after", "type": "integer", "required": true, "description": "The clockwise angle from true north to the direction of travel immediately after the maneuver.", "example": 254, "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.modifier", "type": "string", "required": true, "description": "An optional string indicating the direction change of the maneuver. To see the complete list of modifiers, please see article in wiki.", "example": "left", "enum": [] }, { "name": "routes[].legs[].steps[].maneuver.type", "type": "string", "required": true, "description": "A string indicating the type of maneuver. New identifiers might be introduced without API change. Types unknown to the client should be handled like the ‘turn’ type, the existence of correct modifier values is guaranteed. To see the complete list of types, please see article in wiki.", "example": "turn", "enum": [] }, { "name": "routes[].legs[].summary", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "Patel Road, Bhagwan Mahavir Marg", "enum": [] }, { "name": "routes[].legs[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].distance", "type": "number", "required": true, "description": "The distance of travel in the leg, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].legs[].duration", "type": "number", "required": true, "description": "The estimated travel time in the leg, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "routes[].weight_name", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": "routability", "enum": [] }, { "name": "routes[].geometry", "type": "number", "required": true, "description": "Returns the whole geometry of the route as per given geometries request parameter. Default is encoded polyline with 5 digit accuracy (1e5) for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] }, { "name": "routes[].weight", "type": "number", "required": true, "description": "Parameter for internal purpose only.", "example": 2282.2, "enum": [] }, { "name": "routes[].distance", "type": "number", "required": true, "description": "The distance of travel, in float meters.", "example": 2282.2, "enum": [] }, { "name": "routes[].duration", "type": "number", "required": true, "description": "The estimated travel time, in float number of seconds.", "example": 252.4, "enum": [] }, { "name": "waypoints", "type": "array", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "waypoints[].hint", "type": "string", "required": true, "description": "Unique internal identifier of the segment (ephemeral, not constant over data updates) This can be used on subsequent request to significantly speed up the query and to connect multiple services. E.g. you can use the hint value obtained by the nearest query as hint values for route inputs.", "example": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "enum": [] }, { "name": "waypoints[].name", "type": "string", "required": true, "description": "Name of the street the coordinate snapped to.", "example": "Delhi Gurgaon Expressway", "enum": [] }, { "name": "waypoints[].distance", "type": "number", "required": true, "description": "distance to snapped location from actual location.", "example": 4.033839, "enum": [] }, { "name": "waypoints[].location", "type": "array", "required": true, "description": "longitude, latitude pair describing the snapped location of the waypoint.", "example": "28.612964,77.229463", "enum": [] }, { "name": "code", "type": "string", "required": true, "description": "if request is successful, response is ‘ok’. Else, see the service dependent and general status codes as available in the enum. In case of error, “NoRoute” code is supported (in addition to the general ones) which means “no route found”. Ok : Request could be processed as expected. InvalidUrl : URL string is invalid. InvalidService: Service name is invalid. InvalidVersion : Version is not found. InvalidOptions : Options are invalid. InvalidQuery : The query string is synctactically malformed. Inv", "example": "Ok", "enum": [ "Ok", "InvalidUrl", "InvalidService", "InvalidVersion", "InvalidOptions", "InvalidQuery", "InvalidValue", "NoSegment", "TooBig", "NoRoute" ] }, { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "ETA-5100", "enum": [] } ], "example": { "routes": [ { "legs": [ { "steps": "example", "summary": "Patel Road, Bhagwan Mahavir Marg", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "weight_name": "routability", "geometry": "osgmDutwuMjA~@vEfGx@X~RlXLnAhGbJfHjQzBxDb@jEpAj@nAFt@`A?fAQn@aDbBcAhBmChQ", "weight": 2282.2, "distance": 2282.2, "duration": 252.4 } ], "waypoints": [ { "hint": "bEADgP___39tAAAA6QAAAChAAAB4CAAASdEuQaohRUHInMxEeg6MQwYAAAANAAAArAMAAHwAAADoAAAAiu2YBNCsswFz7ZgE3ayzAQ8AXw3Mm4K5", "name": "Delhi Gurgaon Expressway", "distance": 4.033839, "location": [ 77.113089, 28.544643 ] } ], "code": "Ok", "Server": "ETA-5100" } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/walking/28.612964%2C77.229463'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/walking/28.612964%2C77.229463\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/walking/28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/walking/28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/route_adv/walking/28.612964%2C77.229463\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 57, "generationGroup": "core-location-get-rest-key-resources-walking-geopositions-04688a170b", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Snap to Road API - Identity: `api-operation:core-location-post-rest-key-snaptoroad-snap-to-road-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api - State model: stateless ```json { "slug": "core-location-post-rest-key-snaptoroad-snap-to-road-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/snapToRoad.yml", "sourceFingerprint": "f05e344331821678f3463524df1c2729cabd344a994dd0a3877987cc6eb7b0e1", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/{REST_KEY}/snapToRoad", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/snapToRoad", "operationId": "snapToRoadAPI", "summary": "Snap to Road API", "description": "Snap-To-Road API, snaps given GPS points to the road network in the most plausible way. Maximum number of points are limited to 100 only. Our USP is to take GPS points collected along a route and return a similar set of corrected & aligned data with the points matched to the road with our intelligent Snap To Road API. Now seamlessly calculate accurate distances from points which follow the geometry of the road & show accurate positions on map. This API provides a critical feature that is immensely valuable when tracking assets and for data analytics of path traversed by vehicle, people or assets. Note : The request might result multiple sub-traces. Large jumps in the timestamps (> 60s) or improbable transitions lead to trace splits if a complete matching could not be found. The algorithm might not be able to match all points. Outliers are removed if they cannot be matched successfully. Live Demo", "tags": [ "Snap to Road API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/x-www-form-urlencoded" ], "fields": [ { "name": "pts", "type": "string", "required": true, "description": "Coordinate is pair of comma separated longitude & latitude value, First coordinate will be consider as start point; a last coordinate will be as end points and between are via points; like {longitude},{latitude};{longitude},{latitude}[;{longitude},{latitude} ...]. At present maximum number of points are limited to 100 in a single request.", "example": "78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200", "enum": [] }, { "name": "timestamps", "type": "string", "required": false, "description": "Timestamps for the input locations in seconds since UNIX epoch. Timestamps need to be monotonically increasing. Values must be integer {timestamp};{timestamp};{timestamp} ...", "example": "1700000000000", "enum": [] }, { "name": "geometries", "type": "string", "required": false, "description": "This parameter used to change the route geometry format/density (influences overview and per step). Default value is polyline with 5 digit precision; polyline6 for 6digit precision; geojson for geometries as geojson. Please note that “timestamps” parameter is mandatory for enabling geometries.", "example": "polyline", "enum": [] }, { "name": "radiuses", "type": "string", "required": false, "description": "Standard deviation of GPS precision used for map matching. If available use GPS accuracy in meters. Default value is 5 metres. Values must be integer {radius};{radius};{radius} ...", "example": "50;50;50;50;50;50", "enum": [] }, { "name": "region", "type": "string", "required": false, "description": "This parameter is optional for India; for other countries (such as Sri Lanka, Nepal, Bangladesh, Bhutan + many more) this parameter is mandatory. Possible values are listed in a table here.", "example": "IND", "enum": [] } ], "example": { "pts": "78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Server", "type": "string", "required": true, "description": "Gives Information on active service's server.", "example": "Adv-5400", "enum": [] }, { "name": "version", "type": "string", "required": true, "description": "API’s version information.", "example": "250.19.5222", "enum": [] }, { "name": "responseCode", "type": "string", "required": true, "description": "See the service dependent and general status codes", "example": "200", "enum": [] }, { "name": "results", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "results.snappedPoints", "type": "array", "required": true, "description": "Array of Waypoint objects representing all points of the trace in order. If the trace point was omitted by map matching because it is an outlier, the entry will be null.", "example": "example", "enum": [] }, { "name": "results.snappedPoints[].location", "type": "array", "required": true, "description": "Location of Matched point (Longitude, Latitude)", "example": "28.612964,77.229463", "enum": [] }, { "name": "results.snappedPoints[].distance", "type": "number", "required": true, "description": "Distance from the snapped point.", "example": 4.014843, "enum": [] }, { "name": "results.snappedPoints[].waypoint_index", "type": "number", "required": true, "description": "Distance from the snapped point.", "example": 0, "enum": [] }, { "name": "results.matchings", "type": "array", "required": true, "description": "An array of Route objects that assemble the trace.", "example": "example", "enum": [] }, { "name": "results.matchings[].geometry", "type": "string", "required": true, "description": "Returns the whole geometry of the route as per given parameter ‘geometries’ default is encoded ‘polyline’ with 5 digit accuracy for positional coordinates. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964,77.229463", "enum": [] } ], "example": { "Server": "Adv-5400", "version": "250.19.5222", "responseCode": "200", "results": { "snappedPoints": [ { "location": [ 77.113089, 28.544643 ], "distance": 4.014843, "waypoint_index": 0 } ], "matchings": [ { "geometry": "ie`iByrp}MN{HKeMXmOKuGq@}JaBaHaDmIgB{BuDcCuGeBeP{D" } ] } } }, { "status": "204", "description": "DB Connection error.", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "404", "description": "Not found", "fields": [], "example": null }, { "status": "412", "description": "Precondition Failed, i.e. Some existing pre-condition in formulating a valid API request was not fulfilled.", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/snapToRoad' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"pts\": \"78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/snapToRoad\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"pts\": \"78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\\\"Content-Type\\\": \\\"application/json\\\"}\nresponse = requests.request(\n \"POST\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/snapToRoad\",\n headers=headers,\n json={\n \"pts\": \"78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/snapToRoad\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"pts\": \"78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/snapToRoad\");\nrequest.Content = new StringContent(\"\"\"\n{\n \"pts\": \"78.40573,17.37317;78.40958,17.37314;78.41845,17.37449;78.409992,17.37328;78.420460,17.377443;78.421350,17.380200\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 25, "generationGroup": "core-location-post-rest-key-snaptoroad-98309a5898", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Still Map Image API - Identity: `api-operation:core-location-get-rest-key-still-image-still-map-image-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-still-image-still-map-image-api - State model: stateless ```json { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/{REST_KEY}/still_image", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image?center=28.5959394%2C77.2255611", "operationId": "stillMapImageAPI", "summary": "Still Map Image API", "description": "The Still Map Image API creates a map based on URL parameters sent through a standard HTTP request and returns the map as an image which you can display on your application. The API lets you embed MapmyIndia Maps image according to geo-position, pixel size and zoom level of the map on your application without requiring any dynamic page loading. The image can be a retina image and markers can be added to the image to indicate position of any object.", "tags": [ "Still Map Image API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "center", "in": "query", "required": true, "type": "string", "description": "A WGS-84 position coordinate that specifies the centre of the image requested.", "example": "28.5959394,77.2255611", "enum": [] }, { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] }, { "name": "zoom", "in": "query", "required": false, "type": "integer", "description": "The zoom level for which the image is requested. Ranges from 4 to 18 with 18 being the highest zoomed in level.", "example": 15, "enum": [] }, { "name": "size", "in": "query", "required": false, "type": "string", "description": "The size of the image requested in pixels as width x height .", "example": "400x400", "enum": [] }, { "name": "ssf", "in": "query", "required": false, "type": "integer", "description": "scale factor indicating retina or non-retina tiles. 0 = non retina tiles 1 = retina tiles", "example": 1, "enum": [ 0, 1 ] }, { "name": "markers", "in": "query", "required": false, "type": "string", "description": "Optional markers that you may want to add to the map tile. Specified by WGS-84 position coordinates, seperated by semi-colon.", "example": "28.5959394,77.2255611", "enum": [] }, { "name": "markers_icon", "in": "query", "required": false, "type": "string", "description": "The URL of the Custom Marker.", "example": "https://img.icons8.com/material-outlined/96/000000/truck.png", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "https://kunalbharti.github.io/mapmyindia-rest-api-beta/custom/stillMapImageResponse.png" }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image?center=28.5959394%2C77.2255611'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image?center=28.5959394%2C77.2255611\", {\n method: \"GET\",\n headers: {}\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {}\nresponse = requests.request(\n \"GET\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image?center=28.5959394%2C77.2255611\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image?center=28.5959394%2C77.2255611\"))\n .timeout(Duration.ofSeconds(15))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image?center=28.5959394%2C77.2255611\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 14, "generationGroup": "core-location-get-rest-key-still-image-15b19a6e92", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Text Search API - Identity: `api-operation:core-location-get-api-places-textsearch-json-text-search-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-textsearch-json-text-search-api - State model: stateless ```json { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/api/places/textsearch/json", "baseUrl": "https://atlas.mapmyindia.com", "requestUrl": "https://atlas.mapmyindia.com/api/places/textsearch/json?query=Where+is+Lajpat+Nagar", "operationId": "AtlasTextSearchAPI", "summary": "Text Search API", "description": "Text Search API is a service that aims to provide information about a list of places on the basis of a text string entered by the user. It uses the location information that is provided along with the query to try to understand the request. This API now supports Hindi language so you can now search queries in Hindi too. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Download Sample Code", "tags": [ "Text Search API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [ { "name": "BearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "query", "in": "query", "required": true, "type": "string", "description": "e.g. FODCOF, Shoes, Coffee, Versace, Gucci, H&M, Adidas, Starbucks, B130 {POI, House Number, keyword, tag}", "example": "Where is Lajpat Nagar", "enum": [] }, { "name": "region", "in": "query", "required": false, "type": "string", "description": "It takes in the country code. LKA, IND, BTN, BGD, NPL for Sri-Lanka, India, Bhutan, Bangladesh, Nepal respectively. Default is India (IND)", "example": "IND", "enum": [] }, { "name": "location", "in": "query", "required": false, "type": "string", "description": "Provides the location around which the search will be performed. e.g. location=28.454,77.435 It is STRONGLY RECOMMENDED to use this parameter for accurate location biased results.", "example": "28.612964,77.229463", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "Filter parameter helps you restrict the result by mentioning pincode. e.g. filter=pin:110020", "example": "pin:110020", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "suggestedLocation", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "suggestedLocation[].type", "type": "string", "required": true, "description": "This is the type whether the results is POI or any building point.", "example": "POI", "enum": [] }, { "name": "suggestedLocation[].typeX", "type": "integer", "required": true, "description": "Type attribute for internal use only for MapmyIndia.", "example": 7, "enum": [] }, { "name": "suggestedLocation[].placeAddress", "type": "string", "required": true, "description": "Address of the location.", "example": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "enum": [] }, { "name": "suggestedLocation[].latitude", "type": "number", "required": true, "description": "It shows us the latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedLocation[].longitude", "type": "number", "required": true, "description": "It shows us the longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedLocation[].eLoc", "type": "string", "required": true, "description": "It is the Six or eight digit unique code offered only by mapmyindia to search for any address through this eLoc.", "example": "MMI000", "enum": [] }, { "name": "suggestedLocation[].entryLatitude", "type": "number", "required": true, "description": "It shows us the entry latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "suggestedLocation[].entryLongitude", "type": "number", "required": true, "description": "It shows us the entry longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "suggestedLocation[].placeName", "type": "string", "required": true, "description": "This shows the name of the POI", "example": "OYO Hotel", "enum": [] }, { "name": "suggestedLocation[].alternateName", "type": "string", "required": true, "description": "This shows the alternate name of the POI", "example": "OyoRooms,OYO 40400 Yippe Rooms,OYO Rooms Hotel", "enum": [] }, { "name": "suggestedLocation[].keywords", "type": "array", "required": true, "description": "The keywords/category codes associated with the given result.", "example": "example", "enum": [] }, { "name": "suggestedLocation[].addressTokens", "type": "object", "required": true, "description": "", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "suggestedLocation[].addressTokens.houseNumber", "type": "string", "required": false, "description": "House Number of the POI.", "example": "237", "enum": [] }, { "name": "suggestedLocation[].addressTokens.houseName", "type": "string", "required": false, "description": "House Name of the POI.", "example": "MMI Building", "enum": [] }, { "name": "suggestedLocation[].addressTokens.poi", "type": "string", "required": false, "description": "Name of the POI.", "example": "MapmyIndia Head Office", "enum": [] }, { "name": "suggestedLocation[].addressTokens.street", "type": "string", "required": false, "description": "Name of the street.", "example": "", "enum": [] }, { "name": "suggestedLocation[].addressTokens.subSubLocality", "type": "string", "required": false, "description": "Name of the subsublocality.", "example": "", "enum": [] }, { "name": "suggestedLocation[].addressTokens.subLocality", "type": "string", "required": false, "description": "Name of the sublocality.", "example": "", "enum": [] }, { "name": "suggestedLocation[].addressTokens.locality", "type": "string", "required": false, "description": "Name of the locality.", "example": "Okhla industrial phase 3", "enum": [] }, { "name": "suggestedLocation[].addressTokens.village", "type": "string", "required": false, "description": "Name of the village.", "example": "Okhla Vilage", "enum": [] }, { "name": "suggestedLocation[].addressTokens.subDistrict", "type": "string", "required": false, "description": "Name of the subDistrict.", "example": "", "enum": [] }, { "name": "suggestedLocation[].addressTokens.district", "type": "string", "required": true, "description": "Name of the District.", "example": "South Delhi", "enum": [] }, { "name": "suggestedLocation[].addressTokens.city", "type": "string", "required": true, "description": "Name of the city.", "example": "New Delhi", "enum": [] }, { "name": "suggestedLocation[].addressTokens.state", "type": "string", "required": true, "description": "Name of the STATE.", "example": "1700000000000", "enum": [] }, { "name": "suggestedLocation[].addressTokens.pincode", "type": "integer", "required": false, "description": "PINcode of the location.", "example": "110010", "enum": [] }, { "name": "suggestedLocation[].p", "type": "integer", "required": true, "description": "This shows the priority of the POI", "example": 11663, "enum": [] }, { "name": "suggestedLocation[].orderIndex", "type": "integer", "required": true, "description": "This shows the order of the search results priority wise.", "example": 1, "enum": [] }, { "name": "suggestedLocation[].score", "type": "number", "required": true, "description": "This shows the score of the POI.", "example": 1.5075794782130676, "enum": [] }, { "name": "suggestedLocation[].suggester", "type": "string", "required": true, "description": "This shows on which basis the search results has been found.", "example": "alternateName", "enum": [] }, { "name": "suggestedLocation[].richInfo", "type": "array", "required": true, "description": "This shows the rich info associated with the given result.", "example": "", "enum": [] }, { "name": "userAddedLocation", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "userAddedLocation[].eLoc", "type": "string", "required": true, "description": "It is the Six or eight digit unique code offered only by mapmyindia to search for any address through this eLoc.", "example": "MMI000", "enum": [] }, { "name": "userAddedLocation[].entryLatitude", "type": "number", "required": true, "description": "latitude of the entrance of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "userAddedLocation[].entryLongitude", "type": "number", "required": true, "description": "longitude of the entrance of the location. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "userAddedLocation[].latitude", "type": "number", "required": true, "description": "It shows us the latitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "28.612964", "enum": [] }, { "name": "userAddedLocation[].longitude", "type": "number", "required": true, "description": "It shows us the longitude of the location searched. Geometry information is NOT available in most use-case driven response; and is RESTRICTED.", "example": "77.229463", "enum": [] }, { "name": "userAddedLocation[].orderIndex", "type": "integer", "required": true, "description": "This shows the order of the search results priority wise.", "example": 1, "enum": [] }, { "name": "userAddedLocation[].placeAddress", "type": "string", "required": true, "description": "This is the address of the text searched by you.", "example": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "enum": [] }, { "name": "userAddedLocation[].placeName", "type": "string", "required": true, "description": "This shows the name of the POI.", "example": "OYO Hotel", "enum": [] }, { "name": "userAddedLocation[].resultType", "type": "string", "required": true, "description": "It Shows the the category of result falling into. For eg. UAP", "example": "UAP", "enum": [] }, { "name": "userAddedLocation[].type", "type": "string", "required": true, "description": "", "example": "", "enum": [] }, { "name": "userAddedLocation[].userName", "type": "string", "required": true, "description": "It shows the UserID of the person who added the location.", "example": "usr1577100139i799918080", "enum": [] } ], "example": { "suggestedLocation": [ { "type": "POI", "typeX": 7, "placeAddress": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "latitude": "RESTRICTED", "longitude": "RESTRICTED", "eLoc": "2LH9OC", "entryLatitude": "RESTRICTED", "entryLongitude": "RESTRICTED", "placeName": "OYO Hotel", "alternateName": "OyoRooms,OYO 40400 Yippe Rooms,OYO Rooms Hotel", "keywords": [ "FINATM" ], "addressTokens": { "district": "South Delhi", "city": "New Delhi", "state": "Delhi" }, "p": 11663, "orderIndex": 1, "score": 1.5075794782130676, "suggester": "alternateName", "richInfo": "" } ], "userAddedLocation": [ { "eLoc": "2LH9OC", "entryLatitude": "RESTRICTED", "entryLongitude": "RESTRICTED", "latitude": "RESTRICTED", "longitude": "RESTRICTED", "orderIndex": 1, "placeAddress": "Yippee Rooms, Sector 56, Gurugram, Haryana, 122011", "placeName": "OYO Hotel", "resultType": "UAP", "type": "", "userName": "usr1577100139i799918080" } ] } }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://atlas.mapmyindia.com/api/places/textsearch/json?query=Where+is+Lajpat+Nagar' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://atlas.mapmyindia.com/api/places/textsearch/json?query=Where+is+Lajpat+Nagar\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://atlas.mapmyindia.com/api/places/textsearch/json?query=Where+is+Lajpat+Nagar\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://atlas.mapmyindia.com/api/places/textsearch/json?query=Where+is+Lajpat+Nagar\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://atlas.mapmyindia.com/api/places/textsearch/json?query=Where+is+Lajpat+Nagar\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 54, "generationGroup": "core-location-get-api-places-textsearch-json-4b2c3fc489", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Token Generation API - Identity: `api-operation:core-location-post-security-oauth-token-token-generation-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-security-oauth-token-token-generation-api - State model: stateless ```json { "slug": "core-location-post-security-oauth-token-token-generation-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/tokenGeneration.yml", "sourceFingerprint": "9db8784388d7bdb71cf6b3d3fedc21c9e97d85fbd0cee24e236d9c273daf7b13", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/security/oauth/token", "baseUrl": "https://outpost.mapmyindia.com/api", "requestUrl": "https://outpost.mapmyindia.com/api/security/oauth/token", "operationId": "tokenGenerationAPI", "summary": "Token Generation API", "description": "This API is required to generate tokens authorize the oAuth 2 based APIs. Hence, the developer would need to send a request for access token using their clientid and clientsecret to the Token Generation API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: {tokentype} {accesstoken} Authorization: “tokentype accesstoken”.", "tags": [ "Token Generation API" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/x-www-form-urlencoded" ], "fields": [ { "name": "grant_type", "type": "string", "required": true, "description": "The grant type applicable to the token. By default, it is set at \"clientcredentials\".", "example": "client_credentials", "enum": [] }, { "name": "client_id", "type": "string", "required": true, "description": "The client ID provided to thec client for accessing oAuth 2 based APIs.", "example": "YOUR_CLIENT_ID", "enum": [] }, { "name": "client_secret", "type": "string", "required": true, "description": "The client secret provided to thec client for accessing oAuth 2 based APIs.", "example": "YOUR_CLIENT_SECRET", "enum": [] } ], "example": { "grant_type": "client_credentials", "client_id": "this-is-client-id-provided-to-client", "client_secret": "this-is-client-secret-provided-to-client" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "access_token", "type": "string", "required": true, "description": "", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "token_type", "type": "string", "required": true, "description": "", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "expires_in", "type": "integer", "required": true, "description": "", "example": 86499, "enum": [] }, { "name": "scope", "type": "string", "required": true, "description": "", "example": "READ", "enum": [] }, { "name": "project_code", "type": "string", "required": true, "description": "", "example": "prj1234567890987654321", "enum": [] }, { "name": "client_id", "type": "string", "required": true, "description": "", "example": "YOUR_CLIENT_ID", "enum": [] } ], "example": { "access_token": "0XXXXXXf-dXX0-4XX0-8XXa-eXXXXXXXXXX6", "token_type": "bearer", "expires_in": 86499, "scope": "READ", "project_code": "prj1234567890987654321", "client_id": "thisistheplace-whereyour-clientIdisprovidedback" } }, { "status": "400", "description": "Bad request; User made an error while creating a valid request.", "fields": [], "example": null }, { "status": "401", "description": "Unauthorized, if the clientID doesn’t exist or an invalid clientSecret is provided.", "fields": [], "example": null }, { "status": "403", "description": "Forbidden.", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong.", "fields": [], "example": null }, { "status": "503", "description": "Maintenance break.", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://outpost.mapmyindia.com/api/security/oauth/token' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"grant_type\": \"client_credentials\",\n \"client_id\": \"this-is-client-id-provided-to-client\",\n \"client_secret\": \"this-is-client-secret-provided-to-client\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://outpost.mapmyindia.com/api/security/oauth/token\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"grant_type\": \"client_credentials\",\n \"client_id\": \"this-is-client-id-provided-to-client\",\n \"client_secret\": \"this-is-client-secret-provided-to-client\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://outpost.mapmyindia.com/api/security/oauth/token\",\n headers=headers,\n json={\n \"grant_type\": \"client_credentials\",\n \"client_id\": \"this-is-client-id-provided-to-client\",\n \"client_secret\": \"this-is-client-secret-provided-to-client\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://outpost.mapmyindia.com/api/security/oauth/token\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"grant_type\": \"client_credentials\",\n \"client_id\": \"this-is-client-id-provided-to-client\",\n \"client_secret\": \"this-is-client-secret-provided-to-client\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://outpost.mapmyindia.com/api/security/oauth/token\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"grant_type\": \"client_credentials\",\n \"client_id\": \"this-is-client-id-provided-to-client\",\n \"client_secret\": \"this-is-client-secret-provided-to-client\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 15, "generationGroup": "core-location-post-security-oauth-token-fb39dbd5c7", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Traveled Route Image API - Identity: `api-operation:core-location-post-rest-key-still-image-polyline-traveled-route-image-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api - State model: stateless ```json { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "family": "core-location", "familyName": "Core Maps, Search & Routing", "product": "Core Location", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-rest-api", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "specVersion": "3.0.3", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "baseUrl": "https://apis.mapmyindia.com/advancedmaps/v1", "requestUrl": "https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image_polyline", "operationId": "stillImagePolylineAPI", "summary": "Traveled Route Image API", "description": "This API can be used to get an image of map with traveled route plotted on it. The image size can be specified; which will dynamically create an image of varying zoom levels with the start and end locations plotted on it.", "tags": [ "Traveled Route Image API" ], "deprecated": false, "auth": { "mode": "not-declared", "schemes": [] }, "parameters": [ { "name": "REST_KEY", "in": "path", "required": true, "type": "string", "description": "The REST API licence key allocated to you by signing into our services and registering yourself as a developer.", "example": "YOUR_REST_KEY", "enum": [] } ], "request": { "required": false, "contentTypes": [ "multipart/form-data:" ], "fields": [ { "name": "height", "type": "integer", "required": true, "description": "The height of the image resolution that is required.", "example": 400, "enum": [] }, { "name": "width", "type": "integer", "required": true, "description": "The width of the image resolution that is required.", "example": 400, "enum": [] }, { "name": "polyline", "type": "string", "required": true, "description": "An array of comma separated [Longitude,Latitude] points that define the polyline along which the route was traversed.", "example": "[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]", "enum": [] }, { "name": "color", "type": "string", "required": false, "description": "hex color ie. #3edhhs", "example": "#ff00f7", "enum": [] }, { "name": "icon_from", "type": "string", "required": false, "description": "The URL of the custom icon that indicates the origin of the path.", "example": "https://maps.mapmyindia.com/images/from.png", "enum": [] }, { "name": "icon_to", "type": "string", "required": false, "description": "The URL of the custom icon that indicates the destination of the path.", "example": "https://maps.mapmyindia.com/images/to.png", "enum": [] }, { "name": "offset", "type": "string", "required": false, "description": "The offset of the marker pointer from top right corner of the icons.", "example": "10,44", "enum": [] }, { "name": "padding_x", "type": "integer", "required": false, "description": "Padding for path rendering from x axis image (in pixels); Max: 150", "example": 50, "enum": [] }, { "name": "padding_y", "type": "integer", "required": false, "description": "Padding for path rendering from y axis image (in pixels); Max: 150", "example": 100, "enum": [] }, { "name": "markers_icon", "type": "string", "required": false, "description": "The marker icons for the via points to be rendered on the polyline.", "example": "https://img.icons8.com/fluent/48/000000/marker-storm.png", "enum": [] }, { "name": "markers", "type": "string", "required": false, "description": "An Array of comma separated [Longitude,Latitude], Custom Markers to be embedded in the image during the trip.", "example": "[77.187238,28.598438],[77.200596,28.596109]", "enum": [] } ], "example": { "height": 400, "width": 400, "polyline": "[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "https://kunalbharti.github.io/mapmyindia-rest-api-beta/custom/stillImagePolylineResponse.png" }, { "status": "204", "description": "Not found", "fields": [], "example": null }, { "status": "400", "description": "Bad request", "fields": [], "example": null }, { "status": "401", "description": "API access denied", "fields": [], "example": null }, { "status": "403", "description": "Forbidden", "fields": [], "example": null }, { "status": "500", "description": "Something went wrong", "fields": [], "example": null }, { "status": "503", "description": "Internal server error", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image_polyline' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"height\": 400,\n \"width\": 400,\n \"polyline\": \"[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image_polyline\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"height\": 400,\n \"width\": 400,\n \"polyline\": \"[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\\\"Content-Type\\\": \\\"application/json\\\"}\nresponse = requests.request(\n \"POST\",\n \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image_polyline\",\n headers=headers,\n json={\n \"height\": 400,\n \"width\": 400,\n \"polyline\": \"[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image_polyline\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"height\": 400,\n \"width\": 400,\n \"polyline\": \"[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://apis.mapmyindia.com/advancedmaps/v1/YOUR_REST_KEY/still_image_polyline\");\nrequest.Content = new StringContent(\"\"\"\n{\n \"height\": 400,\n \"width\": 400,\n \"polyline\": \"[[77.227437,28.611004],[77.227385,28.611011],[77.226859,28.610907],[77.224885,28.610022],[77.224906,28.609965],[77.224906,28.609843],[77.224885,28.609786],[77.224788,28.609682],[77.224702,28.609644],[77.224595,28.609635],[77.224456,28.609682],[77.224349,28.609795],[77.220347,28.608005],[77.21892,28.607336],[77.218963,28.607148],[77.218942,28.60696],[77.218824,28.606677],[77.21876,28.606602],[77.218578,28.606385],[77.218374,28.606263],[77.218235,28.606216],[77.218063,28.606188],[77.217956,28.606197],[77.217945,28.605199],[77.217902,28.60438],[77.217859,28.603674],[77.217827,28.603033],[77.217773,28.602223],[77.217698,28.600933],[77.217805,28.600924],[77.217902,28.600886],[77.217988,28.600829],[77.218074,28.600707],[77.218106,28.600622],[77.218106,28.6005],[77.218085,28.600434],[77.218021,28.60033],[77.217882,28.600226],[77.217753,28.600188],[77.217571,28.600197],[77.217453,28.600244],[77.217389,28.600291],[77.217292,28.600404],[77.216798,28.600197],[77.215897,28.599801],[77.214384,28.599123],[77.212785,28.598407],[77.211326,28.597729],[77.211347,28.597682],[77.211336,28.597588],[77.211239,28.597484],[77.211196,28.597465],[77.211067,28.597465],[77.210992,28.597493],[77.210938,28.59755],[77.209575,28.596947],[77.20935,28.596853],[77.207998,28.59625],[77.20759,28.596071],[77.207526,28.596005],[77.207462,28.595996],[77.207033,28.596109],[77.20684,28.596156],[77.205295,28.596495],[77.204555,28.596561],[77.203546,28.596533],[77.20243,28.59642],[77.201218,28.59609],[77.200596,28.596109],[77.19992,28.596137],[77.199019,28.596175],[77.198826,28.596053],[77.198826,28.595996],[77.198772,28.595855],[77.198675,28.59577],[77.1986,28.595742],[77.198557,28.595723],[77.198428,28.595723],[77.198299,28.595761],[77.198235,28.595808],[77.197055,28.595516],[77.196529,28.59545],[77.196132,28.595431],[77.19566,28.595459],[77.194533,28.595695],[77.193986,28.595865],[77.193911,28.595799],[77.193772,28.595761],[77.193633,28.595789],[77.193515,28.595883],[77.193472,28.596005],[77.193483,28.596062],[77.193032,28.596241],[77.190908,28.597108],[77.190854,28.597042],[77.190768,28.596995],[77.190661,28.596967],[77.190532,28.596976],[77.190457,28.597004],[77.19035,28.597089],[77.190307,28.597155],[77.190286,28.597287],[77.190318,28.597391],[77.189095,28.5979],[77.188655,28.59807],[77.187775,28.598419],[77.187743,28.598362],[77.187646,28.598296],[77.187549,28.598268],[77.18741,28.598287],[77.187313,28.598334],[77.187238,28.598438],[77.187227,28.598532],[77.187259,28.598626],[77.183686,28.600058],[77.181991,28.600727],[77.181809,28.60084],[77.181498,28.601057],[77.181058,28.601528],[77.180897,28.601726],[77.180715,28.601811],[77.180618,28.60183],[77.180403,28.601811],[77.17933,28.601265],[77.175446,28.599212],[77.17521,28.59909],[77.174877,28.598911],[77.173965,28.598431],[77.173718,28.598309],[77.173471,28.598168],[77.172666,28.597754]]\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 19, "generationGroup": "core-location-post-rest-key-still-image-polyline-3ee8b0af86", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · List layer attributes or a layer bounding box - Identity: `api-operation:geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box` - Canonical: https://developer.mappls.com/api-reference/geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box - State model: stateless ```json { "slug": "geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box", "family": "geoanalytics", "familyName": "Geo-Analytics Listing", "product": "Geo-Analytics", "stateModel": "stateless", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-geoanalytics-api-web", "sourceFile": "mappls-developer-platform/data/contracts/geoanalytics-listing.openapi.yml", "sourceFingerprint": "e358eab2ef038c2d03df69920dd1789bdd188b5196b8cf8d780bfab7693eb6e3", "specVersion": "3.0.3", "apiVersion": "2.0", "sourceGeneration": "v2-0", "method": "GET", "path": "/listingapi", "baseUrl": "https://geoanalytics.mapmyindia.com", "requestUrl": "https://geoanalytics.mapmyindia.com/listingapi?api=district&get_attr=dst_id%2Cdst_nme%2Cstt_nme%2Cstt_id%2Cb_box", "operationId": "listGeoAnalyticsAttributes", "summary": "List layer attributes or a layer bounding box", "description": "Returns documented attribute values or bbox for one Geo-Analytics layer. Supply addr, or supply geoboundtype together with geobound.", "tags": [ "Geo-Analytics Listing" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "legacyOAuthBearer", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "geo_bound_type", "in": "query", "required": false, "type": "string", "description": "Parent type; required with geobound when addr is absent.", "example": "stt_nme", "enum": [] }, { "name": "geo_bound", "in": "query", "required": false, "type": "string", "description": "Parent value; required with geoboundtype when addr is absent.", "example": "Haryana", "enum": [] }, { "name": "addr", "in": "query", "required": false, "type": "string", "description": "Comma-separated address; required when geoboundtype and geobound are absent.", "example": "Jhansi, Uttar Pradesh", "enum": [] }, { "name": "api", "in": "query", "required": true, "type": "string", "description": "Layer name such as state, district, subdistrict, village, or pincode.", "example": "district", "enum": [] }, { "name": "get_attr", "in": "query", "required": true, "type": "string", "description": "Comma-separated documented attributes or bbox.", "example": "dst_id,dst_nme,stt_nme,stt_id,b_box", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Documented successful listing response.", "fields": [ { "name": "responseCode", "type": "integer", "required": true, "description": "", "example": 200, "enum": [] }, { "name": "version", "type": "string", "required": true, "description": "", "example": "1.0.0", "enum": [] }, { "name": "total_feature_count", "type": "integer", "required": true, "description": "", "example": 1, "enum": [] }, { "name": "results", "type": "object", "required": true, "description": "", "example": "example", "enum": [] }, { "name": "results.api_name", "type": "string", "required": false, "description": "", "example": "district", "enum": [] }, { "name": "results.attribute", "type": "string", "required": false, "description": "", "example": "dst_id", "enum": [] }, { "name": "results.get_attr_values", "type": "array", "required": false, "description": "", "example": "example", "enum": [] } ], "example": { "responseCode": 200, "version": "1.0.0", "total_feature_count": 1, "results": { "api_name": "district", "attribute": "dst_id", "get_attr_values": [ "example" ] } } }, { "status": "400", "description": "Client-side request error documented by responseCode class.", "fields": [], "example": null }, { "status": "500", "description": "Server-side error documented by responseCode class.", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://geoanalytics.mapmyindia.com/listingapi?api=district&get_attr=dst_id%2Cdst_nme%2Cstt_nme%2Cstt_id%2Cb_box' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://geoanalytics.mapmyindia.com/listingapi?api=district&get_attr=dst_id%2Cdst_nme%2Cstt_nme%2Cstt_id%2Cb_box\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://geoanalytics.mapmyindia.com/listingapi?api=district&get_attr=dst_id%2Cdst_nme%2Cstt_nme%2Cstt_id%2Cb_box\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://geoanalytics.mapmyindia.com/listingapi?api=district&get_attr=dst_id%2Cdst_nme%2Cstt_nme%2Cstt_id%2Cb_box\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://geoanalytics.mapmyindia.com/listingapi?api=district&get_attr=dst_id%2Cdst_nme%2Cstt_nme%2Cstt_id%2Cb_box\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "request-response", "evidenceScore": 15, "generationGroup": "geoanalytics-get-listingapi-7abab2b643", "generationCount": 1, "preferredGeneration": "v2-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will get all the alarm configurations for a user. - Identity: `api-operation:intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0 - State model: stateful ```json { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/alarm", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm", "operationId": null, "summary": "This API will get all the alarm configurations for a user.", "description": "Based on the passed token key, the API will return the list of all alarm configs.", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "string", "description": "This is the alarm's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all alarm configurations in the account. You can pass single value or comma separated alarm IDs for multiple values.", "example": "23889,89876", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "This is device ID. API will return data based on the configs set for the passed device IDs. You can pass a single device ID or comma seperated multiple device IDs.", "example": "24567,10018", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "This is alarm type. API will return data based on the passed alarm types. You can pass a single alarm type or comma seperated multiple alarm types.", "example": "177,90", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "This is alarm ID", "example": 2345598, "enum": [] }, { "name": "data[].deviceId", "type": "array", "required": false, "description": "Device ID(s) on which the alarm config got created.", "example": [ 67700, 8987 ], "enum": [] }, { "name": "data[].alarmType", "type": "integer", "required": false, "description": "Type of alarm, for eg - ignition, overspeed etc.", "example": 28, "enum": [] }, { "name": "data[].limit", "type": "integer", "required": false, "description": "", "example": 28, "enum": [] }, { "name": "data[].duration", "type": "integer", "required": false, "description": "Type of alarm, for eg - ignition, overspeed etc.", "example": 28, "enum": [] }, { "name": "data[].type", "type": "integer", "required": false, "description": "Values depends on the type of alarm configured.", "example": 0, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "Time at which the alarm got configured.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "integer", "required": false, "description": "Time at which the alarm got updated.", "example": "1700000000000", "enum": [] }, { "name": "data[].geofenceId", "type": "array", "required": false, "description": "If returned alarm type is geofence, then this will return the list of geofences for which alarms were configured.", "example": [ 1001, 2002 ], "enum": [] }, { "name": "data[].severity", "type": "integer", "required": false, "description": "", "example": 0, "enum": [] } ], "example": { "data": [ { "id": 2345598, "deviceId": [ 67700, 8987 ], "alarmType": 28, "limit": 28, "duration": 28, "type": 0, "creationTime": 1567654565, "updationTime": 1567654565 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/alarm\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/alarm\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 22, "generationGroup": "intouch-get-alarm-10c842d182", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" ] } ``` ## api-operation · This API will get all the alarm configurations for a user. - Identity: `api-operation:intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user - State model: stateful ```json { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/alarm", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm", "operationId": null, "summary": "This API will get all the alarm configurations for a user.", "description": "Based on the passed token key, the API will return the list of all alarm configs.", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "string", "description": "This is the alarm's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all alarm configurations in the account. You can pass single value or comma separated alarm IDs for multiple values.", "example": "23889,89876", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "This is device ID. API will return data based on the configs set for the passed device IDs. You can pass a single device ID or comma seperated multiple device IDs.", "example": "24567,10018", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "This is alarm type. API will return data based on the passed alarm types. You can pass a single alarm type or comma seperated multiple alarm types.", "example": "177,90", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "This is alarm ID", "example": 2345598, "enum": [] }, { "name": "data[].deviceId", "type": "array", "required": false, "description": "Device ID(s) on which the alarm config got created.", "example": [ 67700, 8987 ], "enum": [] }, { "name": "data[].alarmType", "type": "integer", "required": false, "description": "Type of alarm, for eg - ignition, overspeed etc.", "example": 28, "enum": [] }, { "name": "data[].limit", "type": "integer", "required": false, "description": "", "example": 28, "enum": [] }, { "name": "data[].duration", "type": "integer", "required": false, "description": "Type of alarm, for eg - ignition, overspeed etc.", "example": 28, "enum": [] }, { "name": "data[].type", "type": "integer", "required": false, "description": "Values depends on the type of alarm configured.", "example": 0, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "Time at which the alarm got configured.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "integer", "required": false, "description": "Time at which the alarm got updated.", "example": "1700000000000", "enum": [] }, { "name": "data[].geofenceId", "type": "array", "required": false, "description": "If returned alarm type is geofence, then this will return the list of geofences for which alarms were configured.", "example": [ 1001, 2002 ], "enum": [] }, { "name": "data[].severity", "type": "integer", "required": false, "description": "", "example": 0, "enum": [] } ], "example": { "data": [ { "id": 2345598, "deviceId": [ 67700, 8987 ], "alarmType": 28, "limit": 28, "duration": 28, "type": 0, "creationTime": 1567654565, "updationTime": 1567654565 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/alarm\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/alarm\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 22, "generationGroup": "intouch-get-alarm-10c842d182", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0" ] } ``` ## api-operation · This API will create an alarm. - Identity: `api-operation:intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0 - State model: stateful ```json { "slug": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/alarm", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm", "operationId": "createAlarm", "summary": "This API will create an alarm.", "description": "Based on the input parameters provided to this POST alarm API, a new alarm will get created for a single or multiple devices", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 26, "enum": [] }, { "name": "deviceId", "type": "array", "required": false, "description": "Device IDs of those devices for which the alarm configuration is done.", "example": [ 1009, 9090 ], "enum": [] }, { "name": "type", "type": "integer", "required": false, "description": "For Geofence(alarmType = 26), value of type are as follows: 2 - entry, 3 - Exit, 1 - Entry & Exit, 4 - long stay in geofence For ignition(alarmType = 21), types values are as follows: 1 - Both ON & OFF, 2 - Ignition On, 3 - Ignition Off, 5 - Day's First Ignition ON For mileage(alarmType = 133), value of type are as follows: 0 - Daily, 1 - Monthly For DIstance Covered(alarmType = 151), value of type are as follows: 1 - At Least, 2 - At Most", "example": 1, "enum": [] }, { "name": "duration", "type": "integer", "required": false, "description": "Only required in case of overspeed, stoppage, idle, towing, GPRS connectivity, vehicle battery, GPS connectivity, distance covered, internal battery alarm", "example": 11, "enum": [] }, { "name": "limit", "type": "integer", "required": false, "description": "Only required in case of overspeed, vehicle battery, mileage, distance covered, internal battery alarm", "example": 55, "enum": [] }, { "name": "geofenceId", "type": "array", "required": false, "description": "Only required when alarmType is 26 (Geofence). You can pass a single geofence ID or multiple geofence IDs separated by comma", "example": [ 23434, 45454 ], "enum": [] }, { "name": "severity", "type": "integer", "required": false, "description": "This basically defines the severity of the alarm. You can pass 0 for normal severity & 1 for high severity.", "example": 0, "enum": [] } ], "example": { "alarmType": 26, "deviceId": [ 1009, 9090 ], "type": 1, "duration": 11, "limit": 55, "geofenceId": [ 23434, 45454 ], "severity": 0 } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/alarm\",\n headers=headers,\n json={\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/alarm\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 15, "generationGroup": "intouch-post-alarm-8579e8cb93", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-post-alarm-this-api-will-create-an-alarm" ] } ``` ## api-operation · This API will create an alarm. - Identity: `api-operation:intouch-post-alarm-this-api-will-create-an-alarm` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-this-api-will-create-an-alarm - State model: stateful ```json { "slug": "intouch-post-alarm-this-api-will-create-an-alarm", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/alarm", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm", "operationId": "createAlarm", "summary": "This API will create an alarm.", "description": "Based on the input parameters provided to this POST alarm API, a new alarm will get created for a single or multiple devices", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 26, "enum": [] }, { "name": "deviceId", "type": "array", "required": false, "description": "Device IDs of those devices for which the alarm configuration is done.", "example": [ 1009, 9090 ], "enum": [] }, { "name": "type", "type": "integer", "required": false, "description": "For Geofence(alarmType = 26), value of type are as follows: 2 - entry, 3 - Exit, 1 - Entry & Exit, 4 - long stay in geofence For ignition(alarmType = 21), types values are as follows: 1 - Both ON & OFF, 2 - Ignition On, 3 - Ignition Off, 5 - Day's First Ignition ON For mileage(alarmType = 133), value of type are as follows: 0 - Daily, 1 - Monthly For DIstance Covered(alarmType = 151), value of type are as follows: 1 - At Least, 2 - At Most", "example": 1, "enum": [] }, { "name": "duration", "type": "integer", "required": false, "description": "Only required in case of overspeed, stoppage, idle, towing, GPRS connectivity, vehicle battery, GPS connectivity, distance covered, internal battery alarm", "example": 11, "enum": [] }, { "name": "limit", "type": "integer", "required": false, "description": "Only required in case of overspeed, vehicle battery, mileage, distance covered, internal battery alarm", "example": 55, "enum": [] }, { "name": "geofenceId", "type": "array", "required": false, "description": "Only required when alarmType is 26 (Geofence). You can pass a single geofence ID or multiple geofence IDs separated by comma", "example": [ 23434, 45454 ], "enum": [] }, { "name": "severity", "type": "integer", "required": false, "description": "This basically defines the severity of the alarm. You can pass 0 for normal severity & 1 for high severity.", "example": 0, "enum": [] } ], "example": { "alarmType": 26, "deviceId": [ 1009, 9090 ], "type": 1, "duration": 11, "limit": 55, "geofenceId": [ 23434, 45454 ], "severity": 0 } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/alarm\",\n headers=headers,\n json={\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/alarm\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 15, "generationGroup": "intouch-post-alarm-8579e8cb93", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0" ] } ``` ## api-operation · Gets The List Of Alarm Config(s) - Identity: `api-operation:intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0 - State model: stateful ```json { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/alarm/alarmLog/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000", "operationId": null, "summary": "Gets The List Of Alarm Config(s)", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "Not Mandatory field. This is the ID of the device for which the alarm log need to be fetched. You can pass single device ID or multiple device IDs separated by comma", "example": "1909,2545", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "Not Mandatory field. This is the type of alarm for which the alarm log need to be fetched. You can pass single alarm type or multiple device IDs separated by comma. Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": "21,26", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "Mandatory field. This is start timestamp in seconds", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "Mandatory field. This is end timestamp in seconds", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data[].timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data[].alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data[].limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data[].duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data[].actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data[].actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data[].severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data[].data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data[].geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] } ], "example": { "data": [ { "deviceId": 8989, "timestamp": 1577589789, "latitude": 28.550962381896, "longitude": 77.26890675033, "address": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "alarmType": 28, "limit": 44, "duration": 20 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 26, "generationGroup": "intouch-get-alarm-alarmlog-0de27f90fb", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" ] } ``` ## api-operation · Gets The List Of Alarm Config(s) - Identity: `api-operation:intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s - State model: stateful ```json { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/alarm/alarmLog/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000", "operationId": null, "summary": "Gets The List Of Alarm Config(s)", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "Not Mandatory field. This is the ID of the device for which the alarm log need to be fetched. You can pass single device ID or multiple device IDs separated by comma", "example": "1909,2545", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "Not Mandatory field. This is the type of alarm for which the alarm log need to be fetched. You can pass single alarm type or multiple device IDs separated by comma. Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": "21,26", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "Mandatory field. This is start timestamp in seconds", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "Mandatory field. This is end timestamp in seconds", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data[].timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data[].alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data[].limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data[].duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data[].actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data[].actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data[].severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data[].data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data[].geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] } ], "example": { "data": [ { "deviceId": 8989, "timestamp": 1577589789, "latitude": 28.550962381896, "longitude": 77.26890675033, "address": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "alarmType": 28, "limit": 44, "duration": 20 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/alarm/alarmLog/?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 26, "generationGroup": "intouch-get-alarm-alarmlog-0de27f90fb", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0" ] } ``` ## api-operation · Deletes An Alarm Config - Identity: `api-operation:intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0 - State model: stateful ```json { "slug": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "DELETE", "path": "/alarm/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm/1", "operationId": null, "summary": "Deletes An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "id of the alarm config which you want to delete", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "204", "description": "No Content Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/alarm/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/alarm/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 9, "generationGroup": "intouch-delete-alarm-id-ca6df54f47", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-delete-alarm-id-deletes-an-alarm-config" ] } ``` ## api-operation · Deletes An Alarm Config - Identity: `api-operation:intouch-delete-alarm-id-deletes-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config - State model: stateful ```json { "slug": "intouch-delete-alarm-id-deletes-an-alarm-config", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "DELETE", "path": "/alarm/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm/1", "operationId": null, "summary": "Deletes An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "id of the alarm config which you want to delete", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "204", "description": "No Content Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/alarm/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/alarm/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 9, "generationGroup": "intouch-delete-alarm-id-ca6df54f47", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0" ] } ``` ## api-operation · Updates An Alarm Config - Identity: `api-operation:intouch-post-alarm-id-updates-an-alarm-config-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-id-updates-an-alarm-config-v1-0-0 - State model: stateful ```json { "slug": "intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/alarm/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm/1", "operationId": null, "summary": "Updates An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "Mandatory field. This is the ID of the alarm config which needs to be updated.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "deviceId", "type": "array", "required": false, "description": "ID of the device for which the alarm config has to be updated. If there are multiple devices then you can pass them separated by comma.", "example": [ 6678, 9876 ], "enum": [] }, { "name": "type", "type": "integer", "required": false, "description": "For Geofence(alarmType = 26), value of type are as follows: 2 - entry, 3 - Exit, 1 - Entry & Exit, 4 - long stay in geofence For ignition(alarmType = 21), types values are as follows: 1 - Both ON & OFF, 2 - Ignition On, 3 - Ignition Off, 5 - Day's First Ignition ON For mileage(alarmType = 133), value of type are as follows: 0 - Daily, 1 - Monthly For DIstance Covered(alarmType = 151), value of type are as follows: 1 - At Least, 2 - At Most", "example": 1, "enum": [] }, { "name": "duration", "type": "integer", "required": false, "description": "Only required in case of overspeed, stoppage, idle, towing, GPRS connectivity, vehicle battery, GPS connectivity, distance covered, internal battery alarm", "example": 11, "enum": [] }, { "name": "limit", "type": "integer", "required": false, "description": "Only required in case of overspeed, vehicle battery, mileage, distance covered, internal battery alarm", "example": 55, "enum": [] }, { "name": "geofenceId", "type": "array", "required": false, "description": "Only required when alarmType is 26 (Geofence). You can pass a single geofence ID or multiple geofence IDs separated by comma", "example": [ 23434, 45454 ], "enum": [] }, { "name": "severity", "type": "integer", "required": false, "description": "This basically defines the severity of the alarm. You can pass 0 for normal severity & 1 for high severity.", "example": 0, "enum": [] } ], "example": { "deviceId": [ 6678, 9876 ], "type": 1, "duration": 11, "limit": 55, "geofenceId": [ 23434, 45454 ], "severity": 0 } }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "ID Not Found", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm/1\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/alarm/1\",\n headers=headers,\n json={\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/alarm/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 15, "generationGroup": "intouch-post-alarm-id-352bd7eab8", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-post-alarm-id-updates-an-alarm-config" ] } ``` ## api-operation · Updates An Alarm Config - Identity: `api-operation:intouch-post-alarm-id-updates-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-id-updates-an-alarm-config - State model: stateful ```json { "slug": "intouch-post-alarm-id-updates-an-alarm-config", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/alarm/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarm/1", "operationId": null, "summary": "Updates An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "Mandatory field. This is the ID of the alarm config which needs to be updated.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "deviceId", "type": "array", "required": false, "description": "ID of the device for which the alarm config has to be updated. If there are multiple devices then you can pass them separated by comma.", "example": [ 6678, 9876 ], "enum": [] }, { "name": "type", "type": "integer", "required": false, "description": "For Geofence(alarmType = 26), value of type are as follows: 2 - entry, 3 - Exit, 1 - Entry & Exit, 4 - long stay in geofence For ignition(alarmType = 21), types values are as follows: 1 - Both ON & OFF, 2 - Ignition On, 3 - Ignition Off, 5 - Day's First Ignition ON For mileage(alarmType = 133), value of type are as follows: 0 - Daily, 1 - Monthly For DIstance Covered(alarmType = 151), value of type are as follows: 1 - At Least, 2 - At Most", "example": 1, "enum": [] }, { "name": "duration", "type": "integer", "required": false, "description": "Only required in case of overspeed, stoppage, idle, towing, GPRS connectivity, vehicle battery, GPS connectivity, distance covered, internal battery alarm", "example": 11, "enum": [] }, { "name": "limit", "type": "integer", "required": false, "description": "Only required in case of overspeed, vehicle battery, mileage, distance covered, internal battery alarm", "example": 55, "enum": [] }, { "name": "geofenceId", "type": "array", "required": false, "description": "Only required when alarmType is 26 (Geofence). You can pass a single geofence ID or multiple geofence IDs separated by comma", "example": [ 23434, 45454 ], "enum": [] }, { "name": "severity", "type": "integer", "required": false, "description": "This basically defines the severity of the alarm. You can pass 0 for normal severity & 1 for high severity.", "example": 0, "enum": [] } ], "example": { "deviceId": [ 6678, 9876 ], "type": 1, "duration": 11, "limit": 55, "geofenceId": [ 23434, 45454 ], "severity": 0 } }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "ID Not Found", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarm/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarm/1\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/alarm/1\",\n headers=headers,\n json={\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarm/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/alarm/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 15, "generationGroup": "intouch-post-alarm-id-352bd7eab8", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-post-alarm-id-updates-an-alarm-config-v1-0-0" ] } ``` ## api-operation · This API will get all the alarm configurations for a user. - Identity: `api-operation:intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user - State model: stateful ```json { "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/alarms", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarms", "operationId": null, "summary": "This API will get all the alarm configurations for a user.", "description": "Based on the passed token key, the API will return the list of all alarm configs.", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "string", "description": "This is the alarm's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all alarm configurations in the account. You can pass single value or comma separated alarm IDs for multiple values.", "example": "23889,89876", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "This is device ID. API will return data based on the configs set for the passed device IDs. You can pass a single device ID or comma seperated multiple device IDs.", "example": "24567,10018", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "This is alarm type. API will return data based on the passed alarm types. You can pass a single alarm type or comma seperated multiple alarm types.", "example": "177,90", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "This is alarm ID", "example": 2345598, "enum": [] }, { "name": "data[].deviceId", "type": "array", "required": false, "description": "Device ID(s) on which the alarm config got created.", "example": [ 67700, 8987 ], "enum": [] }, { "name": "data[].alarmType", "type": "integer", "required": false, "description": "Type of alarm, for eg - ignition, overspeed etc.", "example": 28, "enum": [] }, { "name": "data[].limit", "type": "integer", "required": false, "description": "", "example": 28, "enum": [] }, { "name": "data[].duration", "type": "integer", "required": false, "description": "Type of alarm, for eg - ignition, overspeed etc.", "example": 28, "enum": [] }, { "name": "data[].type", "type": "integer", "required": false, "description": "Values depends on the type of alarm configured.", "example": 0, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "Time at which the alarm got configured.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "integer", "required": false, "description": "Time at which the alarm got updated.", "example": "1700000000000", "enum": [] }, { "name": "data[].geofenceId", "type": "array", "required": false, "description": "If returned alarm type is geofence, then this will return the list of geofences for which alarms were configured.", "example": [ 1001, 2002 ], "enum": [] }, { "name": "data[].severity", "type": "integer", "required": false, "description": "", "example": 0, "enum": [] } ], "example": { "data": [ { "id": 2345598, "deviceId": [ 67700, 8987 ], "alarmType": 28, "limit": 28, "duration": 28, "type": 0, "creationTime": 1567654565, "updationTime": 1567654565 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarms' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarms\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/alarms\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarms\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/alarms\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 22, "generationGroup": "intouch-get-alarms-d6d42c52d5", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will create an alarm. - Identity: `api-operation:intouch-post-alarms-this-api-will-create-an-alarm` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarms-this-api-will-create-an-alarm - State model: stateful ```json { "slug": "intouch-post-alarms-this-api-will-create-an-alarm", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/alarms", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarms", "operationId": "createAlarm", "summary": "This API will create an alarm.", "description": "Based on the input parameters provided to this POST alarm API, a new alarm will get created for a single or multiple devices", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 26, "enum": [] }, { "name": "deviceId", "type": "array", "required": false, "description": "Device IDs of those devices for which the alarm configuration is done.", "example": [ 1009, 9090 ], "enum": [] }, { "name": "type", "type": "integer", "required": false, "description": "For Geofence(alarmType = 26), value of type are as follows: 2 - entry, 3 - Exit, 1 - Entry & Exit, 4 - long stay in geofence For ignition(alarmType = 21), types values are as follows: 1 - Both ON & OFF, 2 - Ignition On, 3 - Ignition Off, 5 - Day's First Ignition ON For mileage(alarmType = 133), value of type are as follows: 0 - Daily, 1 - Monthly For DIstance Covered(alarmType = 151), value of type are as follows: 1 - At Least, 2 - At Most", "example": 1, "enum": [] }, { "name": "duration", "type": "integer", "required": false, "description": "Only required in case of overspeed, stoppage, idle, towing, GPRS connectivity, vehicle battery, GPS connectivity, distance covered, internal battery alarm", "example": 11, "enum": [] }, { "name": "limit", "type": "integer", "required": false, "description": "Only required in case of overspeed, vehicle battery, mileage, distance covered, internal battery alarm", "example": 55, "enum": [] }, { "name": "geofenceId", "type": "array", "required": false, "description": "Only required when alarmType is 26 (Geofence). You can pass a single geofence ID or multiple geofence IDs separated by comma", "example": [ 23434, 45454 ], "enum": [] }, { "name": "severity", "type": "integer", "required": false, "description": "This basically defines the severity of the alarm. You can pass 0 for normal severity & 1 for high severity.", "example": 0, "enum": [] } ], "example": { "alarmType": 26, "deviceId": [ 1009, 9090 ], "type": 1, "duration": 11, "limit": 55, "geofenceId": [ 23434, 45454 ], "severity": 0 } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarms' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarms\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/alarms\",\n headers=headers,\n json={\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarms\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/alarms\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"alarmType\": 26,\n \"deviceId\": [\n 1009,\n 9090\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 15, "generationGroup": "intouch-post-alarms-eb4b359c3a", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets The List Of Alarm Config(s) - Identity: `api-operation:intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s - State model: stateful ```json { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/alarms/alarmlogs/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarms/alarmlogs/?startTime=1700000000000&endTime=1700000000000", "operationId": null, "summary": "Gets The List Of Alarm Config(s)", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "Not Mandatory field. This is the ID of the device for which the alarm log need to be fetched. You can pass single device ID or multiple device IDs separated by comma", "example": "1909,2545", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "Not Mandatory field. This is the type of alarm for which the alarm log need to be fetched. You can pass single alarm type or multiple device IDs separated by comma. Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": "21,26", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "Mandatory field. This is start timestamp in seconds", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "Mandatory field. This is end timestamp in seconds", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data[].timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data[].alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data[].limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data[].duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data[].actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data[].actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data[].severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data[].data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data[].geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] } ], "example": { "data": [ { "deviceId": 8989, "timestamp": 1577589789, "latitude": 28.550962381896, "longitude": 77.26890675033, "address": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "alarmType": 28, "limit": 44, "duration": 20 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarms/alarmlogs/?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarms/alarmlogs/?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/alarms/alarmlogs/?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarms/alarmlogs/?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/alarms/alarmlogs/?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 26, "generationGroup": "intouch-get-alarms-alarmlogs-d3d6a2888f", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Deletes An Alarm Config - Identity: `api-operation:intouch-delete-alarms-id-deletes-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-alarms-id-deletes-an-alarm-config - State model: stateful ```json { "slug": "intouch-delete-alarms-id-deletes-an-alarm-config", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "DELETE", "path": "/alarms/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarms/1", "operationId": null, "summary": "Deletes An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "id of the alarm config which you want to delete", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "204", "description": "No Content Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarms/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarms/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/alarms/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarms/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/alarms/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 9, "generationGroup": "intouch-delete-alarms-id-4c98701b68", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Updates An Alarm Config - Identity: `api-operation:intouch-post-alarms-id-updates-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarms-id-updates-an-alarm-config - State model: stateful ```json { "slug": "intouch-post-alarms-id-updates-an-alarm-config", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/alarms/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/alarms/1", "operationId": null, "summary": "Updates An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "alarm" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "Mandatory field. This is the ID of the alarm config which needs to be updated.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "deviceId", "type": "array", "required": false, "description": "ID of the device for which the alarm config has to be updated. If there are multiple devices then you can pass them separated by comma.", "example": [ 6678, 9876 ], "enum": [] }, { "name": "type", "type": "integer", "required": false, "description": "For Geofence(alarmType = 26), value of type are as follows: 2 - entry, 3 - Exit, 1 - Entry & Exit, 4 - long stay in geofence For ignition(alarmType = 21), types values are as follows: 1 - Both ON & OFF, 2 - Ignition On, 3 - Ignition Off, 5 - Day's First Ignition ON For mileage(alarmType = 133), value of type are as follows: 0 - Daily, 1 - Monthly For DIstance Covered(alarmType = 151), value of type are as follows: 1 - At Least, 2 - At Most", "example": 1, "enum": [] }, { "name": "duration", "type": "integer", "required": false, "description": "Only required in case of overspeed, stoppage, idle, towing, GPRS connectivity, vehicle battery, GPS connectivity, distance covered, internal battery alarm", "example": 11, "enum": [] }, { "name": "limit", "type": "integer", "required": false, "description": "Only required in case of overspeed, vehicle battery, mileage, distance covered, internal battery alarm", "example": 55, "enum": [] }, { "name": "geofenceId", "type": "array", "required": false, "description": "Only required when alarmType is 26 (Geofence). You can pass a single geofence ID or multiple geofence IDs separated by comma", "example": [ 23434, 45454 ], "enum": [] }, { "name": "severity", "type": "integer", "required": false, "description": "This basically defines the severity of the alarm. You can pass 0 for normal severity & 1 for high severity.", "example": 0, "enum": [] } ], "example": { "deviceId": [ 6678, 9876 ], "type": 1, "duration": 11, "limit": 55, "geofenceId": [ 23434, 45454 ], "severity": 0 } }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "ID Not Found", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/alarms/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/alarms/1\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/alarms/1\",\n headers=headers,\n json={\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/alarms/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/alarms/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"deviceId\": [\n 6678,\n 9876\n ],\n \"type\": 1,\n \"duration\": 11,\n \"limit\": 55,\n \"geofenceId\": [\n 23434,\n 45454\n ],\n \"severity\": 0\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 15, "generationGroup": "intouch-post-alarms-id-09fd24c730", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the basic info of devices. - Identity: `api-operation:intouch-get-devices-info-gets-the-basic-info-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-info-gets-the-basic-info-of-devices - State model: stateful ```json { "slug": "intouch-get-devices-info-gets-the-basic-info-of-devices", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/devices/info", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/devices/info", "operationId": null, "summary": "Gets the basic info of devices.", "description": "This API returns the basic info of devices such as their registration number, tyre size, manufacturer etc.", "tags": [ "device basic info" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "integer", "description": "id of the device, a non-mandatory parameter. If not passed then by default the API will return the basic info of all active devices in the account.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "integer", "required": false, "description": "id of the device.", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the device.", "example": "my vehicle 1878", "enum": [] }, { "name": "data[].type", "type": "integer", "required": false, "description": "0 - car, 1 - person, 2 - asset, 3 - bike, 4 - bus, 5 - truck, 6 - tracktor.", "example": 2, "enum": [] }, { "name": "data[].creationOn", "type": "number", "required": false, "description": "the date when the device was created.", "example": 1585541181, "enum": [] }, { "name": "data[].updationOn", "type": "number", "required": false, "description": "date when device got updated", "example": 1585541181, "enum": [] }, { "name": "data[].expiryDate", "type": "number", "required": false, "description": "date when device will get expired", "example": 1585541181, "enum": [] }, { "name": "data[].active", "type": "boolean", "required": false, "description": "whether device is active or not", "example": true, "enum": [] }, { "name": "data[].registrationNumber", "type": "string", "required": false, "description": "device's registraion number", "example": "DL03555", "enum": [] }, { "name": "data[].manufacturer", "type": "string", "required": false, "description": "device manufactured by", "example": "BMW", "enum": [] }, { "name": "data[].model", "type": "string", "required": false, "description": "device's model type", "example": "X3", "enum": [] }, { "name": "data[].color", "type": "string", "required": false, "description": "color of the device", "example": "example", "enum": [] }, { "name": "data[].geofenceIds", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].tag", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].chasisNo", "type": "string", "required": false, "description": "chasis number of the device.", "example": "EXASDSSSSADC", "enum": [] }, { "name": "data[].initialOdometer", "type": "number", "required": false, "description": "initial odometer reading.", "example": 0, "enum": [] } ], "example": { "data": [ { "id": "1", "name": "my vehicle 1878", "type": 2, "creationOn": 1585541181, "updationOn": 1585541181, "expiryDate": 1585541181, "active": true, "registrationNumber": "DL03555" } ] } }, { "status": "204", "description": "No content found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or device id is missing or invalid data type. For example, input attribute id is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/devices/info' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/devices/info\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/devices/info\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/devices/info\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/devices/info\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 25, "generationGroup": "intouch-get-devices-info-0d671e8445", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the hardware info of devices. - Identity: `api-operation:intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices - State model: stateful ```json { "slug": "intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/devices/hardwareinfo", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/devices/hardwareinfo", "operationId": null, "summary": "Gets the hardware info of devices.", "description": "This API returns the hardware related info of devices such as their IMEI number, GSM number etc.", "tags": [ "device hardware info" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "integer", "description": "This is the physical device's ID, a non-mandatory parameter. If not passed then by default the API will return the hardware info of all active devices in the account.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "integer", "required": false, "description": "id of the physical hardware device", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the physical hardware device", "example": "MMI314295", "enum": [] }, { "name": "data[].deviceType", "type": "integer", "required": false, "description": "type of device for eg; drivate, vt etc", "example": "868728030749458", "enum": [] }, { "name": "data[].deviceTypeName", "type": "string", "required": false, "description": "name of the type of device", "example": "drive mate pro", "enum": [] }, { "name": "data[].trackingCode", "type": "string", "required": false, "description": "tracking code/unique code number of the device", "example": "868728030749458", "enum": [] }, { "name": "data[].deviceCode", "type": "string", "required": false, "description": "another unique number, genrally same as tracking code", "example": "868728030749458", "enum": [] }, { "name": "data[].active", "type": "boolean", "required": false, "description": "true means device is active. false means device is not active", "example": true, "enum": [] }, { "name": "data[].mappedDeviceIds", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].odometerType", "type": "integer", "required": false, "description": "0 - odometer not suported, 1- GPS based odometer(comes from the device), 2 - CAN based Odometer(comes from vehicle's CAN bus)", "example": 2, "enum": [] }, { "name": "data[].installDate", "type": "number", "required": false, "description": "timstamp when the device got installed", "example": 1581273000, "enum": [] }, { "name": "data[].expiryDate", "type": "number", "required": false, "description": "timestamp when the device will get expired", "example": 1600713000, "enum": [] } ], "example": { "data": [ { "id": "1", "name": "MMI314295", "deviceType": "868728030749458", "deviceTypeName": "drive mate pro", "trackingCode": "868728030749458", "deviceCode": "868728030749458", "active": true, "mappedDeviceIds": [ 887876 ] } ] } }, { "status": "204", "description": "No content found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or device id is missing or invalid data type. For example, input attribute id is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/devices/hardwareinfo' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/devices/hardwareinfo\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/devices/hardwareinfo\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/devices/hardwareinfo\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/devices/hardwareinfo\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 21, "generationGroup": "intouch-get-devices-hardwareinfo-63c589c536", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the live data of devices. - Identity: `api-operation:intouch-get-devices-gets-the-live-data-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-gets-the-live-data-of-devices - State model: stateful ```json { "slug": "intouch-get-devices-gets-the-live-data-of-devices", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/devices", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/devices", "operationId": "getDeviceById", "summary": "Gets the live data of devices.", "description": "This API returns accurate live location and related data of vehicles, assets & people with help of connected devices/sensors/mobiles to provide location awareness to users of your app. The API provides real-time visibility of your tracked objects, giving not just location information, but multiple additional fields which add value to your application. The API is capable of being used for multiple use cases: be it for transport - logistics or for personnel information services for all kinds of web or mobile development platforms.", "tags": [ "device live data" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "integer", "description": "This is the device's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all active devices in the account.", "example": "1", "enum": [] }, { "name": "includeInActive", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory boolean field. If this field is not sent then by default API response will send all active devices. If \"true\" then API reponse will have inactive devices along with active devices. If \"false\" then API will return only active devices", "example": "true", "enum": [] }, { "name": "ignoreBeacon", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory field. If set to true then API will return all devices except those whose device type is beacon(mobile).", "example": "true", "enum": [] }, { "name": "state", "in": "query", "required": false, "type": "number", "description": "Non mandatory field. Input timestamp in this field to fetch only those live locations of devices which have come after the input timestamp. If \"state\" is sent then by default only active devices will be fetched irrespective of the status of \"includeInActive\" attribute.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "integer", "required": false, "description": "", "example": "1", "enum": [] }, { "name": "data[].active", "type": "string", "required": false, "description": "device active status", "example": true, "enum": [ true, false ] }, { "name": "data[].status", "type": "number", "required": false, "description": "device movement status 1 -> moving 2 -> idle i,e ignition is on and speed stopped i,e engine is off 4 -> towing i,e ignition is off, but vehicle speed 5 -> no data i,e no communication of device with intouch server or no GPRS signal 6 -> power off 7 -> no gps i,e satellite count is less than 4 8 -> on trip i,e device is currently on an active trip 9 -> free vehicle i,e device is not on any active trip", "example": 1, "enum": [] }, { "name": "data[].vehicleBattery", "type": "number", "required": false, "description": "", "example": 13568.98, "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.gpsTime", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].location.gprsTime", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].location.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].location.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].location.address", "type": "string", "required": false, "description": "", "example": "244, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 2 m from Usha Exim Pvt Ltd pin-110020", "enum": [] }, { "name": "data[].location.altitude", "type": "number", "required": false, "description": "", "example": 234, "enum": [] }, { "name": "data[].location.heading", "type": "number", "required": false, "description": "", "example": 196.868, "enum": [] }, { "name": "data[].location.speedKph", "type": "number", "required": false, "description": "", "example": 27.85, "enum": [] }, { "name": "data[].location.odometer", "type": "number", "required": false, "description": "", "example": 12548.22, "enum": [] }, { "name": "data[].deviceDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceDetails.name", "type": "string", "required": false, "description": "", "example": "DL3CCM8097", "enum": [] }, { "name": "data[].deviceDetails.registrationNumber", "type": "string", "required": false, "description": "", "example": "DL3CCM8097", "enum": [] }, { "name": "data[].deviceDetails.deviceType", "type": "string", "required": false, "description": "", "example": "car", "enum": [ "car", "truck", "bus", "bike", "tracktor", "JCB", "excavator" ] }, { "name": "data[].alerts", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].alerts.deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data[].alerts.timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data[].alerts.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].alerts.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].alerts.address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data[].alerts.alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data[].alerts.limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data[].alerts.duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data[].alerts.actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data[].alerts.actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data[].alerts.severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data[].alerts.data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data[].alerts.geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] }, { "name": "data[].canInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].canInfo.calcEngineVal", "type": "integer", "required": false, "description": "", "example": 0, "enum": [] }, { "name": "data[].canInfo.greenDriveType", "type": "string", "required": false, "description": "HA(Harsh acceleration), HB(Harsh Breaking), HC(Harsh Cornering)", "example": "HA", "enum": [] }, { "name": "data[].canInfo.canTimestamp", "type": "number", "required": false, "description": "Exact time at which the CAN data got generated by the device", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.coolantTemp", "type": "number", "required": false, "description": "", "example": 87, "enum": [] }, { "name": "data[].canInfo.engineRPM", "type": "integer", "required": false, "description": "", "example": 796, "enum": [] }, { "name": "data[].canInfo.accelPedal", "type": "number", "required": false, "description": "This is accelerator pedal value in percentage.", "example": 8.4, "enum": [] }, { "name": "data[].canInfo.parkBrake", "type": "number", "required": false, "description": "This is parking break. 0 means parking break is disengaged & 1 means parking break is engaged", "example": 0, "enum": [] }, { "name": "data[].canInfo.breakPedal", "type": "number", "required": false, "description": "1 means break pedal is engaged & 0 means break pedal is disengaged", "example": 0, "enum": [] }, { "name": "data[].canInfo.fuelLevel", "type": "integer", "required": false, "description": "Level of the fuel in liters", "example": 14, "enum": [] }, { "name": "data[].canInfo.driverDoor", "type": "number", "required": false, "description": "1 means door is open & 0 means door is closed", "example": 0, "enum": [] }, { "name": "data[].canInfo.headLights", "type": "number", "required": false, "description": "1 means ON & 0 means OFF", "example": 1, "enum": [] }, { "name": "data[].canInfo.blinker", "type": "number", "required": false, "description": "1 means ON & 0 means OFF", "example": 0, "enum": [] }, { "name": "data[].canInfo.gearState", "type": "number", "required": false, "description": "0 is Neutral, 1 is Drive, 2 is Sports, 3 is Reverse", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.intakeAirTemp", "type": "number", "required": false, "description": "This is the intake air temperature of the engine.", "example": 62, "enum": [] }, { "name": "data[].canInfo.intakeabsolutePress", "type": "number", "required": false, "description": "This is the intake absolute pressure of the engine. It is defined in Pa(Pascal)", "example": 42, "enum": [] }, { "name": "data[].canInfo.ac", "type": "integer", "required": false, "description": "1 means AC is ON & 0 means AC is OFF", "example": 0, "enum": [] }, { "name": "data[].canInfo.fuelConsAVG", "type": "integer", "required": false, "description": "Fuel constant average", "example": 99, "enum": [] }, { "name": "data[].deviceFaults", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceFaults[].code", "type": "integer", "required": false, "description": "", "example": 1001, "enum": [] }, { "name": "data[].deviceFaults[].timetamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].deviceFaults[].status", "type": "integer", "required": false, "description": "Describes the status of the fault which was detected. 0: OPEN & 1: Close.", "example": 0, "enum": [] }, { "name": "data[].deviceFaults[].closedOn", "type": "number", "required": false, "description": "", "example": 556567872, "enum": [] }, { "name": "data[].currentGeofence", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].todaysDrive", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].todaysDrive.todayKms", "type": "number", "required": false, "description": "", "example": 55.67, "enum": [] }, { "name": "data[].todaysDrive.todayMovementTime", "type": "number", "required": false, "description": "Value is in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].todaysDrive.todayIdleTime", "type": "number", "required": false, "description": "Value is in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].todaysDrive.todayDriveCount", "type": "integer", "required": false, "description": "", "example": 5, "enum": [] } ], "example": { "data": [ { "id": "1", "active": true, "status": 1, "vehicleBattery": 13568.98, "location": { "gpsTime": 1574736922, "gprsTime": 1574736922, "latitude": 28.551255163434, "longitude": 77.2687, "address": "244, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 2 m from Usha Exim Pvt Ltd pin-110020", "altitude": 234, "heading": 196.868, "speedKph": 27.85 }, "deviceDetails": { "name": "DL3CCM8097", "registrationNumber": "DL3CCM8097", "deviceType": "car" }, "alerts": { "deviceId": 8989, "timestamp": 1577589789, "latitude": 28.550962381896, "longitude": 77.26890675033, "address": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "alarmType": 28, "limit": 44, "duration": 20 }, "canInfo": { "calcEngineVal": 0, "greenDriveType": "HA", "canTimestamp": 1568362645, "coolantTemp": 87, "engineRPM": 796, "accelPedal": 8.4, "parkBrake": 0, "breakPedal": 0 } } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"id\" is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/devices' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/devices\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/devices\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/devices\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/devices\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 74, "generationGroup": "intouch-get-devices-8d5e41c132", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the live data of devices. - Identity: `api-operation:intouch-get-device-gets-the-live-data-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-device-gets-the-live-data-of-devices - State model: stateful ```json { "slug": "intouch-get-device-gets-the-live-data-of-devices", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/device", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/device", "operationId": "getDeviceById", "summary": "Gets the live data of devices.", "description": "This API returns accurate live location and related data of vehicles, assets & people with help of connected devices/sensors/mobiles to provide location awareness to users of your app. The API provides real-time visibility of your tracked objects, giving not just location information, but multiple additional fields which add value to your application. The API is capable of being used for multiple use cases: be it for transport - logistics or for personnel information services for all kinds of web or mobile development platforms.", "tags": [ "devices" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "integer", "description": "This is the device's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all active devices in the account.", "example": "1", "enum": [] }, { "name": "includeInActive", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory boolean field. If this field is not sent then by default API response will send all active devices. If \"true\" then API reponse will have inactive devices along with active devices. If \"false\" then API will return only active devices", "example": "true", "enum": [] }, { "name": "ignoreBeacon", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory field. If set to true then API will return all devices except those whose device type is beacon(mobile).", "example": "true", "enum": [] }, { "name": "state", "in": "query", "required": false, "type": "number", "description": "Non mandatory field. Input timestamp in this field to fetch only those live locations of devices which have come after the input timestamp. If \"state\" is sent then by default only active devices will be fetched irrespective of the status of \"includeInActive\" attribute.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "integer", "required": false, "description": "", "example": "1", "enum": [] }, { "name": "data[].active", "type": "string", "required": false, "description": "device active status", "example": true, "enum": [ true, false ] }, { "name": "data[].status", "type": "integer", "required": false, "description": "1 is Moving 2 is idle 3 is stopped 4 is towing 5 is No Data 6 is power off i,e the device's battery is disconnected from the vehicle battery 7 is No GPS 12 is Activation Pending i,e the device is not yet active and is yet to send the first ping.", "example": 1, "enum": [] }, { "name": "data[].vehicleBattery", "type": "number", "required": false, "description": "", "example": 13568.98, "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.gpsTime", "type": "number", "required": false, "description": "time at which the device captures the packet", "example": "1700000000000", "enum": [] }, { "name": "data[].location.gprsTime", "type": "number", "required": false, "description": "time at which the Intouch server receives the device packet", "example": "1700000000000", "enum": [] }, { "name": "data[].location.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].location.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].location.address", "type": "string", "required": false, "description": "", "example": "244, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 2 m from Usha Exim Pvt Ltd pin-110020", "enum": [] }, { "name": "data[].location.altitude", "type": "number", "required": false, "description": "", "example": 234, "enum": [] }, { "name": "data[].location.heading", "type": "number", "required": false, "description": "value in degrees from the North", "example": 196.868, "enum": [] }, { "name": "data[].location.speedKph", "type": "number", "required": false, "description": "", "example": 27.85, "enum": [] }, { "name": "data[].location.odometer", "type": "number", "required": false, "description": "", "example": 12548.22, "enum": [] }, { "name": "data[].deviceDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceDetails.name", "type": "string", "required": false, "description": "", "example": "DL3CCM8097", "enum": [] }, { "name": "data[].deviceDetails.registrationNumber", "type": "string", "required": false, "description": "", "example": "DL3CCM8097", "enum": [] }, { "name": "data[].deviceDetails.deviceType", "type": "string", "required": false, "description": "", "example": "car", "enum": [ "car", "truck", "bus", "bike", "tracktor", "JCB", "excavator" ] }, { "name": "data[].alerts", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].alerts.deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data[].alerts.timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data[].alerts.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].alerts.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].alerts.address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data[].alerts.alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data[].alerts.limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data[].alerts.duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data[].alerts.actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data[].alerts.actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data[].alerts.severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data[].alerts.data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data[].alerts.geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] }, { "name": "data[].canInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].canInfo.calcEngineVal", "type": "integer", "required": false, "description": "", "example": 0, "enum": [] }, { "name": "data[].canInfo.greenDriveType", "type": "string", "required": false, "description": "HA(Harsh acceleration), HB(Harsh Breaking), HC(Harsh Cornering)", "example": "HA", "enum": [] }, { "name": "data[].canInfo.canTimestamp", "type": "number", "required": false, "description": "Exact time at which the CAN data got generated by the device", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.coolantTemp", "type": "number", "required": false, "description": "", "example": 87, "enum": [] }, { "name": "data[].canInfo.engineRPM", "type": "integer", "required": false, "description": "", "example": 796, "enum": [] }, { "name": "data[].canInfo.accelPedal", "type": "number", "required": false, "description": "This is accelerator pedal value in percentage.", "example": 8.4, "enum": [] }, { "name": "data[].canInfo.parkBrake", "type": "number", "required": false, "description": "This is parking break. 0 means parking break is disengaged & 1 means parking break is engaged", "example": 0, "enum": [] }, { "name": "data[].canInfo.breakPedal", "type": "number", "required": false, "description": "1 means break pedal is engaged & 0 means break pedal is disengaged", "example": 0, "enum": [] }, { "name": "data[].canInfo.fuelLevel", "type": "integer", "required": false, "description": "Level of the fuel in liters", "example": 14, "enum": [] }, { "name": "data[].canInfo.driverDoor", "type": "number", "required": false, "description": "1 means door is open & 0 means door is closed", "example": 0, "enum": [] }, { "name": "data[].canInfo.headLights", "type": "number", "required": false, "description": "1 means ON & 0 means OFF", "example": 1, "enum": [] }, { "name": "data[].canInfo.blinker", "type": "number", "required": false, "description": "1 means ON & 0 means OFF", "example": 0, "enum": [] }, { "name": "data[].canInfo.intakeAirTemp", "type": "number", "required": false, "description": "This is the intake air temperature of the engine.", "example": 62, "enum": [] }, { "name": "data[].canInfo.intakeabsolutePress", "type": "number", "required": false, "description": "This is the intake absolute pressure of the engine. It is defined in Pa(Pascal)", "example": 42, "enum": [] }, { "name": "data[].canInfo.ac", "type": "integer", "required": false, "description": "1 means AC is ON & 0 means AC is OFF", "example": 0, "enum": [] }, { "name": "data[].canInfo.fuelConsAVG", "type": "integer", "required": false, "description": "Fuel constant average", "example": 99, "enum": [] }, { "name": "data[].canInfo.ignition", "type": "integer", "required": false, "description": "0 is ignition off 1 is ignition on", "example": 0, "enum": [] }, { "name": "data[].canInfo.gearState", "type": "integer", "required": false, "description": "shows the current state of gear of the EV", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.stateOfCharge", "type": "integer", "required": false, "description": "Value is in percentage, i,e the current percentage value at which the EV's battery is charged", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.distanceToEmpty", "type": "integer", "required": false, "description": "distnace in KMs after which the EV will need to be charged", "example": 100, "enum": [] }, { "name": "data[].deviceFaults", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceFaults[].code", "type": "integer", "required": false, "description": "", "example": 1001, "enum": [] }, { "name": "data[].deviceFaults[].timetamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].deviceFaults[].status", "type": "integer", "required": false, "description": "Describes the status of the fault which was detected. 0: OPEN & 1: Close.", "example": 0, "enum": [] }, { "name": "data[].deviceFaults[].closedOn", "type": "number", "required": false, "description": "", "example": 556567872, "enum": [] }, { "name": "data[].currentGeofence", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].todaysDrive", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].todaysDrive.todayKms", "type": "number", "required": false, "description": "", "example": 55.67, "enum": [] }, { "name": "data[].todaysDrive.todayMovementTime", "type": "number", "required": false, "description": "Value is in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].todaysDrive.todayIdleTime", "type": "number", "required": false, "description": "Value is in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].todaysDrive.todayDriveCount", "type": "integer", "required": false, "description": "", "example": 5, "enum": [] } ], "example": { "data": [ { "id": "1", "active": true, "status": 1, "vehicleBattery": 13568.98, "location": { "gpsTime": 1574736922, "gprsTime": 1574736922, "latitude": 28.551255163434, "longitude": 77.2687, "address": "244, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 2 m from Usha Exim Pvt Ltd pin-110020", "altitude": 234, "heading": 196.868, "speedKph": 27.85 }, "deviceDetails": { "name": "DL3CCM8097", "registrationNumber": "DL3CCM8097", "deviceType": "car" }, "alerts": { "deviceId": 8989, "timestamp": 1577589789, "latitude": 28.550962381896, "longitude": 77.26890675033, "address": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "alarmType": 28, "limit": 44, "duration": 20 }, "canInfo": { "calcEngineVal": 0, "greenDriveType": "HA", "canTimestamp": 1568362645, "coolantTemp": 87, "engineRPM": 796, "accelPedal": 8.4, "parkBrake": 0, "breakPedal": 0 } } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"id\" is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/device' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/device\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/device\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/device\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/device\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 77, "generationGroup": "intouch-get-device-edb77335d0", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets drive details of a device. - Identity: `api-operation:intouch-get-device-drive-gets-drive-details-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-device-drive-gets-drive-details-of-a-device - State model: stateful ```json { "slug": "intouch-get-device-drive-gets-drive-details-of-a-device", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/device/drive", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/device/drive?deviceId=1&startTime=1700000000000&endTime=1700000000000", "operationId": "getDrives", "summary": "Gets drive details of a device.", "description": "This API is used to request the drive details of a vehicle in an account on our telematics platform. A vehicle can be a device/sensor connected to our telematics platform directly or via a third party data aggregator who utilises our telematics platform for tracking services. Drive is a list of reported geo-positions of any object (such as vehicles, assets or people) according to pre-defined conditions", "tags": [ "drives" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": true, "type": "integer", "description": "ID of the device for which the drives need to be fetched", "example": "1", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "The starting timsstamp from which the drives need to be fetched.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "The end timestamp till which the drives need to be fetched.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "Your Device's ID.", "example": 67790, "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.startAddress", "type": "string", "required": false, "description": "", "example": "3605, 13th G Main Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 35 m from Supraja Meru pin-560038 (India)", "enum": [] }, { "name": "data[].location.startTimestamp", "type": "number", "required": false, "description": "this is epoc timestamp", "example": "1700000000000", "enum": [] }, { "name": "data[].location.endAddress", "type": "string", "required": false, "description": "", "example": "1139, Sweth Ambara, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 32 m from AMC Cookware India Pvt Ltd pin-560038", "enum": [] }, { "name": "data[].location.endTimestamp", "type": "number", "required": false, "description": "this is epoc timestamp", "example": "1700000000000", "enum": [] }, { "name": "data[].location.avgSpeed", "type": "number", "required": false, "description": "speed in km/hr", "example": 45.34, "enum": [] }, { "name": "data[].movement", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].movement.duration", "type": "number", "required": false, "description": "duration in seconds", "example": 265, "enum": [] }, { "name": "data[].movement.distance", "type": "number", "required": false, "description": "Distance im KMs", "example": 12.34, "enum": [] }, { "name": "data[].movement.idleTime", "type": "number", "required": false, "description": "idle time in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].movement.movementTime", "type": "number", "required": false, "description": "movement time in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].movement.stoppageTime", "type": "number", "required": false, "description": "stoppage time in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].drivingBehaviourCount", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].drivingBehaviourCount.haCount", "type": "integer", "required": false, "description": "Harsh Acceleration count", "example": 2, "enum": [] }, { "name": "data[].drivingBehaviourCount.hbCount", "type": "integer", "required": false, "description": "Harsh Breaking Count", "example": 5, "enum": [] }, { "name": "data[].drivingBehaviourCount.hcCount", "type": "integer", "required": false, "description": "Harsh Cornering Count", "example": 1, "enum": [] } ], "example": { "data": [ { "deviceId": 67790, "location": { "startAddress": "3605, 13th G Main Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 35 m from Supraja Meru pin-560038 (India)", "startTimestamp": 1574913781, "endAddress": "1139, Sweth Ambara, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 32 m from AMC Cookware India Pvt Ltd pin-560038", "endTimestamp": 1574914046, "avgSpeed": 45.34 }, "movement": { "duration": 265, "distance": 12.34, "idleTime": 265, "movementTime": 800, "stoppageTime": 1300 }, "drivingBehaviourCount": { "haCount": 2, "hbCount": 5, "hcCount": 1 } } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"id\" is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/device/drive?deviceId=1&startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/device/drive?deviceId=1&startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/device/drive?deviceId=1&startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/device/drive?deviceId=1&startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/device/drive?deviceId=1&startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 29, "generationGroup": "intouch-get-device-drive-e0e4c548ee", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets drive details of a device. - Identity: `api-operation:intouch-get-devices-drives-gets-drive-details-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device - State model: stateful ```json { "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/drive.json", "sourceFingerprint": "6cdf4c61bc811cde72adc7d658a90c01a1bb4a1f805c85a4d3cd763c2281f2c3", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/devices/drives", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/devices/drives?deviceId=1&startTime=1700000000000&endTime=1700000000000", "operationId": "getDrives", "summary": "Gets drive details of a device.", "description": "This API is used to request the drive details of a vehicle in an account on our telematics platform. A vehicle can be a device/sensor connected to our telematics platform directly or via a third party data aggregator who utilises our telematics platform for tracking services. Drive is a list of reported geo-positions of any object (such as vehicles, assets or people) according to pre-defined conditions", "tags": [ "drives" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": true, "type": "integer", "description": "ID of the device for which the drives need to be fetched", "example": "1", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "The starting timsstamp from which the drives need to be fetched.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "The end timestamp till which the drives need to be fetched.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "Your Device's ID.", "example": 67790, "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.startAddress", "type": "string", "required": false, "description": "", "example": "3605, 13th G Main Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 35 m from Supraja Meru pin-560038 (India)", "enum": [] }, { "name": "data[].location.startTimestamp", "type": "number", "required": false, "description": "this is epoc timestamp", "example": "1700000000000", "enum": [] }, { "name": "data[].location.endAddress", "type": "string", "required": false, "description": "", "example": "1139, Sweth Ambara, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 32 m from AMC Cookware India Pvt Ltd pin-560038", "enum": [] }, { "name": "data[].location.endTimestamp", "type": "number", "required": false, "description": "this is epoc timestamp", "example": "1700000000000", "enum": [] }, { "name": "data[].location.avgSpeed", "type": "number", "required": false, "description": "speed in km/hr", "example": 45.34, "enum": [] }, { "name": "data[].movement", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].movement.duration", "type": "number", "required": false, "description": "duration in seconds", "example": 265, "enum": [] }, { "name": "data[].movement.distance", "type": "number", "required": false, "description": "Distance im KMs", "example": 12.34, "enum": [] }, { "name": "data[].movement.idleTime", "type": "number", "required": false, "description": "idle time in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].movement.movementTime", "type": "number", "required": false, "description": "movement time in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].movement.stoppageTime", "type": "number", "required": false, "description": "stoppage time in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].drivingBehaviourCount", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].drivingBehaviourCount.haCount", "type": "integer", "required": false, "description": "Harsh Acceleration count", "example": 2, "enum": [] }, { "name": "data[].drivingBehaviourCount.hbCount", "type": "integer", "required": false, "description": "Harsh Breaking Count", "example": 5, "enum": [] }, { "name": "data[].drivingBehaviourCount.hcCount", "type": "integer", "required": false, "description": "Harsh Cornering Count", "example": 1, "enum": [] } ], "example": { "data": [ { "deviceId": 67790, "location": { "startAddress": "3605, 13th G Main Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 35 m from Supraja Meru pin-560038 (India)", "startTimestamp": 1574913781, "endAddress": "1139, Sweth Ambara, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 32 m from AMC Cookware India Pvt Ltd pin-560038", "endTimestamp": 1574914046, "avgSpeed": 45.34 }, "movement": { "duration": 265, "distance": 12.34, "idleTime": 265, "movementTime": 800, "stoppageTime": 1300 }, "drivingBehaviourCount": { "haCount": 2, "hbCount": 5, "hcCount": 1 } } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"id\" is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/devices/drives?deviceId=1&startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/devices/drives?deviceId=1&startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/devices/drives?deviceId=1&startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/devices/drives?deviceId=1&startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/devices/drives?deviceId=1&startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 29, "generationGroup": "intouch-get-devices-drives-6ed00dce99", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the historical location events of a device. - Identity: `api-operation:intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device - State model: stateful ```json { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/device/{deviceId}/events", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/device/1/events?startTime=1700000000000&endTime=1700000000000", "operationId": "getLocationEvents", "summary": "Gets the historical location events of a device.", "description": "This API is used to get the historical location information as well as related additional information for a vehicle. This API can be used thus to create customized reports for users of your apps for different use cases, e.g.: plot the vehicle's past movements on map or get a historical graph of change in a vehicle's altitude.", "tags": [ "events" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "path", "required": true, "type": "integer", "description": "ID of the device for which the events need to be fetched", "example": "1", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "The starting timsstamp from which the events need to be fetched.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "The end timestamp till which the events need to be fetched.", "example": "1700000000000", "enum": [] }, { "name": "skipPeriod", "in": "query", "required": false, "type": "integer", "description": "Defined in minitues. For example, if say 2 is passed then each returned data packet will have a minimum difference of 2 mins.", "example": 2, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.drivingBehaviourCount", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.drivingBehaviourCount.haCount", "type": "integer", "required": false, "description": "Harsh Acceleration Count", "example": 2, "enum": [] }, { "name": "data.drivingBehaviourCount.hbCount", "type": "integer", "required": false, "description": "Harsh Breaking Count", "example": 1, "enum": [] }, { "name": "data.drivingBehaviourCount.hcCount", "type": "integer", "required": false, "description": "Harsh Cornering Count", "example": 3, "enum": [] }, { "name": "data.summary", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.summary.distance", "type": "number", "required": false, "description": "Total Drive Distance in KMs", "example": 23.67, "enum": [] }, { "name": "data.summary.duration", "type": "number", "required": false, "description": "Total drive duration in seconds", "example": 300, "enum": [] }, { "name": "data.summary.avgSpeed", "type": "number", "required": false, "description": "Average speed in km/hr", "example": 45.54, "enum": [] }, { "name": "data.summary.startAddress", "type": "string", "required": false, "description": "", "example": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "enum": [] }, { "name": "data.summary.endAddress", "type": "string", "required": false, "description": "", "example": "3645, 13th F Main Road, Dupanahalli, Indiranagar, Bengaluru, Karnataka. 12 m from Meenakshi Enclave pin-560038 (India)", "enum": [] }, { "name": "data.summary.startTimestamp", "type": "number", "required": false, "description": "Start time of the device i,e the time at which the data first came from the device for the selected day.", "example": "1700000000000", "enum": [] }, { "name": "data.summary.endTimestamp", "type": "number", "required": false, "description": "End time of the device i,e the time at which the last data came from the device for the selected day.", "example": "1700000000000", "enum": [] }, { "name": "data.positionList", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.positionList[].address", "type": "string", "required": false, "description": "Address of the location event", "example": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "enum": [] }, { "name": "data.positionList[].timestamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data.positionList[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data.positionList[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data.positionList[].heading", "type": "number", "required": false, "description": "device heading direction in degrees from North.", "example": 298, "enum": [] }, { "name": "data.positionList[].speed", "type": "number", "required": false, "description": "Device speed at this particular location", "example": 33.33, "enum": [] }, { "name": "data.positionList[].ignition", "type": "number", "required": false, "description": "whether vehicle ignition is On or Off. 0 means ignition is OFF and 1 means ignition is ON.", "example": 0, "enum": [] }, { "name": "data.positionList[].powerSupplyVoltage", "type": "number", "required": false, "description": "battery voltage value in milli volts.", "example": 12769, "enum": [] }, { "name": "data.positionList[].gpsFix", "type": "boolean", "required": false, "description": "GPS is fix or not for the device. true meanse GPS is fixed and false means GPS is not fixed.", "example": true, "enum": [] }, { "name": "data.positionList[].validGPS", "type": "boolean", "required": false, "description": "Checks whether GPS is valid or not.", "example": true, "enum": [ true, false ] }, { "name": "data.positionList[].accOff", "type": "boolean", "required": false, "description": "checks for whether adaptive cruise control is enabled or not.", "example": true, "enum": [ true, false ] }, { "name": "data.positionList[].movementStatus", "type": "integer", "required": false, "description": "Checks the movement status of the device. 1:Moving 2:Idle 3:Stopped 4:Towing 5:No Data 6:Power Off 7:No Gps 8:On Trip 9:Free Vehicle", "example": 1, "enum": [] }, { "name": "data.positionList[].durationTime", "type": "number", "required": false, "description": "duration(in secsonds) time spent at current location", "example": "1700000000000", "enum": [] }, { "name": "data.positionList[].greenDriveType", "type": "string", "required": false, "description": "HA(Harsh acceleration), HB(Harsh Breaking), HC(Harsh Cornering)", "example": "HA", "enum": [] }, { "name": "data.positionList[].tripStatus", "type": "integer", "required": false, "description": "0 - On Trip, 1 - Free Vehicle", "example": 0, "enum": [ "On Trip", "Free Vehicle" ] }, { "name": "data.positionList[].mobileInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.positionList[].mobileInfo.locationSource", "type": "number", "required": false, "description": "1 - GPS connected, distanceaccuracy less that 50mtrs, 2 - GPRS connected, distance accracy more than 50 mtr.", "example": "28.612964,77.229463", "enum": [ "GPS Connected", "GPRS Connected" ] }, { "name": "data.positionList[].mobileInfo.mockLocation", "type": "boolean", "required": false, "description": "true - mock location being sent by the user. false - real location being sent by the user.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data.positionList[].mobileInfo.isAirplanemode", "type": "boolean", "required": false, "description": "Checks whether mobile's airplane mode is ON(i,e true) or OFF(i,e false)", "example": true, "enum": [] }, { "name": "data.positionList[].mobileInfo.callStatus", "type": "number", "required": false, "description": "0-CALLSTATEIDLE, 1-CALLSTATERINGING, 2-CALLSTATEOFFHOOK", "example": 0, "enum": [ "CALL_STATE_IDLE", "CALL_STATE_RINGING", "CALL_STATE_OFFHOOK" ] }, { "name": "data.positionList[].mobileInfo.deviceStatus", "type": "integer", "required": false, "description": "status of the device in the current location. Values as mentioned in the below enum are possible.", "example": 0, "enum": [ "IN_VEHICLE", "ON_BICYCLE", "ON_FOOT", "STILL", "UNKNOWN", "TILTING", "WALKING", "RUNNING" ] }, { "name": "data.positionList[].mobileInfo.phoneEvent", "type": "integer", "required": false, "description": "Checks the location permission that the user enables/disables in the mobile phone.", "example": 5, "enum": [ "EVENT_LOCATION_PERMISSION_DENIED = 5", "EVENT_LOCATION_PROVIDER_OFF = 6", "EVENT_LOCATION_STOP_PROGRAMMATICALLY = 7" ] }, { "name": "data.positionList[].alerts", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.positionList[].alerts.deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data.positionList[].alerts.timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data.positionList[].alerts.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data.positionList[].alerts.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data.positionList[].alerts.address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data.positionList[].alerts.alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data.positionList[].alerts.limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data.positionList[].alerts.duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data.positionList[].alerts.actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data.positionList[].alerts.actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data.positionList[].alerts.severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data.positionList[].alerts.data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data.positionList[].alerts.geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] } ], "example": { "data": { "drivingBehaviourCount": { "haCount": 2, "hbCount": 1, "hcCount": 3 }, "summary": { "distance": 23.67, "duration": 300, "avgSpeed": 45.54, "startAddress": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "endAddress": "3645, 13th F Main Road, Dupanahalli, Indiranagar, Bengaluru, Karnataka. 12 m from Meenakshi Enclave pin-560038 (India)", "startTimestamp": 1577644204, "endTimestamp": 1577684913 }, "positionList": [ { "address": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "timestamp": 1574937348, "longitude": 77.74937348, "latitude": 55.74937348, "heading": 298, "speed": 33.33, "ignition": 0, "powerSupplyVoltage": 12769 } ] } } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"id\" is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/device/1/events?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/device/1/events?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/device/1/events?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/device/1/events?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/device/1/events?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 62, "generationGroup": "intouch-get-device-deviceid-events-81b631bdb1", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the historical location events of a device. - Identity: `api-operation:intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device - State model: stateful ```json { "slug": "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/devices/{deviceId}/events", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/devices/1/events?startTime=1700000000000&endTime=1700000000000", "operationId": "getLocationEvents", "summary": "Gets the historical location events of a device.", "description": "This API is used to get the historical location information as well as related additional information for a vehicle. This API can be used thus to create customized reports for users of your apps for different use cases, e.g.: plot the vehicle's past movements on map or get a historical graph of change in a vehicle's altitude.", "tags": [ "events" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "path", "required": true, "type": "integer", "description": "ID of the device for which the events need to be fetched", "example": "1", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "The starting timsstamp from which the events need to be fetched.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "The end timestamp till which the events need to be fetched.", "example": "1700000000000", "enum": [] }, { "name": "skipPeriod", "in": "query", "required": false, "type": "integer", "description": "Defined in minitues. For example, if say 2 is passed then each returned data packet will have a minimum difference of 2 mins.", "example": 2, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.drivingBehaviourCount", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.drivingBehaviourCount.haCount", "type": "integer", "required": false, "description": "Harsh Acceleration Count", "example": 2, "enum": [] }, { "name": "data.drivingBehaviourCount.hbCount", "type": "integer", "required": false, "description": "Harsh Breaking Count", "example": 1, "enum": [] }, { "name": "data.drivingBehaviourCount.hcCount", "type": "integer", "required": false, "description": "Harsh Cornering Count", "example": 3, "enum": [] }, { "name": "data.summary", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.summary.distance", "type": "number", "required": false, "description": "Total Drive Distance in KMs", "example": 23.67, "enum": [] }, { "name": "data.summary.duration", "type": "number", "required": false, "description": "Total drive duration in seconds", "example": 300, "enum": [] }, { "name": "data.summary.avgSpeed", "type": "number", "required": false, "description": "Average speed in km/hr", "example": 45.54, "enum": [] }, { "name": "data.summary.startAddress", "type": "string", "required": false, "description": "", "example": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "enum": [] }, { "name": "data.summary.endAddress", "type": "string", "required": false, "description": "", "example": "3645, 13th F Main Road, Dupanahalli, Indiranagar, Bengaluru, Karnataka. 12 m from Meenakshi Enclave pin-560038 (India)", "enum": [] }, { "name": "data.summary.startTimestamp", "type": "number", "required": false, "description": "Start time of the device i,e the time at which the data first came from the device for the selected day.", "example": "1700000000000", "enum": [] }, { "name": "data.summary.endTimestamp", "type": "number", "required": false, "description": "End time of the device i,e the time at which the last data came from the device for the selected day.", "example": "1700000000000", "enum": [] }, { "name": "data.positionList", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.positionList[].address", "type": "string", "required": false, "description": "Address of the location event", "example": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "enum": [] }, { "name": "data.positionList[].timestamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data.positionList[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data.positionList[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data.positionList[].heading", "type": "number", "required": false, "description": "device heading direction in degrees from North.", "example": 298, "enum": [] }, { "name": "data.positionList[].speed", "type": "number", "required": false, "description": "Device speed at this particular location", "example": 33.33, "enum": [] }, { "name": "data.positionList[].ignition", "type": "number", "required": false, "description": "whether vehicle ignition is On or Off. 0 means ignition is OFF and 1 means ignition is ON.", "example": 0, "enum": [] }, { "name": "data.positionList[].powerSupplyVoltage", "type": "number", "required": false, "description": "battery voltage value in milli volts.", "example": 12769, "enum": [] }, { "name": "data.positionList[].gpsFix", "type": "boolean", "required": false, "description": "GPS is fix or not for the device. true meanse GPS is fixed and false means GPS is not fixed.", "example": true, "enum": [] }, { "name": "data.positionList[].validGPS", "type": "boolean", "required": false, "description": "Checks whether GPS is valid or not.", "example": true, "enum": [ true, false ] }, { "name": "data.positionList[].accOff", "type": "boolean", "required": false, "description": "checks for whether adaptive cruise control is enabled or not.", "example": true, "enum": [ true, false ] }, { "name": "data.positionList[].movementStatus", "type": "integer", "required": false, "description": "Checks the movement status of the device. 1:Moving 2:Idle 3:Stopped 4:Towing 5:No Data 6:Power Off 7:No Gps 8:On Trip 9:Free Vehicle", "example": 1, "enum": [] }, { "name": "data.positionList[].durationTime", "type": "number", "required": false, "description": "duration(in secsonds) time spent at current location", "example": "1700000000000", "enum": [] }, { "name": "data.positionList[].greenDriveType", "type": "string", "required": false, "description": "HA(Harsh acceleration), HB(Harsh Breaking), HC(Harsh Cornering)", "example": "HA", "enum": [] }, { "name": "data.positionList[].tripStatus", "type": "integer", "required": false, "description": "0 - On Trip, 1 - Free Vehicle", "example": 0, "enum": [ "On Trip", "Free Vehicle" ] }, { "name": "data.positionList[].mobileInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.positionList[].mobileInfo.locationSource", "type": "number", "required": false, "description": "1 - GPS connected, distanceaccuracy less that 50mtrs, 2 - GPRS connected, distance accracy more than 50 mtr.", "example": "28.612964,77.229463", "enum": [ "GPS Connected", "GPRS Connected" ] }, { "name": "data.positionList[].mobileInfo.mockLocation", "type": "boolean", "required": false, "description": "true - mock location being sent by the user. false - real location being sent by the user.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data.positionList[].mobileInfo.isAirplanemode", "type": "boolean", "required": false, "description": "Checks whether mobile's airplane mode is ON(i,e true) or OFF(i,e false)", "example": true, "enum": [] }, { "name": "data.positionList[].mobileInfo.callStatus", "type": "number", "required": false, "description": "0-CALLSTATEIDLE, 1-CALLSTATERINGING, 2-CALLSTATEOFFHOOK", "example": 0, "enum": [ "CALL_STATE_IDLE", "CALL_STATE_RINGING", "CALL_STATE_OFFHOOK" ] }, { "name": "data.positionList[].mobileInfo.deviceStatus", "type": "integer", "required": false, "description": "status of the device in the current location. Values as mentioned in the below enum are possible.", "example": 0, "enum": [ "IN_VEHICLE", "ON_BICYCLE", "ON_FOOT", "STILL", "UNKNOWN", "TILTING", "WALKING", "RUNNING" ] }, { "name": "data.positionList[].mobileInfo.phoneEvent", "type": "integer", "required": false, "description": "Checks the location permission that the user enables/disables in the mobile phone.", "example": 5, "enum": [ "EVENT_LOCATION_PERMISSION_DENIED = 5", "EVENT_LOCATION_PROVIDER_OFF = 6", "EVENT_LOCATION_STOP_PROGRAMMATICALLY = 7" ] }, { "name": "data.positionList[].alerts", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.positionList[].alerts.deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data.positionList[].alerts.timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data.positionList[].alerts.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data.positionList[].alerts.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data.positionList[].alerts.address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data.positionList[].alerts.alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data.positionList[].alerts.limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data.positionList[].alerts.duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data.positionList[].alerts.actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data.positionList[].alerts.actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data.positionList[].alerts.severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data.positionList[].alerts.data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data.positionList[].alerts.geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] } ], "example": { "data": { "drivingBehaviourCount": { "haCount": 2, "hbCount": 1, "hcCount": 3 }, "summary": { "distance": 23.67, "duration": 300, "avgSpeed": 45.54, "startAddress": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "endAddress": "3645, 13th F Main Road, Dupanahalli, Indiranagar, Bengaluru, Karnataka. 12 m from Meenakshi Enclave pin-560038 (India)", "startTimestamp": 1577644204, "endTimestamp": 1577684913 }, "positionList": [ { "address": "213, 1st Cross Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 15 m from The Bodhi Tree pin-560038 (India)", "timestamp": 1574937348, "longitude": 77.74937348, "latitude": 55.74937348, "heading": 298, "speed": 33.33, "ignition": 0, "powerSupplyVoltage": 12769 } ] } } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"id\" is integer but string value gets passed.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/devices/1/events?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/devices/1/events?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/devices/1/events?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/devices/1/events?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/devices/1/events?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 62, "generationGroup": "intouch-get-devices-deviceid-events-9664a5ccb6", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets All The Configured Geofence(s) - Identity: `api-operation:intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0 - State model: stateful ```json { "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/geofence/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/", "operationId": null, "summary": "Gets All The Configured Geofence(s)", "description": "This API returns the list of all the configured geofences", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "ignoreGeometry", "in": "query", "required": false, "type": "boolean", "description": "Flag to get geometry data.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "Geofence ID", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the geofence.", "example": "market", "enum": [] }, { "name": "data[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geometry.type", "type": "string", "required": false, "description": "This defines the type of geofence, it can be point or polygon.", "example": "Point", "enum": [] }, { "name": "data[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].type", "type": "string", "required": false, "description": "Depending on the type of geofence this value can be Circle(buffer > 50 meters), Polygon or Point(buffer = 50 mtrs)", "example": "Circle", "enum": [] }, { "name": "data[].buffer", "type": "number", "required": false, "description": "Radius(in meters) of a circlular geofence", "example": 65.76, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was created.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was updated.", "example": "1700000000000", "enum": [] } ], "example": { "data": [ { "id": "1", "name": "market", "geometry": { "type": "Point", "coordinates": [ 77.456, 28.2345 ] }, "type": "Circle", "buffer": 65.76, "creationTime": "1", "updationTime": "1" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofence/\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 19, "generationGroup": "intouch-get-geofence-0428994c0e", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-get-geofence-gets-all-the-configured-geofence-s" ] } ``` ## api-operation · Gets All The Configured Geofence(s) - Identity: `api-operation:intouch-get-geofence-gets-all-the-configured-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s - State model: stateful ```json { "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/geofence/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/", "operationId": null, "summary": "Gets All The Configured Geofence(s)", "description": "This API returns the list of all the configured geofences", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "ignoreGeometry", "in": "query", "required": false, "type": "boolean", "description": "Flag to get geometry data.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "Geofence ID", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the geofence.", "example": "market", "enum": [] }, { "name": "data[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geometry.type", "type": "string", "required": false, "description": "This defines the type of geofence, it can be point or polygon.", "example": "Point", "enum": [] }, { "name": "data[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].type", "type": "string", "required": false, "description": "Depending on the type of geofence this value can be Circle(buffer > 50 meters), Polygon or Point(buffer = 50 mtrs)", "example": "Circle", "enum": [] }, { "name": "data[].buffer", "type": "number", "required": false, "description": "Radius(in meters) of a circlular geofence", "example": 65.76, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was created.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was updated.", "example": "1700000000000", "enum": [] } ], "example": { "data": [ { "id": "1", "name": "market", "geometry": { "type": "Point", "coordinates": [ 77.456, 28.2345 ] }, "type": "Circle", "buffer": 65.76, "creationTime": "1", "updationTime": "1" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofence/\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 19, "generationGroup": "intouch-get-geofence-0428994c0e", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0" ] } ``` ## api-operation · Create A New Geofence - Identity: `api-operation:intouch-post-geofence-create-a-new-geofence-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-create-a-new-geofence-v1-0-0 - State model: stateful ```json { "slug": "intouch-post-geofence-create-a-new-geofence-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/geofence/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/", "operationId": null, "summary": "Create A New Geofence", "description": "This API helps to create a new geofence", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "name", "type": "string", "required": false, "description": "Name of the geofence.", "example": "market", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer is nothing but radius in meters. If passed then by default the system will create a circle geofence. If buffer is not passed then by default the system will create a 'point' type geofence with radius as 50 meters", "example": 1000, "enum": [] }, { "name": "geometry", "type": "string", "required": false, "description": "This is a geoJSON string. You can pass here either 'Point' or 'Polygon'. Point is used for circular geofence, and Polygon is used for a multiple point polygon geofence", "example": "28.612964,77.229463", "enum": [] } ], "example": { "name": "market", "buffer": 1000, "geometry": { "type": "Point", "coordinates": [ 77.2334, 28.7676 ] } } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/\",\n headers=headers,\n json={\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/geofence/\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-geofence-9930a2a5a4", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-post-geofence-create-a-new-geofence" ] } ``` ## api-operation · Create A New Geofence - Identity: `api-operation:intouch-post-geofence-create-a-new-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-create-a-new-geofence - State model: stateful ```json { "slug": "intouch-post-geofence-create-a-new-geofence", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/geofence/", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/", "operationId": null, "summary": "Create A New Geofence", "description": "This API helps to create a new geofence", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "name", "type": "string", "required": false, "description": "Name of the geofence.", "example": "market", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer is nothing but radius in meters. If passed then by default the system will create a circle geofence. If buffer is not passed then by default the system will create a 'point' type geofence with radius as 50 meters", "example": 1000, "enum": [] }, { "name": "geometry", "type": "string", "required": false, "description": "This is a geoJSON string. You can pass here either 'Point' or 'Polygon'. Point is used for circular geofence, and Polygon is used for a multiple point polygon geofence", "example": "28.612964,77.229463", "enum": [] } ], "example": { "name": "market", "buffer": 1000, "geometry": { "type": "Point", "coordinates": [ 77.2334, 28.7676 ] } } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/\",\n headers=headers,\n json={\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/geofence/\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-geofence-9930a2a5a4", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-post-geofence-create-a-new-geofence-v1-0-0" ] } ``` ## api-operation · Get all the activities done by devices w.r.t various geofences - Identity: `api-operation:intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences - State model: stateful ```json { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/geofence/activity", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/activity?deviceId=5177789777&startTime=1700000000000&endTime=1700000000000", "operationId": null, "summary": "Get all the activities done by devices w.r.t various geofences", "description": "This API helps to fetch the details of all the activities, such as geofence entry time, exit time etc, which devices perform w.r.t various geofences across a defined date/time range.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": true, "type": "string", "description": "id of the device(s) for which you want to fetch the geofence activities. For multiple devices, you can pass comma separated device ids as well in the query string.", "example": 5177789777, "enum": [] }, { "name": "geofenceId", "in": "query", "required": false, "type": "string", "description": "id of the geofence(s) for which you want to fetch the geofence activities done by the device. For multiple geofences, you can pass comma separated geofence ids as well in the query string.", "example": 45438787, "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "Value in timestamp. Start time from where you want to fetch the geofence activities", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "Value in timestamp. End time till where you want to fetch the geofence activities.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].entryLongitude", "type": "number", "required": false, "description": "longitude where the particular device entered the geofence.", "example": "77.229463", "enum": [] }, { "name": "data[].entryLatitude", "type": "number", "required": false, "description": "latitude where the particular device entered the geofence.", "example": "28.612964", "enum": [] }, { "name": "data[].exitLongitude", "type": "number", "required": false, "description": "longitude where the particular device exited the geofence.", "example": "77.229463", "enum": [] }, { "name": "data[].exitLatitude", "type": "number", "required": false, "description": "latitude where the particular device exited the geofence.", "example": "28.612964", "enum": [] }, { "name": "data[].entryTimestamp", "type": "number", "required": false, "description": "time at which the device entered the particular geofence.", "example": "1700000000000", "enum": [] }, { "name": "data[].exitTimestamp", "type": "number", "required": false, "description": "time at which the device exited the particular geofence.", "example": "1700000000000", "enum": [] }, { "name": "data[].geofenceName", "type": "string", "required": false, "description": "name of the geofence", "example": "my geofence", "enum": [] }, { "name": "data[].geofenceId", "type": "number", "required": false, "description": "the id of the geofence where the activity took place", "example": 767676, "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "the id of the device which is performing the activities w.r.t the geofence", "example": 87676, "enum": [] } ], "example": { "data": [ { "entryLongitude": 28.8765, "entryLatitude": 56.8765, "exitLongitude": 38.8765, "exitLatitude": 46.8765, "entryTimestamp": 1580105880, "exitTimestamp": 1580105880, "geofenceName": "my geofence", "geofenceId": 767676 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/activity?deviceId=5177789777&startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/activity?deviceId=5177789777&startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/activity?deviceId=5177789777&startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/activity?deviceId=5177789777&startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofence/activity?deviceId=5177789777&startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 22, "generationGroup": "intouch-get-geofence-activity-4ab8a9df1d", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Delete A Geofence. - Identity: `api-operation:intouch-delete-geofence-id-delete-a-geofence-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-geofence-id-delete-a-geofence-v1-0-0 - State model: stateful ```json { "slug": "intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "DELETE", "path": "/geofence/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/1", "operationId": null, "summary": "Delete A Geofence.", "description": "This API helps to delete a geofence.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/geofence/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 8, "generationGroup": "intouch-delete-geofence-id-acd58f4735", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-delete-geofence-id-delete-a-geofence" ] } ``` ## api-operation · Delete A Geofence. - Identity: `api-operation:intouch-delete-geofence-id-delete-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-geofence-id-delete-a-geofence - State model: stateful ```json { "slug": "intouch-delete-geofence-id-delete-a-geofence", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "DELETE", "path": "/geofence/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/1", "operationId": null, "summary": "Delete A Geofence.", "description": "This API helps to delete a geofence.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/geofence/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 8, "generationGroup": "intouch-delete-geofence-id-acd58f4735", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-delete-geofence-id-delete-a-geofence-v1-0-0" ] } ``` ## api-operation · Get A Single Or Multiple Geofence(s). - Identity: `api-operation:intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0 - State model: stateful ```json { "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/geofence/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/1", "operationId": null, "summary": "Get A Single Or Multiple Geofence(s).", "description": "This API helps to fetch the details of a particular geofence", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id. This path variable will take precedence even if multiple geofence ids are passed in the query param.", "example": "1", "enum": [] }, { "name": "id", "in": "query", "required": false, "type": "string", "description": "geofence id. Use this if you want to get details of specific multiple geofence IDs.", "example": "51777,89777", "enum": [] }, { "name": "ignoreGeometry", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory field, boolean value to fetch geometry details.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "Geofence ID", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the geofence.", "example": "market", "enum": [] }, { "name": "data[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geometry.type", "type": "string", "required": false, "description": "This defines the type of geofence, it can be point or polygon.", "example": "Point", "enum": [] }, { "name": "data[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].type", "type": "string", "required": false, "description": "Depending on the type of geofence this value can be Circle(buffer > 50 meters), Polygon or Point(buffer = 50 mtrs)", "example": "Circle", "enum": [] }, { "name": "data[].buffer", "type": "number", "required": false, "description": "Radius(in meters) of a circlular geofence", "example": 65.76, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was created.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was updated.", "example": "1700000000000", "enum": [] } ], "example": { "data": [ { "id": "1", "name": "market", "geometry": { "type": "Point", "coordinates": [ 77.456, 28.2345 ] }, "type": "Circle", "buffer": 65.76, "creationTime": "1", "updationTime": "1" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/1\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofence/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 21, "generationGroup": "intouch-get-geofence-id-9d8bafa2d5", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s" ] } ``` ## api-operation · Get A Single Or Multiple Geofence(s). - Identity: `api-operation:intouch-get-geofence-id-get-a-single-or-multiple-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s - State model: stateful ```json { "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/geofence/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/1", "operationId": null, "summary": "Get A Single Or Multiple Geofence(s).", "description": "This API helps to fetch the details of a particular geofence", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id. This path variable will take precedence even if multiple geofence ids are passed in the query param.", "example": "1", "enum": [] }, { "name": "id", "in": "query", "required": false, "type": "string", "description": "geofence id. Use this if you want to get details of specific multiple geofence IDs.", "example": "51777,89777", "enum": [] }, { "name": "ignoreGeometry", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory field, boolean value to fetch geometry details.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "Geofence ID", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the geofence.", "example": "market", "enum": [] }, { "name": "data[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geometry.type", "type": "string", "required": false, "description": "This defines the type of geofence, it can be point or polygon.", "example": "Point", "enum": [] }, { "name": "data[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].type", "type": "string", "required": false, "description": "Depending on the type of geofence this value can be Circle(buffer > 50 meters), Polygon or Point(buffer = 50 mtrs)", "example": "Circle", "enum": [] }, { "name": "data[].buffer", "type": "number", "required": false, "description": "Radius(in meters) of a circlular geofence", "example": 65.76, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was created.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was updated.", "example": "1700000000000", "enum": [] } ], "example": { "data": [ { "id": "1", "name": "market", "geometry": { "type": "Point", "coordinates": [ 77.456, 28.2345 ] }, "type": "Circle", "buffer": 65.76, "creationTime": "1", "updationTime": "1" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/1\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofence/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 21, "generationGroup": "intouch-get-geofence-id-9d8bafa2d5", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0" ] } ``` ## api-operation · Update A Geofence. - Identity: `api-operation:intouch-post-geofence-id-update-a-geofence-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-id-update-a-geofence-v1-0-0 - State model: stateful ```json { "slug": "intouch-post-geofence-id-update-a-geofence-v1-0-0", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/geofence/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/1", "operationId": null, "summary": "Update A Geofence.", "description": "This API helps to update a particular geofence.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "name", "type": "string", "required": false, "description": "Name of the geofence.", "example": "market", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer is nothing but radius in meters. If passed then by default the system will create a circle geofence. If buffer is not passed then by default the system will create a 'point' type geofence with radius as 50 meters", "example": 1000, "enum": [] }, { "name": "geometry", "type": "string", "required": false, "description": "This is a geoJSON string. You can pass here either 'Point' or 'Polygon'. Point is used for circular geofence, and Polygon is used for a multiple point polygon geofence", "example": "28.612964,77.229463", "enum": [] } ], "example": { "name": "market", "buffer": 1000, "geometry": { "type": "Point", "coordinates": [ 77.2334, 28.7676 ] } } }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/1\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/1\",\n headers=headers,\n json={\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/geofence/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-geofence-id-83a7719be5", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": false, "alternativeSlugs": [ "intouch-post-geofence-id-update-a-geofence" ] } ``` ## api-operation · Update A Geofence. - Identity: `api-operation:intouch-post-geofence-id-update-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-id-update-a-geofence - State model: stateful ```json { "slug": "intouch-post-geofence-id-update-a-geofence", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/geofence/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofence/1", "operationId": null, "summary": "Update A Geofence.", "description": "This API helps to update a particular geofence.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "name", "type": "string", "required": false, "description": "Name of the geofence.", "example": "market", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer is nothing but radius in meters. If passed then by default the system will create a circle geofence. If buffer is not passed then by default the system will create a 'point' type geofence with radius as 50 meters", "example": 1000, "enum": [] }, { "name": "geometry", "type": "string", "required": false, "description": "This is a geoJSON string. You can pass here either 'Point' or 'Polygon'. Point is used for circular geofence, and Polygon is used for a multiple point polygon geofence", "example": "28.612964,77.229463", "enum": [] } ], "example": { "name": "market", "buffer": 1000, "geometry": { "type": "Point", "coordinates": [ 77.2334, 28.7676 ] } } }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofence/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofence/1\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/geofence/1\",\n headers=headers,\n json={\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofence/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/geofence/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-geofence-id-83a7719be5", "generationCount": 2, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [ "intouch-post-geofence-id-update-a-geofence-v1-0-0" ] } ``` ## api-operation · Gets All The Configured Geofence(s) - Identity: `api-operation:intouch-get-geofences-gets-all-the-configured-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofences-gets-all-the-configured-geofence-s - State model: stateful ```json { "slug": "intouch-get-geofences-gets-all-the-configured-geofence-s", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/geofences", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofences", "operationId": null, "summary": "Gets All The Configured Geofence(s)", "description": "This API returns the list of all the configured geofences", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "ignoreGeometry", "in": "query", "required": false, "type": "boolean", "description": "Flag to get geometry data.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "Geofence ID", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the geofence.", "example": "market", "enum": [] }, { "name": "data[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geometry.type", "type": "string", "required": false, "description": "This defines the type of geofence, it can be point or polygon.", "example": "Point", "enum": [] }, { "name": "data[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].type", "type": "string", "required": false, "description": "Depending on the type of geofence this value can be Circle(buffer > 50 meters), Polygon or Point(buffer = 50 mtrs)", "example": "Circle", "enum": [] }, { "name": "data[].buffer", "type": "number", "required": false, "description": "Radius(in meters) of a circlular geofence", "example": 65.76, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was created.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was updated.", "example": "1700000000000", "enum": [] } ], "example": { "data": [ { "id": "1", "name": "market", "geometry": { "type": "Point", "coordinates": [ 77.456, 28.2345 ] }, "type": "Circle", "buffer": 65.76, "creationTime": "1", "updationTime": "1" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofences' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofences\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofences\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofences\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofences\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 19, "generationGroup": "intouch-get-geofences-e64a4614bb", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Create A New Geofence - Identity: `api-operation:intouch-post-geofences-create-a-new-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofences-create-a-new-geofence - State model: stateful ```json { "slug": "intouch-post-geofences-create-a-new-geofence", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/geofences", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofences", "operationId": null, "summary": "Create A New Geofence", "description": "This API helps to create a new geofence", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "name", "type": "string", "required": false, "description": "Name of the geofence.", "example": "market", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer is nothing but radius in meters. If passed then by default the system will create a circle geofence. If buffer is not passed then by default the system will create a 'point' type geofence with radius as 50 meters", "example": 1000, "enum": [] }, { "name": "geometry", "type": "string", "required": false, "description": "This is a geoJSON string. You can pass here either 'Point' or 'Polygon'. Point is used for circular geofence, and Polygon is used for a multiple point polygon geofence", "example": "28.612964,77.229463", "enum": [] } ], "example": { "name": "market", "buffer": 1000, "geometry": { "type": "Point", "coordinates": [ 77.2334, 28.7676 ] } } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofences' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofences\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/geofences\",\n headers=headers,\n json={\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofences\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/geofences\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-geofences-d5c55f4698", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Get all the activities done by devices w.r.t various geofences - Identity: `api-operation:intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences - State model: stateful ```json { "slug": "intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/geofences/activities", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofences/activities?deviceId=51777%2C89777&startTime=1700000000000&endTime=1700000000000", "operationId": null, "summary": "Get all the activities done by devices w.r.t various geofences", "description": "This API helps to fetch the details of all the activities, such as geofence entry time, exit time etc, which devices perform w.r.t various geofences across a defined date/time range.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "deviceId", "in": "query", "required": true, "type": "string", "description": "id of the device(s) for which you want to fetch the geofence activities. For multiple devices, you can pass comma separated device ids as well in the query string.", "example": "51777,89777", "enum": [] }, { "name": "geofenceId", "in": "query", "required": false, "type": "string", "description": "id of the geofence(s) for which you want to fetch the geofence activities done by the device. For multiple geofences, you can pass comma separated geofence ids as well in the query string.", "example": "4543,8787", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "number", "description": "Value in timestamp. Start time from where you want to fetch the geofence activities", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "number", "description": "Value in timestamp. End time till where you want to fetch the geofence activities.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].entryLongitude", "type": "number", "required": false, "description": "longitude where the particular device entered the geofence.", "example": "77.229463", "enum": [] }, { "name": "data[].entryLatitude", "type": "number", "required": false, "description": "latitude where the particular device entered the geofence.", "example": "28.612964", "enum": [] }, { "name": "data[].exitLongitude", "type": "number", "required": false, "description": "longitude where the particular device exited the geofence.", "example": "77.229463", "enum": [] }, { "name": "data[].exitLatitude", "type": "number", "required": false, "description": "latitude where the particular device exited the geofence.", "example": "28.612964", "enum": [] }, { "name": "data[].entryTimestamp", "type": "number", "required": false, "description": "time at which the device entered the particular geofence.", "example": "1700000000000", "enum": [] }, { "name": "data[].exitTimestamp", "type": "number", "required": false, "description": "time at which the device exited the particular geofence.", "example": "1700000000000", "enum": [] }, { "name": "data[].geofenceName", "type": "string", "required": false, "description": "name of the geofence", "example": "my geofence", "enum": [] }, { "name": "data[].geofenceId", "type": "number", "required": false, "description": "the id of the geofence where the activity took place", "example": 767676, "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "the id of the device which is performing the activities w.r.t the geofence", "example": 87676, "enum": [] } ], "example": { "data": [ { "entryLongitude": 28.8765, "entryLatitude": 56.8765, "exitLongitude": 38.8765, "exitLatitude": 46.8765, "entryTimestamp": 1580105880, "exitTimestamp": 1580105880, "geofenceName": "my geofence", "geofenceId": 767676 } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofences/activities?deviceId=51777%2C89777&startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofences/activities?deviceId=51777%2C89777&startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofences/activities?deviceId=51777%2C89777&startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofences/activities?deviceId=51777%2C89777&startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofences/activities?deviceId=51777%2C89777&startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 22, "generationGroup": "intouch-get-geofences-activities-5e4475de72", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Delete A Geofence. - Identity: `api-operation:intouch-delete-geofences-id-delete-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-geofences-id-delete-a-geofence - State model: stateful ```json { "slug": "intouch-delete-geofences-id-delete-a-geofence", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "DELETE", "path": "/geofences/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofences/1", "operationId": null, "summary": "Delete A Geofence.", "description": "This API helps to delete a geofence.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofences/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofences/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/geofences/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofences/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/geofences/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 8, "generationGroup": "intouch-delete-geofences-id-ac8cb53c93", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Get A Single Or Multiple Geofence(s). - Identity: `api-operation:intouch-get-geofences-id-get-a-single-or-multiple-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s - State model: stateful ```json { "slug": "intouch-get-geofences-id-get-a-single-or-multiple-geofence-s", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/geofences/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofences/1", "operationId": null, "summary": "Get A Single Or Multiple Geofence(s).", "description": "This API helps to fetch the details of a particular geofence", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id. This path variable will take precedence even if multiple geofence ids are passed in the query param.", "example": "1", "enum": [] }, { "name": "id", "in": "query", "required": false, "type": "string", "description": "geofence id. Use this if you want to get details of specific multiple geofence IDs.", "example": "51777,89777", "enum": [] }, { "name": "ignoreGeometry", "in": "query", "required": false, "type": "boolean", "description": "Non mandatory field, boolean value to fetch geometry details.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "Geofence ID", "example": "1", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the geofence.", "example": "market", "enum": [] }, { "name": "data[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geometry.type", "type": "string", "required": false, "description": "This defines the type of geofence, it can be point or polygon.", "example": "Point", "enum": [] }, { "name": "data[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].type", "type": "string", "required": false, "description": "Depending on the type of geofence this value can be Circle(buffer > 50 meters), Polygon or Point(buffer = 50 mtrs)", "example": "Circle", "enum": [] }, { "name": "data[].buffer", "type": "number", "required": false, "description": "Radius(in meters) of a circlular geofence", "example": 65.76, "enum": [] }, { "name": "data[].creationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was created.", "example": "1700000000000", "enum": [] }, { "name": "data[].updationTime", "type": "number", "required": false, "description": "timestamp, in seconds, at which the geofence was updated.", "example": "1700000000000", "enum": [] } ], "example": { "data": [ { "id": "1", "name": "market", "geometry": { "type": "Point", "coordinates": [ 77.456, 28.2345 ] }, "type": "Circle", "buffer": 65.76, "creationTime": "1", "updationTime": "1" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofences/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofences/1\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/geofences/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofences/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/geofences/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 21, "generationGroup": "intouch-get-geofences-id-1d8903bbf6", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Update A Geofence. - Identity: `api-operation:intouch-post-geofences-id-update-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofences-id-update-a-geofence - State model: stateful ```json { "slug": "intouch-post-geofences-id-update-a-geofence", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/geofences/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/geofences/1", "operationId": null, "summary": "Update A Geofence.", "description": "This API helps to update a particular geofence.", "tags": [ "geofence" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "geofence id.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/form-data" ], "fields": [ { "name": "name", "type": "string", "required": false, "description": "Name of the geofence.", "example": "market", "enum": [] }, { "name": "buffer", "type": "integer", "required": false, "description": "Buffer is nothing but radius in meters. If passed then by default the system will create a circle geofence. If buffer is not passed then by default the system will create a 'point' type geofence with radius as 50 meters", "example": 1000, "enum": [] }, { "name": "geometry", "type": "string", "required": false, "description": "This is a geoJSON string. You can pass here either 'Point' or 'Polygon'. Point is used for circular geofence, and Polygon is used for a multiple point polygon geofence", "example": "28.612964,77.229463", "enum": [] } ], "example": { "name": "market", "buffer": 1000, "geometry": { "type": "Point", "coordinates": [ 77.2334, 28.7676 ] } } }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/geofences/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/geofences/1\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/geofences/1\",\n headers=headers,\n json={\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/geofences/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/geofences/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"market\",\n \"buffer\": 1000,\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.2334,\n 28.7676\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-geofences-id-f5b16a893d", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will get all the groups for a user. - Identity: `api-operation:intouch-get-group-this-api-will-get-all-the-groups-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-group-this-api-will-get-all-the-groups-for-a-user - State model: stateful ```json { "slug": "intouch-get-group-this-api-will-get-all-the-groups-for-a-user", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.yaml", "sourceFingerprint": "0ce822e24d55afb0b8d031f312544296e051e9eb3bfc859298a2f316330448ea", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/group", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/group", "operationId": null, "summary": "This API will get all the groups for a user.", "description": "Based on the passed token key, the API will return the list of all groups.", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "string", "description": "This is the alarm's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all alarm configurations in the account. You can pass single value or comma separated alarm IDs for multiple values.", "example": "23889,89876", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "This is device ID. API will return data based on the configs set for the passed device IDs. You can pass a single device ID or comma seperated multiple device IDs.", "example": "24567,10018", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "This is alarm type. API will return data based on the passed alarm types. You can pass a single alarm type or comma seperated multiple alarm types.", "example": "177,90", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "This is group ID", "example": 7656, "enum": [] }, { "name": "data[].deviceId", "type": "array", "required": false, "description": "Device ID(s) which associated with the group.", "example": [ 67700, 8987 ], "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the group", "example": "my group", "enum": [] }, { "name": "data[].createdOn", "type": "number", "required": false, "description": "Time at which the group got created.", "example": 1567654565, "enum": [] }, { "name": "data[].updatedOn", "type": "integer", "required": false, "description": "Time at which the group got updated.", "example": 1567654565, "enum": [] }, { "name": "data[].colorCode", "type": "string", "required": false, "description": "color associated with the group", "example": "example", "enum": [] } ], "example": { "data": [ { "id": 7656, "deviceId": [ 67700, 8987 ], "name": "my group", "createdOn": 1567654565, "updatedOn": 1567654565, "colorCode": "example" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/group' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/group\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/group\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/group\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/group\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 18, "generationGroup": "intouch-get-group-cd45df4f32", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will create a group. - Identity: `api-operation:intouch-post-group-this-api-will-create-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-group-this-api-will-create-a-group - State model: stateful ```json { "slug": "intouch-post-group-this-api-will-create-a-group", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.yaml", "sourceFingerprint": "0ce822e24d55afb0b8d031f312544296e051e9eb3bfc859298a2f316330448ea", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/group", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/group?name=example", "operationId": null, "summary": "This API will create a group.", "description": "Based on the input parameters provided to this POST group API, a new group will get created for a single or multiple devices", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "name", "in": "query", "required": true, "type": "string", "description": "This the name of the group which you want to create.", "example": "example", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "array", "description": "These are the IDs of the devices which you want to have in this group. You can pass a single device id or a set of multiple ids separated by comma.", "example": [ 100967658798 ], "enum": [] }, { "name": "colorCode", "in": "query", "required": false, "type": "string", "description": "This the color code(in hex format) which you want to associated with the group.", "example": "#24545", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found or invalid device id", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/group?name=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/group?name=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/group?name=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/group?name=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/group?name=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-group-20d5915253", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Deletes a group - Identity: `api-operation:intouch-delete-group-id-deletes-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-group-id-deletes-a-group - State model: stateful ```json { "slug": "intouch-delete-group-id-deletes-a-group", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.yaml", "sourceFingerprint": "0ce822e24d55afb0b8d031f312544296e051e9eb3bfc859298a2f316330448ea", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "DELETE", "path": "/group/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/group/1", "operationId": null, "summary": "Deletes a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "id of the group which you want to delete", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "204", "description": "No Content Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/group/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/group/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/group/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/group/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/group/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 9, "generationGroup": "intouch-delete-group-id-66dadd4bb8", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Updates a group - Identity: `api-operation:intouch-post-group-id-updates-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-group-id-updates-a-group - State model: stateful ```json { "slug": "intouch-post-group-id-updates-a-group", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.yaml", "sourceFingerprint": "0ce822e24d55afb0b8d031f312544296e051e9eb3bfc859298a2f316330448ea", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/group/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/group/1?name=example", "operationId": null, "summary": "Updates a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "number", "description": "This the ID of the group which you want to update.", "example": "1", "enum": [] }, { "name": "name", "in": "query", "required": true, "type": "string", "description": "This the name of the group which you want to update.", "example": "example", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "array", "description": "These are the IDs of the devices which you want to update in this group. You can pass a single device id or a set of multiple ids separated by comma.", "example": [ 100967658798 ], "enum": [] }, { "name": "colorCode", "in": "query", "required": false, "type": "string", "description": "This the color code(in hex format) which you want to associated with the group.", "example": "#24545", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/group/1?name=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/group/1?name=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/group/1?name=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/group/1?name=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/group/1?name=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-group-id-6f0e4605af", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will get all the groups for a user. - Identity: `api-operation:intouch-get-groups-this-api-will-get-all-the-groups-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-groups-this-api-will-get-all-the-groups-for-a-user - State model: stateful ```json { "slug": "intouch-get-groups-this-api-will-get-all-the-groups-for-a-user", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.json", "sourceFingerprint": "669b74b917e37baa2cafdb2411c242905e2b6d41de32726767a387c1838ea87d", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/groups", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/groups", "operationId": null, "summary": "This API will get all the groups for a user.", "description": "Based on the passed token key, the API will return the list of all groups.", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "query", "required": false, "type": "string", "description": "This is the alarm's ID, a non-mandatory parameter. If not passed then by default the API will return the list of all alarm configurations in the account. You can pass single value or comma separated alarm IDs for multiple values.", "example": "23889,89876", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "This is device ID. API will return data based on the configs set for the passed device IDs. You can pass a single device ID or comma seperated multiple device IDs.", "example": "24567,10018", "enum": [] }, { "name": "alarmType", "in": "query", "required": false, "type": "string", "description": "This is alarm type. API will return data based on the passed alarm types. You can pass a single alarm type or comma seperated multiple alarm types.", "example": "177,90", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "number", "required": false, "description": "This is group ID", "example": 7656, "enum": [] }, { "name": "data[].deviceId", "type": "array", "required": false, "description": "Device ID(s) which associated with the group.", "example": [ 67700, 8987 ], "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the group", "example": "my group", "enum": [] }, { "name": "data[].createdOn", "type": "number", "required": false, "description": "Time at which the group got created.", "example": 1567654565, "enum": [] }, { "name": "data[].updatedOn", "type": "integer", "required": false, "description": "Time at which the group got updated.", "example": 1567654565, "enum": [] }, { "name": "data[].colorCode", "type": "string", "required": false, "description": "color associated with the group", "example": "example", "enum": [] } ], "example": { "data": [ { "id": 7656, "deviceId": [ 67700, 8987 ], "name": "my group", "createdOn": 1567654565, "updatedOn": 1567654565, "colorCode": "example" } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/groups' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/groups\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/groups\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/groups\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/groups\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 18, "generationGroup": "intouch-get-groups-5f103c22ec", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will create a group. - Identity: `api-operation:intouch-post-groups-this-api-will-create-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-groups-this-api-will-create-a-group - State model: stateful ```json { "slug": "intouch-post-groups-this-api-will-create-a-group", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.json", "sourceFingerprint": "669b74b917e37baa2cafdb2411c242905e2b6d41de32726767a387c1838ea87d", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/groups", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/groups?name=example", "operationId": null, "summary": "This API will create a group.", "description": "Based on the input parameters provided to this POST group API, a new group will get created for a single or multiple devices", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "name", "in": "query", "required": true, "type": "string", "description": "This the name of the group which you want to create.", "example": "example", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "array", "description": "These are the IDs of the devices which you want to have in this group. You can pass a single device id or a set of multiple ids separated by comma.", "example": [ "1009,6765,8798" ], "enum": [] }, { "name": "colorCode", "in": "query", "required": false, "type": "string", "description": "This the color code(in hex format) which you want to associated with the group.", "example": "#24545", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found or invalid device id", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/groups?name=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/groups?name=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/groups?name=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/groups?name=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/groups?name=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-groups-50e5a70cf2", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Deletes a group - Identity: `api-operation:intouch-delete-groups-id-deletes-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-groups-id-deletes-a-group - State model: stateful ```json { "slug": "intouch-delete-groups-id-deletes-a-group", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.json", "sourceFingerprint": "669b74b917e37baa2cafdb2411c242905e2b6d41de32726767a387c1838ea87d", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "DELETE", "path": "/groups/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/groups/1", "operationId": null, "summary": "Deletes a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "description": "id of the group which you want to delete", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "204", "description": "No Content Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://intouch.mapmyindia.com/iot/api/groups/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/groups/1\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://intouch.mapmyindia.com/iot/api/groups/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/groups/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://intouch.mapmyindia.com/iot/api/groups/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 9, "generationGroup": "intouch-delete-groups-id-955f5ff6d2", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Updates a group - Identity: `api-operation:intouch-post-groups-id-updates-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-groups-id-updates-a-group - State model: stateful ```json { "slug": "intouch-post-groups-id-updates-a-group", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/group.json", "sourceFingerprint": "669b74b917e37baa2cafdb2411c242905e2b6d41de32726767a387c1838ea87d", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/groups/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/groups/1?name=example", "operationId": null, "summary": "Updates a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "group" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "number", "description": "This the ID of the group which you want to update.", "example": "1", "enum": [] }, { "name": "name", "in": "query", "required": true, "type": "string", "description": "This the name of the group which you want to update.", "example": "example", "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "array", "description": "These are the IDs of the devices which you want to update in this group. You can pass a single device id or a set of multiple ids separated by comma.", "example": [ "1009,6765,8798" ], "enum": [] }, { "name": "colorCode", "in": "query", "required": false, "type": "string", "description": "This the color code(in hex format) which you want to associated with the group.", "example": "#24545", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/groups/1?name=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/groups/1?name=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/groups/1?name=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/groups/1?name=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/groups/1?name=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 11, "generationGroup": "intouch-post-groups-id-1c5fee2419", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the list of all the nearby devices. - Identity: `api-operation:intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices - State model: stateful ```json { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/devices/nearby", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/devices/nearby?geometry=28.612964%2C77.229463", "operationId": null, "summary": "Gets the list of all the nearby devices.", "description": "This API returns accurate live location and related data of all the nearby vehicles, assets & people, within the specified buffer range, with help of connected devices/sensors/mobiles to provide location awareness to users of your app. The API provides real-time visibility of your tracked objects, giving not just location information, but multiple additional fields which add value to your application. The API is capable of being used for multiple use cases: be it for transport - logistics or for personnel information services for all kinds of web or mobile development platforms.", "tags": [ "nearby" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "buffer", "in": "query", "required": false, "type": "number", "description": "buffer distance (in meters) upto which the api will return the nearby vehicles/assets. Non mandatory attribute. If not sent by default buffer distance will be taken as 50 meters.", "example": "1", "enum": [] }, { "name": "geometry", "in": "query", "required": true, "type": "string", "description": "location coordinates in geojson format. vehicles/assets will be fetched around this location as per the configured buffer distance.", "example": "28.612964,77.229463", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].id", "type": "integer", "required": false, "description": "", "example": "1", "enum": [] }, { "name": "data[].active", "type": "string", "required": false, "description": "device active status", "example": true, "enum": [ true, false ] }, { "name": "data[].status", "type": "number", "required": false, "description": "device movement status 1 -> moving 2 -> idle i,e ignition is on and speed stopped i,e engine is off 4 -> towing i,e ignition is off, but vehicle speed 5 -> no data i,e no communication of device with intouch server or no GPRS signal 6 -> power off 7 -> no gps i,e satellite count is less than 4 8 -> on trip i,e device is currently on an active trip 9 -> free vehicle i,e device is not on any active trip", "example": 1, "enum": [] }, { "name": "data[].vehicleBattery", "type": "number", "required": false, "description": "", "example": 13568.98, "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.gpsTime", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].location.gprsTime", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].location.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].location.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].location.address", "type": "string", "required": false, "description": "", "example": "244, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 2 m from Usha Exim Pvt Ltd pin-110020", "enum": [] }, { "name": "data[].location.altitude", "type": "number", "required": false, "description": "", "example": 234, "enum": [] }, { "name": "data[].location.heading", "type": "number", "required": false, "description": "", "example": 196.868, "enum": [] }, { "name": "data[].location.speedKph", "type": "number", "required": false, "description": "", "example": 27.85, "enum": [] }, { "name": "data[].location.odometer", "type": "number", "required": false, "description": "", "example": 12548.22, "enum": [] }, { "name": "data[].deviceDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceDetails.name", "type": "string", "required": false, "description": "", "example": "DL3CCM8097", "enum": [] }, { "name": "data[].deviceDetails.registrationNumber", "type": "string", "required": false, "description": "", "example": "DL3CCM8097", "enum": [] }, { "name": "data[].deviceDetails.deviceType", "type": "string", "required": false, "description": "", "example": "car", "enum": [ "car", "truck", "bus", "bike", "tracktor", "JCB", "excavator" ] }, { "name": "data[].alerts", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].alerts.deviceId", "type": "number", "required": false, "description": "Will come only in case of /alarmLog GET API response", "example": 8989, "enum": [] }, { "name": "data[].alerts.timestamp", "type": "number", "required": false, "description": "Time at which the alert got generated", "example": "1700000000000", "enum": [] }, { "name": "data[].alerts.latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].alerts.longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].alerts.address", "type": "string", "required": false, "description": "Location address at which the alarm got generated", "example": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "enum": [] }, { "name": "data[].alerts.alarmType", "type": "integer", "required": false, "description": "Type of alarm to create. Following are the alarm types & their corresponding IDs. IGNITION: 21, OVERSPEED: 22, UNPLUGGED: 23, PANIC: 24, GEOFENCE: 26, STOPPAGE: 27, IDLE: 28, TOWING: 29, GPRS CONNECTIVITY: 126, VEHICLE BATTERY: 129, MILEAGE: 133, GPS CONNECTIVITY: 146, DISTANCE COVERED: 151, INTERNAL BATTERY VOLTAGE:161", "example": 28, "enum": [] }, { "name": "data[].alerts.limit", "type": "integer", "required": false, "description": "Alarm limit as set in the config. For example, if an overspeed alarm set on limit of 44 km/hr in the alarm config setting, then this attribute will return 44 km/hr", "example": 44, "enum": [] }, { "name": "data[].alerts.duration", "type": "integer", "required": false, "description": "Alarm duration limit as set in the alarm config section. For example, if duration of overspeed alarm is set as 20 secs, then the alarm will generate when the vehicle overspeeds for a duration of 20 secs", "example": 20, "enum": [] }, { "name": "data[].alerts.actualLimit", "type": "integer", "required": false, "description": "The actual data received from the device at that particular moment when the alarm got generated", "example": 57, "enum": [] }, { "name": "data[].alerts.actualDuration", "type": "integer", "required": false, "description": "Actual duration for which the device breached the alarm config limit", "example": 25, "enum": [] }, { "name": "data[].alerts.severity", "type": "integer", "required": false, "description": "0 - Low Severity. 1 - High Severity", "example": 1, "enum": [] }, { "name": "data[].alerts.data", "type": "integer", "required": false, "description": "Describes the state of the alarm. IGNITION(type = 21), 0: OFF & 1: ON. AC(type=25), 0: OFF, 1: ON. GEOFENCE(type=26), 1: Entry & Exit Geofence 2: Entry Geofence, 3: Leaving Geofence & 4: Long Stay In Geofence", "example": 1, "enum": [] }, { "name": "data[].alerts.geofenceId", "type": "number", "required": false, "description": "This is the ID of the geofence for which the alarm got generated. This will come only when the 'type' field return 26 i,e geofence.", "example": 987876, "enum": [] }, { "name": "data[].canInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].canInfo.calcEngineVal", "type": "integer", "required": false, "description": "", "example": 0, "enum": [] }, { "name": "data[].canInfo.greenDriveType", "type": "string", "required": false, "description": "HA(Harsh acceleration), HB(Harsh Breaking), HC(Harsh Cornering)", "example": "HA", "enum": [] }, { "name": "data[].canInfo.canTimestamp", "type": "number", "required": false, "description": "Exact time at which the CAN data got generated by the device", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.coolantTemp", "type": "number", "required": false, "description": "", "example": 87, "enum": [] }, { "name": "data[].canInfo.engineRPM", "type": "integer", "required": false, "description": "", "example": 796, "enum": [] }, { "name": "data[].canInfo.accelPedal", "type": "number", "required": false, "description": "This is accelerator pedal value in percentage.", "example": 8.4, "enum": [] }, { "name": "data[].canInfo.parkBrake", "type": "number", "required": false, "description": "This is parking break. 0 means parking break is disengaged & 1 means parking break is engaged", "example": 0, "enum": [] }, { "name": "data[].canInfo.breakPedal", "type": "number", "required": false, "description": "1 means break pedal is engaged & 0 means break pedal is disengaged", "example": 0, "enum": [] }, { "name": "data[].canInfo.fuelLevel", "type": "integer", "required": false, "description": "Level of the fuel in liters", "example": 14, "enum": [] }, { "name": "data[].canInfo.driverDoor", "type": "number", "required": false, "description": "1 means door is open & 0 means door is closed", "example": 0, "enum": [] }, { "name": "data[].canInfo.headLights", "type": "number", "required": false, "description": "1 means ON & 0 means OFF", "example": 1, "enum": [] }, { "name": "data[].canInfo.blinker", "type": "number", "required": false, "description": "1 means ON & 0 means OFF", "example": 0, "enum": [] }, { "name": "data[].canInfo.gearState", "type": "number", "required": false, "description": "0 is Neutral, 1 is Drive, 2 is Sports, 3 is Reverse", "example": "1700000000000", "enum": [] }, { "name": "data[].canInfo.intakeAirTemp", "type": "number", "required": false, "description": "This is the intake air temperature of the engine.", "example": 62, "enum": [] }, { "name": "data[].canInfo.intakeabsolutePress", "type": "number", "required": false, "description": "This is the intake absolute pressure of the engine. It is defined in Pa(Pascal)", "example": 42, "enum": [] }, { "name": "data[].canInfo.ac", "type": "integer", "required": false, "description": "1 means AC is ON & 0 means AC is OFF", "example": 0, "enum": [] }, { "name": "data[].canInfo.fuelConsAVG", "type": "integer", "required": false, "description": "Fuel constant average", "example": 99, "enum": [] }, { "name": "data[].deviceFaults", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].deviceFaults[].code", "type": "integer", "required": false, "description": "", "example": 1001, "enum": [] }, { "name": "data[].deviceFaults[].timetamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].deviceFaults[].status", "type": "integer", "required": false, "description": "Describes the status of the fault which was detected. 0: OPEN & 1: Close.", "example": 0, "enum": [] }, { "name": "data[].deviceFaults[].closedOn", "type": "number", "required": false, "description": "", "example": 556567872, "enum": [] }, { "name": "data[].currentGeofence", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].todaysDrive", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].todaysDrive.todayKms", "type": "number", "required": false, "description": "", "example": 55.67, "enum": [] }, { "name": "data[].todaysDrive.todayMovementTime", "type": "number", "required": false, "description": "Value is in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].todaysDrive.todayIdleTime", "type": "number", "required": false, "description": "Value is in seconds", "example": "1700000000000", "enum": [] }, { "name": "data[].todaysDrive.todayDriveCount", "type": "integer", "required": false, "description": "", "example": 5, "enum": [] } ], "example": { "data": [ { "id": "1", "active": true, "status": 1, "vehicleBattery": 13568.98, "location": { "gpsTime": 1574736922, "gprsTime": 1574736922, "latitude": 28.551255163434, "longitude": 77.2687, "address": "244, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 2 m from Usha Exim Pvt Ltd pin-110020", "altitude": 234, "heading": 196.868, "speedKph": 27.85 }, "deviceDetails": { "name": "DL3CCM8097", "registrationNumber": "DL3CCM8097", "deviceType": "car" }, "alerts": { "deviceId": 8989, "timestamp": 1577589789, "latitude": 28.550962381896, "longitude": 77.26890675033, "address": "237, Okhla Industrial Estate Phase 3, New Delhi, Delhi. 19 m from Wipro BPO Corporate Office pin-110020", "alarmType": 28, "limit": 44, "duration": 20 }, "canInfo": { "calcEngineVal": 0, "greenDriveType": "HA", "canTimestamp": 1568362645, "coolantTemp": 87, "engineRPM": 796, "accelPedal": 8.4, "parkBrake": 0, "breakPedal": 0 } } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid device ID supplied or invalid data type. For example, input attribute \"buffer\" is of type number but string value gets passed or invalid coordinates location for location type \"polygon\" in geometry geojson object etc.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/devices/nearby?geometry=28.612964%2C77.229463' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/devices/nearby?geometry=28.612964%2C77.229463\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/devices/nearby?geometry=28.612964%2C77.229463\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/devices/nearby?geometry=28.612964%2C77.229463\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/devices/nearby?geometry=28.612964%2C77.229463\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 72, "generationGroup": "intouch-get-devices-nearby-8ab0df890e", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will get all the trips for a user. - Identity: `api-operation:intouch-get-trips-this-api-will-get-all-the-trips-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user - State model: stateful ```json { "slug": "intouch-get-trips-this-api-will-get-all-the-trips-for-a-user", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/trips", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/trips", "operationId": null, "summary": "This API will get all the trips for a user.", "description": "Based on the passed token key, the API will return the list of all the trips.", "tags": [ "trips" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "limit", "in": "query", "required": false, "type": "integer", "description": "will limit the records as per the passed value.", "example": 10, "enum": [] }, { "name": "status", "in": "query", "required": false, "type": "integer", "description": "pass 1 to get active trips & 2 for completed trips.", "example": 1, "enum": [] }, { "name": "deviceId", "in": "query", "required": false, "type": "string", "description": "Pass device IDs if you want to get trips associated with partcular devices.", "example": "2223,7654", "enum": [] }, { "name": "startTime", "in": "query", "required": false, "type": "number", "description": "Pass if you wnat to get trips after this start timestamp.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": false, "type": "number", "description": "Pass if you wnat to get trips after this start timestamp.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].tripId", "type": "string", "required": false, "description": "id of the trip", "example": "5ef5a9e98a92df3a4a894db0", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "id of the device which is associated with the trip.", "example": "1", "enum": [] }, { "name": "data[].status", "type": "integer", "required": false, "description": "1 - active trip. 2 - completed trip", "example": 1, "enum": [] }, { "name": "data[].closureType", "type": "integer", "required": false, "description": "type of trip closure. 1 - trip will get closed based on the planned end time. 2 - trip will close when the device enters the destination area/geofence. 3 - trip will get closed manually by the user", "example": 1, "enum": [] }, { "name": "data[].forceClose", "type": "boolean", "required": false, "description": "boolean value - if true then trip will get automatically closed as soon as the device gets associated with another trip.", "example": "true", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the trip", "example": "my trip", "enum": [] }, { "name": "data[].polylinePoints", "type": "object", "required": false, "description": "This is the route polyline. It Will get returned for single trip only if polyline query param is set to true in the API.", "example": "example", "enum": [] }, { "name": "data[].polylinePoints.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].polylinePoints.coordinates[].lng", "type": "number", "required": false, "description": "longitude point", "example": "77.229463", "enum": [] }, { "name": "data[].polylinePoints.coordinates[].lat", "type": "number", "required": false, "description": "latititude point", "example": "28.612964", "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "location data of the device. This will get returned only for a single trip when the 'deviceLocation' query param is set to true in the API.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.gpsTime", "type": "number", "required": false, "description": "gps time of the device", "example": "1700000000000", "enum": [] }, { "name": "data[].location.gprsTime", "type": "number", "required": false, "description": "gps time of the device", "example": "1700000000000", "enum": [] }, { "name": "data[].location.latitude", "type": "number", "required": false, "description": "latitude", "example": "28.612964", "enum": [] }, { "name": "data[].location.longitude", "type": "number", "required": false, "description": "longitude", "example": "77.229463", "enum": [] }, { "name": "data[].location.address", "type": "string", "required": false, "description": "last location address of the device", "example": "example", "enum": [] }, { "name": "data[].location.status", "type": "number", "required": false, "description": "movement status of the device 1 is Moving 2 is idle 3 is stopped 4 is towing 5 is No Data 6 is power off i,e the device's battery is disconnected from the vehicle battery 7 is No GPS 12 is Activation Pending i,e the device is not yet active and is yet to send the first ping.", "example": 3, "enum": [] }, { "name": "data[].positionEvents", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].positionEvents[].timestamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].positionEvents[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].positionEvents[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].destination", "type": "object", "required": false, "description": "This object will only get returned if the user has given a specific desntination as input while creating a trip", "example": "example", "enum": [] }, { "name": "data[].destination.geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].destination.geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "data[].destination.geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].destination.radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "data[].destination.plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.name", "type": "string", "required": false, "description": "name of the geofence point", "example": "example", "enum": [] }, { "name": "data[].destination.arrivalTime", "type": "number", "required": false, "description": "actual timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.departureTime", "type": "number", "required": false, "description": "departure timestamp at which device leaves the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.address", "type": "string", "required": false, "description": "address of the desntination point", "example": "example", "enum": [] }, { "name": "data[].destination.time", "type": "number", "required": false, "description": "planned timestamp taken to reach the destination from previous point", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.distance", "type": "number", "required": false, "description": "planned distance taken to reach the destination from previous point", "example": "1", "enum": [] }, { "name": "data[].destination.pointName", "type": "string", "required": false, "description": "name given to the destination point.", "example": "example", "enum": [] }, { "name": "data[].destination.metadata", "type": "object", "required": false, "description": "will get returned only if it was mentioned while creating a trip.", "example": "example", "enum": [] }, { "name": "data[].destination.metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "data[].geofences", "type": "array", "required": false, "description": "various points of the trip. This will only get returned in case the these geofence points were explicitly mentioned while creating a trip", "example": "example", "enum": [] }, { "name": "data[].geofences[].geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geofences[].geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "data[].geofences[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geofences[].radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "data[].geofences[].plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].name", "type": "string", "required": false, "description": "name of the geofence point", "example": "example", "enum": [] }, { "name": "data[].geofences[].arrivalTime", "type": "number", "required": false, "description": "actual timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].departureTime", "type": "number", "required": false, "description": "departure timestamp at which device leaves the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].address", "type": "string", "required": false, "description": "address of the desntination point", "example": "example", "enum": [] }, { "name": "data[].geofences[].time", "type": "number", "required": false, "description": "planned timestamp taken to reach the destination from previous point", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].distance", "type": "number", "required": false, "description": "planned distance taken to reach the destination from previous point", "example": "1", "enum": [] }, { "name": "data[].geofences[].pointName", "type": "string", "required": false, "description": "name given to the destination point.", "example": "example", "enum": [] }, { "name": "data[].geofences[].metadata", "type": "object", "required": false, "description": "will get returned only if it was mentioned while creating a trip.", "example": "example", "enum": [] }, { "name": "data[].geofences[].metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "data[].start", "type": "object", "required": false, "description": "start point of the trip. This will only get returned in case the start point was explicitly mentioned while creating a trip", "example": "example", "enum": [] }, { "name": "data[].start.geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].start.geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "data[].start.geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].start.radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "data[].start.plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].start.name", "type": "string", "required": false, "description": "name of the geofence point", "example": "example", "enum": [] }, { "name": "data[].start.arrivalTime", "type": "number", "required": false, "description": "actual timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].start.departureTime", "type": "number", "required": false, "description": "departure timestamp at which device leaves the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].start.address", "type": "string", "required": false, "description": "address of the desntination point", "example": "example", "enum": [] }, { "name": "data[].start.time", "type": "number", "required": false, "description": "planned timestamp taken to reach the destination from previous point", "example": "1700000000000", "enum": [] }, { "name": "data[].start.distance", "type": "number", "required": false, "description": "planned distance taken to reach the destination from previous point", "example": "1", "enum": [] }, { "name": "data[].start.pointName", "type": "string", "required": false, "description": "name given to the destination point.", "example": "example", "enum": [] }, { "name": "data[].start.metadata", "type": "object", "required": false, "description": "will get returned only if it was mentioned while creating a trip.", "example": "example", "enum": [] }, { "name": "data[].start.metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "data[].summary", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].summary.startedOn", "type": "number", "required": false, "description": "the actual start timestamp of the trip.", "example": "1", "enum": [] }, { "name": "data[].summary.duration", "type": "number", "required": false, "description": "the actual duration time (in seconds) of the trip.", "example": "1", "enum": [] }, { "name": "data[].summary.distance", "type": "number", "required": false, "description": "the actual distance (in meters) covered in the trip.", "example": 7876.33, "enum": [] }, { "name": "data[].summary.endedOn", "type": "number", "required": false, "description": "the actual end timestamp of the trip.", "example": 1593157994, "enum": [] }, { "name": "data[].summary.delayedBy", "type": "number", "required": false, "description": "the actual timestamp by which the trip got delayed.", "example": "1", "enum": [] }, { "name": "data[].summary.plannedEndTime", "type": "number", "required": false, "description": "the planned end timestamp of the trip.", "example": "1700000000000", "enum": [] }, { "name": "data[].summary.plannedStartTime", "type": "number", "required": false, "description": "the planned start timestamp of the trip.", "example": "1700000000000", "enum": [] }, { "name": "data[].summary.plannedDuration", "type": "number", "required": false, "description": "the planned duration time (in seconds) of the trip.", "example": "1", "enum": [] }, { "name": "data[].summary.plannedDistance", "type": "number", "required": false, "description": "the planned distance (in meters) of the trip.", "example": "1", "enum": [] } ], "example": { "data": [ { "tripId": "5ef5a9e98a92df3a4a894db0", "deviceId": "1", "status": 1, "closureType": 1, "forceClose": "true", "name": "my trip", "polylinePoints": { "coordinates": [] }, "location": { "gpsTime": 1593261959, "gprsTime": 1593261959, "latitude": 29.507586, "longitude": 79.507586, "address": "example", "status": 3 } } ] } }, { "status": "203", "description": "Device Not Found", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/trips' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/trips\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/trips\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/trips\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/trips\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 90, "generationGroup": "intouch-get-trips-b4e3c3a7f6", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · This API will create a trip. - Identity: `api-operation:intouch-post-trips-this-api-will-create-a-trip` - Canonical: https://developer.mappls.com/api-reference/intouch-post-trips-this-api-will-create-a-trip - State model: stateful ```json { "slug": "intouch-post-trips-this-api-will-create-a-trip", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/trips", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/trips", "operationId": null, "summary": "This API will create a trip.", "description": "Based on the input parameters provided, a new trip will get created.", "tags": [ "trips" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "application/raw" ], "fields": [ { "name": "deviceId", "type": "number", "required": false, "description": "id of the device for which the trip is getting created.", "example": "1", "enum": [] }, { "name": "name", "type": "string", "required": false, "description": "name of the trip", "example": "example", "enum": [] }, { "name": "forceClose", "type": "boolean", "required": false, "description": "boolean value - if true then trip will get automatically closed as soon as the device gets associated with another trip.", "example": true, "enum": [] }, { "name": "closureType", "type": "integer", "required": false, "description": "type of trip closure. 1 - trip will get closed based on the planned end time. 2 - trip will close when the device enters the destination area/geofence. 3 - trip will get closed manually by the user", "example": 1, "enum": [] }, { "name": "plannedEndTime", "type": "number", "required": false, "description": "tentative time when trip will end. Mandatory field when user selects closure type as 1", "example": "1700000000000", "enum": [] }, { "name": "metadata", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "destination", "type": "object", "required": false, "description": "Destination of the trip. This is not a mandatory. If the user does not provide this object still the trip will get created.", "example": "example", "enum": [] }, { "name": "destination.geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "destination.geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "destination.geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "destination.radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "destination.name", "type": "string", "required": false, "description": "name of the geofence/point", "example": "example", "enum": [] }, { "name": "destination.plannedTime", "type": "number", "required": false, "description": "planned time at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "destination.metadata", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "destination.metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "geofences", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "geofences[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geofences[].geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "geofences[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geofences[].radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "geofences[].name", "type": "string", "required": false, "description": "name of the geofence/point", "example": "example", "enum": [] }, { "name": "geofences[].plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "geofences[].metadata", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "geofences[].metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] } ], "example": { "deviceId": "1", "name": "example", "forceClose": true, "closureType": 1, "plannedEndTime": 1591891234, "metadata": { "myattribute": "sample text" }, "destination": { "geometry": { "type": "Point", "coordinates": [ 77.234, 28.456 ] }, "radius": 100, "name": "example", "plannedTime": "1", "metadata": { "myattribute": "sample text" } }, "geofences": [ { "geometry": { "type": "Point", "coordinates": [ 77.234, 28.456 ] }, "radius": 100, "name": "example", "plannedTime": "1700000000000", "metadata": { "myattribute": "sample text" } } ] } }, "responses": [ { "status": "201", "description": "Created", "fields": [], "example": null }, { "status": "203", "description": "Device Not Found or invalid device id", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/trips' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"deviceId\": \"1\",\n \"name\": \"example\",\n \"forceClose\": true,\n \"closureType\": 1,\n \"plannedEndTime\": 1591891234,\n \"metadata\": {\n \"myattribute\": \"sample text\"\n },\n \"destination\": {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n },\n \"geofences\": [\n {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1700000000000\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n }\n ]\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/trips\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"deviceId\": \"1\",\n \"name\": \"example\",\n \"forceClose\": true,\n \"closureType\": 1,\n \"plannedEndTime\": 1591891234,\n \"metadata\": {\n \"myattribute\": \"sample text\"\n },\n \"destination\": {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n },\n \"geofences\": [\n {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1700000000000\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n }\n ]\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/trips\",\n headers=headers,\n json={\n \"deviceId\": \"1\",\n \"name\": \"example\",\n \"forceClose\": true,\n \"closureType\": 1,\n \"plannedEndTime\": 1591891234,\n \"metadata\": {\n \"myattribute\": \"sample text\"\n },\n \"destination\": {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n },\n \"geofences\": [\n {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1700000000000\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n }\n ]\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/trips\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"deviceId\": \"1\",\n \"name\": \"example\",\n \"forceClose\": true,\n \"closureType\": 1,\n \"plannedEndTime\": 1591891234,\n \"metadata\": {\n \"myattribute\": \"sample text\"\n },\n \"destination\": {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n },\n \"geofences\": [\n {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1700000000000\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n }\n ]\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/trips\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"deviceId\": \"1\",\n \"name\": \"example\",\n \"forceClose\": true,\n \"closureType\": 1,\n \"plannedEndTime\": 1591891234,\n \"metadata\": {\n \"myattribute\": \"sample text\"\n },\n \"destination\": {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n },\n \"geofences\": [\n {\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n 77.234,\n 28.456\n ]\n },\n \"radius\": 100,\n \"name\": \"example\",\n \"plannedTime\": \"1700000000000\",\n \"metadata\": {\n \"myattribute\": \"sample text\"\n }\n }\n ]\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 33, "generationGroup": "intouch-post-trips-ceee553f9c", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Gets the details of a single trip - Identity: `api-operation:intouch-get-trips-id-gets-the-details-of-a-single-trip` - Canonical: https://developer.mappls.com/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip - State model: stateful ```json { "slug": "intouch-get-trips-id-gets-the-details-of-a-single-trip", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "GET", "path": "/trips/{id}", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/trips/1", "operationId": null, "summary": "Gets the details of a single trip", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "trips" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "number", "description": "This is the ID of the trip which you want to fetch.", "example": "1", "enum": [] }, { "name": "polyline", "in": "query", "required": false, "type": "boolean", "description": "Will return the entire polyline locations of the route which was created for the trip.", "example": "true", "enum": [] }, { "name": "deviceLocation", "in": "query", "required": false, "type": "boolean", "description": "Will return the last know device location details", "example": "MMI000", "enum": [] }, { "name": "event", "in": "query", "required": false, "type": "boolean", "description": "Will return all the position events of the device.", "example": "true", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [ { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].tripId", "type": "string", "required": false, "description": "id of the trip", "example": "5ef5a9e98a92df3a4a894db0", "enum": [] }, { "name": "data[].deviceId", "type": "number", "required": false, "description": "id of the device which is associated with the trip.", "example": "1", "enum": [] }, { "name": "data[].status", "type": "integer", "required": false, "description": "1 - active trip. 2 - completed trip", "example": 1, "enum": [] }, { "name": "data[].closureType", "type": "integer", "required": false, "description": "type of trip closure. 1 - trip will get closed based on the planned end time. 2 - trip will close when the device enters the destination area/geofence. 3 - trip will get closed manually by the user", "example": 1, "enum": [] }, { "name": "data[].forceClose", "type": "boolean", "required": false, "description": "boolean value - if true then trip will get automatically closed as soon as the device gets associated with another trip.", "example": "true", "enum": [] }, { "name": "data[].name", "type": "string", "required": false, "description": "name of the trip", "example": "my trip", "enum": [] }, { "name": "data[].polylinePoints", "type": "object", "required": false, "description": "This is the route polyline. It Will get returned for single trip only if polyline query param is set to true in the API.", "example": "example", "enum": [] }, { "name": "data[].polylinePoints.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].polylinePoints.coordinates[].lng", "type": "number", "required": false, "description": "longitude point", "example": "77.229463", "enum": [] }, { "name": "data[].polylinePoints.coordinates[].lat", "type": "number", "required": false, "description": "latititude point", "example": "28.612964", "enum": [] }, { "name": "data[].location", "type": "object", "required": false, "description": "location data of the device. This will get returned only for a single trip when the 'deviceLocation' query param is set to true in the API.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].location.gpsTime", "type": "number", "required": false, "description": "gps time of the device", "example": "1700000000000", "enum": [] }, { "name": "data[].location.gprsTime", "type": "number", "required": false, "description": "gps time of the device", "example": "1700000000000", "enum": [] }, { "name": "data[].location.latitude", "type": "number", "required": false, "description": "latitude", "example": "28.612964", "enum": [] }, { "name": "data[].location.longitude", "type": "number", "required": false, "description": "longitude", "example": "77.229463", "enum": [] }, { "name": "data[].location.address", "type": "string", "required": false, "description": "last location address of the device", "example": "example", "enum": [] }, { "name": "data[].location.status", "type": "number", "required": false, "description": "movement status of the device 1 is Moving 2 is idle 3 is stopped 4 is towing 5 is No Data 6 is power off i,e the device's battery is disconnected from the vehicle battery 7 is No GPS 12 is Activation Pending i,e the device is not yet active and is yet to send the first ping.", "example": 3, "enum": [] }, { "name": "data[].positionEvents", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].positionEvents[].timestamp", "type": "number", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data[].positionEvents[].longitude", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data[].positionEvents[].latitude", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data[].destination", "type": "object", "required": false, "description": "This object will only get returned if the user has given a specific desntination as input while creating a trip", "example": "example", "enum": [] }, { "name": "data[].destination.geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].destination.geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "data[].destination.geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].destination.radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "data[].destination.plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.name", "type": "string", "required": false, "description": "name of the geofence point", "example": "example", "enum": [] }, { "name": "data[].destination.arrivalTime", "type": "number", "required": false, "description": "actual timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.departureTime", "type": "number", "required": false, "description": "departure timestamp at which device leaves the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.address", "type": "string", "required": false, "description": "address of the desntination point", "example": "example", "enum": [] }, { "name": "data[].destination.time", "type": "number", "required": false, "description": "planned timestamp taken to reach the destination from previous point", "example": "1700000000000", "enum": [] }, { "name": "data[].destination.distance", "type": "number", "required": false, "description": "planned distance taken to reach the destination from previous point", "example": "1", "enum": [] }, { "name": "data[].destination.pointName", "type": "string", "required": false, "description": "name given to the destination point.", "example": "example", "enum": [] }, { "name": "data[].destination.metadata", "type": "object", "required": false, "description": "will get returned only if it was mentioned while creating a trip.", "example": "example", "enum": [] }, { "name": "data[].destination.metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "data[].geofences", "type": "array", "required": false, "description": "various points of the trip. This will only get returned in case the these geofence points were explicitly mentioned while creating a trip", "example": "example", "enum": [] }, { "name": "data[].geofences[].geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geofences[].geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "data[].geofences[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].geofences[].radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "data[].geofences[].plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].name", "type": "string", "required": false, "description": "name of the geofence point", "example": "example", "enum": [] }, { "name": "data[].geofences[].arrivalTime", "type": "number", "required": false, "description": "actual timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].departureTime", "type": "number", "required": false, "description": "departure timestamp at which device leaves the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].address", "type": "string", "required": false, "description": "address of the desntination point", "example": "example", "enum": [] }, { "name": "data[].geofences[].time", "type": "number", "required": false, "description": "planned timestamp taken to reach the destination from previous point", "example": "1700000000000", "enum": [] }, { "name": "data[].geofences[].distance", "type": "number", "required": false, "description": "planned distance taken to reach the destination from previous point", "example": "1", "enum": [] }, { "name": "data[].geofences[].pointName", "type": "string", "required": false, "description": "name given to the destination point.", "example": "example", "enum": [] }, { "name": "data[].geofences[].metadata", "type": "object", "required": false, "description": "will get returned only if it was mentioned while creating a trip.", "example": "example", "enum": [] }, { "name": "data[].geofences[].metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "data[].start", "type": "object", "required": false, "description": "start point of the trip. This will only get returned in case the start point was explicitly mentioned while creating a trip", "example": "example", "enum": [] }, { "name": "data[].start.geometry", "type": "object", "required": false, "description": "This is standard geo json format.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].start.geometry.type", "type": "string", "required": false, "description": "supports the following geometry types - Point, Polygon.", "example": "Point", "enum": [] }, { "name": "data[].start.geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data[].start.radius", "type": "number", "required": false, "description": "radius of the point", "example": 100, "enum": [] }, { "name": "data[].start.plannedTime", "type": "number", "required": false, "description": "planned timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].start.name", "type": "string", "required": false, "description": "name of the geofence point", "example": "example", "enum": [] }, { "name": "data[].start.arrivalTime", "type": "number", "required": false, "description": "actual timestamp at which device reach the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].start.departureTime", "type": "number", "required": false, "description": "departure timestamp at which device leaves the destination", "example": "1700000000000", "enum": [] }, { "name": "data[].start.address", "type": "string", "required": false, "description": "address of the desntination point", "example": "example", "enum": [] }, { "name": "data[].start.time", "type": "number", "required": false, "description": "planned timestamp taken to reach the destination from previous point", "example": "1700000000000", "enum": [] }, { "name": "data[].start.distance", "type": "number", "required": false, "description": "planned distance taken to reach the destination from previous point", "example": "1", "enum": [] }, { "name": "data[].start.pointName", "type": "string", "required": false, "description": "name given to the destination point.", "example": "example", "enum": [] }, { "name": "data[].start.metadata", "type": "object", "required": false, "description": "will get returned only if it was mentioned while creating a trip.", "example": "example", "enum": [] }, { "name": "data[].start.metadata.myattribute", "type": "string", "required": false, "description": "dummy meta data value. this can be any key-value data pair.", "example": "sample text", "enum": [] }, { "name": "data[].summary", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].summary.startedOn", "type": "number", "required": false, "description": "the actual start timestamp of the trip.", "example": "1", "enum": [] }, { "name": "data[].summary.duration", "type": "number", "required": false, "description": "the actual duration time (in seconds) of the trip.", "example": "1", "enum": [] }, { "name": "data[].summary.distance", "type": "number", "required": false, "description": "the actual distance (in meters) covered in the trip.", "example": 7876.33, "enum": [] }, { "name": "data[].summary.endedOn", "type": "number", "required": false, "description": "the actual end timestamp of the trip.", "example": 1593157994, "enum": [] }, { "name": "data[].summary.delayedBy", "type": "number", "required": false, "description": "the actual timestamp by which the trip got delayed.", "example": "1", "enum": [] }, { "name": "data[].summary.plannedEndTime", "type": "number", "required": false, "description": "the planned end timestamp of the trip.", "example": "1700000000000", "enum": [] }, { "name": "data[].summary.plannedStartTime", "type": "number", "required": false, "description": "the planned start timestamp of the trip.", "example": "1700000000000", "enum": [] }, { "name": "data[].summary.plannedDuration", "type": "number", "required": false, "description": "the planned duration time (in seconds) of the trip.", "example": "1", "enum": [] }, { "name": "data[].summary.plannedDistance", "type": "number", "required": false, "description": "the planned distance (in meters) of the trip.", "example": "1", "enum": [] } ], "example": { "data": [ { "tripId": "5ef5a9e98a92df3a4a894db0", "deviceId": "1", "status": 1, "closureType": 1, "forceClose": "true", "name": "my trip", "polylinePoints": { "coordinates": [] }, "location": { "gpsTime": 1593261959, "gprsTime": 1593261959, "latitude": 29.507586, "longitude": 79.507586, "address": "example", "status": 3 } } ] } }, { "status": "203", "description": "Invalid ID - Invalid trip id or trip id does not exist.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://intouch.mapmyindia.com/iot/api/trips/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/trips/1\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://intouch.mapmyindia.com/iot/api/trips/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/trips/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://intouch.mapmyindia.com/iot/api/trips/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 89, "generationGroup": "intouch-get-trips-id-0f2511ebf2", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · POST API to close a trip. - Identity: `api-operation:intouch-post-trips-id-close-post-api-to-close-a-trip` - Canonical: https://developer.mappls.com/api-reference/intouch-post-trips-id-close-post-api-to-close-a-trip - State model: stateful ```json { "slug": "intouch-post-trips-id-close-post-api-to-close-a-trip", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "specVersion": "3.0.1", "apiVersion": "2.0.0", "sourceGeneration": "v2-0-0", "method": "POST", "path": "/trips/{id}/close", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "requestUrl": "https://intouch.mapmyindia.com/iot/api/trips/1/close", "operationId": null, "summary": "POST API to close a trip.", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "tags": [ "trips" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerToken", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "number", "description": "This the ID of the trip which you want to close.", "example": "1", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK - successful operation", "fields": [], "example": null }, { "status": "203", "description": "invalid param. For eg; if trip id is not correct.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": "example", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "example", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "describes the type of error", "example": "example", "enum": [] } ], "example": { "status": "example", "message": "example", "error": "example" } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "404", "description": "URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://intouch.mapmyindia.com/iot/api/trips/1/close' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://intouch.mapmyindia.com/iot/api/trips/1/close\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://intouch.mapmyindia.com/iot/api/trips/1/close\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://intouch.mapmyindia.com/iot/api/trips/1/close\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://intouch.mapmyindia.com/iot/api/trips/1/close\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 9, "generationGroup": "intouch-post-trips-id-close-d2f2e0a19e", "generationCount": 1, "preferredGeneration": "v2-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the image in which objects of geometry are blurred as given by the client. - Identity: `api-operation:mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client - State model: hybrid ```json { "slug": "mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/AI_ML_API.yaml", "sourceFingerprint": "c89f36fb053ab44fc9caeebf96326da5b69c7b5ee1a7f5a85fd14d095565687e", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/blurbox", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/blurbox", "operationId": "blurbox", "summary": "Returns the image in which objects of geometry are blurred as given by the client.", "description": "BlurBox API takes in the bounding box ( the region, area the client want to blur in the image) and then the BlurBox will automatically return the blur region within an image.", "tags": [ "Blurring Bbox" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] }, { "name": "box", "type": "string", "required": true, "description": "Takes bounding boxes of the region you want to blur.", "example": "example", "enum": [] } ], "example": { "file": "example", "box": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mapmyindia.com/blurbox' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\",\n \"box\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/blurbox\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\",\n \"box\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mapmyindia.com/blurbox\",\n headers=headers,\n json={\n \"file\": \"example\",\n \"box\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/blurbox\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\",\n \"box\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mapmyindia.com/blurbox\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\",\n \"box\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 9, "generationGroup": "mappls-ai-ml-post-blurbox-a4f70028da", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the Brands bounding box array for the inputs Images - Identity: `api-operation:mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images - State model: hybrid ```json { "slug": "mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/brand_detection.yaml", "sourceFingerprint": "20759d3fde92064b580e491c0d5b8334e2d334d011e021ce6abb1bc2f0831d14", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/brand_detection", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/brand_detection", "operationId": "describeDatasetGet", "summary": "Returns the Brands bounding box array for the inputs Images", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the Brands in the given image.", "tags": [ "Brands Detection APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Prediction", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "Prediction[].x1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].x2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] } ], "example": { "Prediction": [ { "x1": 1, "y1": 1, "x2": 1, "y2": 1 } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/brand_detection' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/brand_detection\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/brand_detection\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/brand_detection\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/brand_detection\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 13, "generationGroup": "mappls-ai-ml-post-brand-detection-3eec8136c3", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the array of features which contains objects of geometry of the uploaded image. - Identity: `api-operation:mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/AI_ML_API.yaml", "sourceFingerprint": "c89f36fb053ab44fc9caeebf96326da5b69c7b5ee1a7f5a85fd14d095565687e", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/faceblur", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/faceblur", "operationId": "faceBlur", "summary": "Returns the array of features which contains objects of geometry of the uploaded image.", "description": "Face Blur API can automatically detect all faces within an image and blurs them. No need for manual face selection.", "tags": [ "Face Detection and Blurring" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mapmyindia.com/faceblur' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/faceblur\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mapmyindia.com/faceblur\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/faceblur\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mapmyindia.com/faceblur\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-faceblur-ee7be4abf8", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns different output depending upon the inputs given. - Identity: `api-operation:mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given - State model: hybrid ```json { "slug": "mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/AI_ML_API.yaml", "sourceFingerprint": "c89f36fb053ab44fc9caeebf96326da5b69c7b5ee1a7f5a85fd14d095565687e", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/facedetection", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/facedetection", "operationId": "faceDetection", "summary": "Returns different output depending upon the inputs given.", "description": "Using these APIs developers can fully leverage and embed the power of AI / ML Analytics, intelligence. These APIs allow our client to integrate into their own application the power and full set of functionalities of the mGIS product and platform. It’s a fact: people have a right of getting digital privacy. Here’s one more: online publishers and businesses worldwide must respect those rights and provide visual anonymity when it’s needed. That’s why we decided to give you the fastest and easiest way to keep people’s privacy in photos. Meet Face Detection & Blurring by MapmyIndia. This tool completely automates Face Detection, Face Blurring in photos and helps you get the job done in just a few clicks without graphic editors and manual work. Keep reading to find out how it works, when it comes in handy, and how you can actually use it in MapmyIndia.", "tags": [ "Face Detection and Blurring" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": [ 0, 0, 1 ] }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mapmyindia.com/facedetection' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/facedetection\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mapmyindia.com/facedetection\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/facedetection\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mapmyindia.com/facedetection\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-facedetection-1035d8c194", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the image which contains objects of geometry of the detected face plotted on it with the bounding box. - Identity: `api-operation:mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box - State model: hybrid ```json { "slug": "mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/AI_ML_API.yaml", "sourceFingerprint": "c89f36fb053ab44fc9caeebf96326da5b69c7b5ee1a7f5a85fd14d095565687e", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/faceplot", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/faceplot", "operationId": "facePlot", "summary": "Returns the image which contains objects of geometry of the detected face plotted on it with the bounding box.", "description": "This tool completely automates Face Detection, Face Blurring in photos and helps you get the job done in just a few clicks without graphic editors and manual work. Keep reading to find out how it works, when it comes in handy, and how you can actually use it in MapmyIndia. You can detect faces in an image, identify key facial features, and get the contours of detected faces. Note that the API detects faces, it does not recognize people . When you have face contour detection enabled, you also get a list of points for each facial feature that was detected. These points represent the shape of the feature. The following image illustrates how these points map to a face.", "tags": [ "Face Detection and Blurring" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mapmyindia.com/faceplot' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/faceplot\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mapmyindia.com/faceplot\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/faceplot\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mapmyindia.com/faceplot\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-faceplot-391975834f", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the face blured images of the uploaded 2D image - Identity: `api-operation:mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/face_2d.yaml", "sourceFingerprint": "96f033e10b9c516538d193dfe2065202604614655eebb9581e729cb60f24b606", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/face_blur", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/face_blur", "operationId": "describeDataset1", "summary": "Returns the face blured images of the uploaded 2D image", "description": "This API completely automates Face Detection, Face Blurring in 2D Images, without any extra effort", "tags": [ "Face Detection and Blurring 2D API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/face_blur' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/face_blur\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/face_blur\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/face_blur\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/face_blur\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-face-blur-a0b1c93990", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the bounding box array for the inputs Image - Identity: `api-operation:mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/face_2d.yaml", "sourceFingerprint": "96f033e10b9c516538d193dfe2065202604614655eebb9581e729cb60f24b606", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/face_detection", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/face_detection", "operationId": "describeDatasetGet", "summary": "Returns the bounding box array for the inputs Image", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the faces in the given 2D image.", "tags": [ "Face Detection and Blurring 2D API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Prediction", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "Prediction[].x1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].x2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] } ], "example": { "Prediction": [ { "x1": 1, "y1": 1, "x2": 1, "y2": 1 } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/face_detection' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/face_detection\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/face_detection\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/face_detection\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/face_detection\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 13, "generationGroup": "mappls-ai-ml-post-face-detection-c743b8c6fc", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the box drawn faces on the uploaded 2D image - Identity: `api-operation:mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/face_2d.yaml", "sourceFingerprint": "96f033e10b9c516538d193dfe2065202604614655eebb9581e729cb60f24b606", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/face_draw", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/face_draw", "operationId": "describeDataset2", "summary": "Returns the box drawn faces on the uploaded 2D image", "description": "This API detects faces in 2D images and draw their box around faces.", "tags": [ "Face Detection and Blurring 2D API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/face_draw' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/face_draw\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/face_draw\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/face_draw\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/face_draw\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-face-draw-817130ed74", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the face blured images of the uploaded panorama image - Identity: `api-operation:mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/face_Panorama.yaml", "sourceFingerprint": "c243d8e439ac9a6c8aa08399e5abe8a3871134fd340117fdac004238717d1bcc", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/face_blur_pano", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/face_blur_pano", "operationId": "describeDataset1", "summary": "Returns the face blured images of the uploaded panorama image", "description": "This API completely automates Face Detection, Face Blurring in panorama Images, without any extra effort", "tags": [ "Face Detection and Blurring 360 APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/face_blur_pano' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/face_blur_pano\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/face_blur_pano\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/face_blur_pano\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/face_blur_pano\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-face-blur-pano-24b8b5b497", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the bounding box array for the inputs panorama Images - Identity: `api-operation:mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images - State model: hybrid ```json { "slug": "mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/face_Panorama.yaml", "sourceFingerprint": "c243d8e439ac9a6c8aa08399e5abe8a3871134fd340117fdac004238717d1bcc", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/face_detection_pano", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/face_detection_pano", "operationId": "describeDatasetGet", "summary": "Returns the bounding box array for the inputs panorama Images", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the faces in the given panorama image.", "tags": [ "Face Detection and Blurring 360 APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Prediction", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "Prediction[].x1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].x2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] } ], "example": { "Prediction": [ { "x1": 1, "y1": 1, "x2": 1, "y2": 1 } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/face_detection_pano' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/face_detection_pano\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/face_detection_pano\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/face_detection_pano\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/face_detection_pano\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 13, "generationGroup": "mappls-ai-ml-post-face-detection-pano-7b1e63a928", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the box drawn faces on the uploaded panorama image - Identity: `api-operation:mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/face_Panorama.yaml", "sourceFingerprint": "c243d8e439ac9a6c8aa08399e5abe8a3871134fd340117fdac004238717d1bcc", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/face_draw_pano", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/face_draw_pano", "operationId": "describeDataset2", "summary": "Returns the box drawn faces on the uploaded panorama image", "description": "Without any additional effort, This API detects faces in panorama images and draw their box around faces.", "tags": [ "Face Detection and Blurring 360 APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/face_draw_pano' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/face_draw_pano\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/face_draw_pano\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/face_draw_pano\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/face_draw_pano\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-face-draw-pano-95b127b26a", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the License Plate blured images of the uploaded 2D image - Identity: `api-operation:mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/license_plate_2d.yaml", "sourceFingerprint": "e28c4d4728921522e5ebb4fda0951c05693d0b68387d8587402225825b4a1bd9", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/license_plate_blur", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/license_plate_blur", "operationId": "describeDataset1", "summary": "Returns the License Plate blured images of the uploaded 2D image", "description": "This API completely automates License Plate Detection, License Plate Blurring in 2D Images, without any extra effort", "tags": [ "License Plate Detection and Blurring 2D API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/license_plate_blur' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/license_plate_blur\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/license_plate_blur\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/license_plate_blur\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/license_plate_blur\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-license-plate-blur-edf6a8512b", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the bounding box array for the inputs Image - Identity: `api-operation:mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/license_plate_2d.yaml", "sourceFingerprint": "e28c4d4728921522e5ebb4fda0951c05693d0b68387d8587402225825b4a1bd9", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/license_plate_detection", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/license_plate_detection", "operationId": "describeDatasetGet", "summary": "Returns the bounding box array for the inputs Image", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the License Plate in the given 2D image.", "tags": [ "License Plate Detection and Blurring 2D API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Prediction", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "Prediction[].x1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].x2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] } ], "example": { "Prediction": [ { "x1": 1, "y1": 1, "x2": 1, "y2": 1 } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/license_plate_detection' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/license_plate_detection\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/license_plate_detection\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/license_plate_detection\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/license_plate_detection\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 13, "generationGroup": "mappls-ai-ml-post-license-plate-detection-cad578f7e9", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the box drawn License Plate on the uploaded 2D image - Identity: `api-operation:mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/license_plate_2d.yaml", "sourceFingerprint": "e28c4d4728921522e5ebb4fda0951c05693d0b68387d8587402225825b4a1bd9", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/license_plate_draw", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/license_plate_draw", "operationId": "describeDataset2", "summary": "Returns the box drawn License Plate on the uploaded 2D image", "description": "This API detects License Plate in 2D images and draw their box around License Plate.", "tags": [ "License Plate Detection and Blurring 2D API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/license_plate_draw' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/license_plate_draw\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/license_plate_draw\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/license_plate_draw\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/license_plate_draw\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-license-plate-draw-d65f5ae99c", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the License plate blured images of the uploaded panorama image - Identity: `api-operation:mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/license_plate_panorama.yaml", "sourceFingerprint": "4aef0ef7d89efd5b0f3e2f9ac34488f3e7a033d78e073df38a350b525c857c06", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/license_plate_blur_pano", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/license_plate_blur_pano", "operationId": "describeDataset1", "summary": "Returns the License plate blured images of the uploaded panorama image", "description": "This API completely automates License plate Detection, License plate Blurring in panorama Images, without any extra effort", "tags": [ "License Plate Detection and Blurring 360 APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/license_plate_blur_pano' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/license_plate_blur_pano\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/license_plate_blur_pano\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/license_plate_blur_pano\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/license_plate_blur_pano\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-license-plate-blur-pano-9a997421a7", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the bounding box array of License plate in panorama Images - Identity: `api-operation:mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images - State model: hybrid ```json { "slug": "mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/license_plate_panorama.yaml", "sourceFingerprint": "4aef0ef7d89efd5b0f3e2f9ac34488f3e7a033d78e073df38a350b525c857c06", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/license_plate_detection_pano", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/license_plate_detection_pano", "operationId": "describeDatasetGet", "summary": "Returns the bounding box array of License plate in panorama Images", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the License Plate in the given panorama image.", "tags": [ "License Plate Detection and Blurring 360 APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Prediction", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "Prediction[].x1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y1", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].x2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "Prediction[].y2", "type": "integer", "required": false, "description": "", "example": 1, "enum": [] } ], "example": { "Prediction": [ { "x1": 1, "y1": 1, "x2": 1, "y2": 1 } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/license_plate_detection_pano' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/license_plate_detection_pano\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/license_plate_detection_pano\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/license_plate_detection_pano\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/license_plate_detection_pano\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 13, "generationGroup": "mappls-ai-ml-post-license-plate-detection-pano-9b75994989", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the box drawn License plate in the uploaded panorama image - Identity: `api-operation:mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image - State model: hybrid ```json { "slug": "mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image", "family": "mappls-ai-ml", "familyName": "Mappls AI / ML", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "source-snapshot", "sourceId": "public-mappls-ai-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mappls-ai-apis/docs/custom/license_plate_panorama.yaml", "sourceFingerprint": "4aef0ef7d89efd5b0f3e2f9ac34488f3e7a033d78e073df38a350b525c857c06", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/license_plate_draw_pano", "baseUrl": "https://aiml.mappls.com/", "requestUrl": "https://aiml.mappls.com/license_plate_draw_pano", "operationId": "describeDataset2", "summary": "Returns the box drawn License plate in the uploaded panorama image", "description": "Without any additional effort, This API detects License plate in panorama images and draw their box around License plate.", "tags": [ "License Plate Detection and Blurring 360 APIs" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "ApiKeyAuth", "type": "apiKey", "in": "header", "parameter": "token" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .jpg, .jpeg and .png formats", "example": "example", "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "Image" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Client side error, Invalid parameter request", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occurred while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://aiml.mappls.com/license_plate_draw_pano' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://aiml.mappls.com/license_plate_draw_pano\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://aiml.mappls.com/license_plate_draw_pano\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://aiml.mappls.com/license_plate_draw_pano\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://aiml.mappls.com/license_plate_draw_pano\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 8, "generationGroup": "mappls-ai-ml-post-license-plate-draw-pano-f8a9362cd4", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Perform aggregate operation on a single dataset - Identity: `api-operation:mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset - State model: stateful ```json { "slug": "mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/aggregate", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/aggregate?datasetNme=india&columnname=anzee&operation=Median", "operationId": "aggregateOperationId", "summary": "Perform aggregate operation on a single dataset", "description": "Perform aggregate operation on a single dataset", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "columnname", "in": "query", "required": true, "type": "string", "description": "column name on which the aggregate operation has to be performed", "example": "anzee", "enum": [] }, { "name": "operation", "in": "query", "required": true, "type": "string", "description": "aggregate operators which are acceptable are Count, Average, Max, Median, Min, StdDev and Sum", "example": "Median", "enum": [] }, { "name": "singlePass", "in": "query", "required": false, "type": "boolean", "description": "If TRUE computes all aggregation values in a single pass. Its default value is set true", "example": true, "enum": [] }, { "name": "dataStoreName", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response Code", "example": "200", "enum": [] }, { "name": "result", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.GroupByAttributes", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.AggregationResults", "type": "array>", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.AggregationFunctions", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.AggregationAttribute", "type": "string", "required": false, "description": "Attribute on which aggregate function performed", "example": "latitude", "enum": [] } ], "example": { "code": "200", "result": { "GroupByAttributes": [ "example" ], "AggregationResults": [ [ "21.168174" ] ], "AggregationFunctions": [ "Median" ], "AggregationAttribute": "latitude" } } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/aggregate?datasetNme=india&columnname=anzee&operation=Median' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/aggregate?datasetNme=india&columnname=anzee&operation=Median\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/aggregate?datasetNme=india&columnname=anzee&operation=Median\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/aggregate?datasetNme=india&columnname=anzee&operation=Median\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/aggregate?datasetNme=india&columnname=anzee&operation=Median\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 26, "generationGroup": "mgis-get-aggregate-52ee7ba2d3", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `api-operation:mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry - State model: stateful ```json { "slug": "mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/catchement_query/join", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id", "operationId": "catchement_queryId", "summary": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "queryType value can be basic, spatial .", "example": "functionBased", "enum": [] }, { "name": "datasetSource", "in": "query", "required": true, "type": "string", "description": "Source dataset name. Mandatory both in case of Spatial as well as Non-Spatial Query.", "example": "geocode_ii", "enum": [] }, { "name": "datasetRef", "in": "query", "required": false, "type": "string", "description": "Source dataset name. Mandatory both in case of Non-Spatial Query.", "example": "geocode_iii", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Mandatory both in case of Spatial as well as Non-Spatial Query. Operators allowed for queryType = 'basic' are: =, =, , <>, IN and NOT IN Operators allowed for queryType = 'spatial' are: Intersects, Disjoint, Overlaps, Equals, Touches, DWithin, Within, Contains and Crosses", "example": "Intersects", "enum": [] }, { "name": "sourceProperty", "in": "query", "required": true, "type": "string", "description": "Source property attributes to be queried. Mandatory both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "refProperty", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be queried. Mandatory in case of Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "selectionParamSource", "in": "query", "required": false, "type": "string", "description": "Source property attributes to be reflected in the result. Optional in case of arithmetic operations, Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id, lat", "enum": [] }, { "name": "selectionParamRef", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be reflected in the result. Optional both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "osm_id, name", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform spatial filters with user-defined geometry.", "example": true, "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Mandatory in case of operator DWithin, else it is not required.", "example": 10, "enum": [] } ], "request": { "required": true, "contentTypes": [ "application/json" ], "fields": [ { "name": "geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.coordinates", "type": "unknown", "required": false, "description": "updated geomtery coordinates. Case-1 multipoint {\"geometry\":{\"coordinates\":[500000,54505678]}} Case-2 multipolygon {\"geometry\":{\"coordinates\":[[[76.55555,24.046464],[76.552734,28.844674],[83.056641,28.844674],[83.056641,24.046464],[76.55555,24.046464]]]}} Case-3 multiline {\"geometry\":{\"coordinates\":[[500000,54505678],[0,540000],[5450000,0]]}}", "example": "28.612964,77.229463", "enum": [] } ], "example": { "geometry": { "coordinates": "example" } } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "result", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result[].prop1", "type": "string", "required": false, "description": "Prop1 value", "example": "example", "enum": [] }, { "name": "result[].prop2", "type": "string", "required": false, "description": "Prop2 value", "example": "example", "enum": [] }, { "name": "result[].prop3", "type": "string", "required": false, "description": "Prop3 value", "example": "example", "enum": [] }, { "name": "result[].prop4", "type": "string", "required": false, "description": "Prop4 value", "example": "example", "enum": [] }, { "name": "result[].prop5", "type": "string", "required": false, "description": "Prop5 value", "example": "example", "enum": [] }, { "name": "result[].prop6", "type": "string", "required": false, "description": "Prop6 value", "example": "example", "enum": [] }, { "name": "result[].prop7", "type": "string", "required": false, "description": "Prop7 value", "example": "example", "enum": [] }, { "name": "result[].prop8", "type": "string", "required": false, "description": "Prop8 value", "example": "example", "enum": [] } ], "example": { "code": "200", "result": [ { "prop1": "example", "prop2": "example", "prop3": "example", "prop4": "example", "prop5": "example", "prop6": "example", "prop7": "example", "prop8": "example" } ] } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "error due to authorization", "example": "authorization unsuccesful", "enum": [] } ], "example": { "error": "authorization unsuccesful" } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "405", "description": "Method not allowed.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "method not allowerd, wrong method or invalid parameters", "example": "Method not allowed", "enum": [] } ], "example": { "error": "Method not allowed" } }, { "status": "409", "description": "Conflict in parameters passed.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "wrong parameters", "example": "wrong parameters", "enum": [] } ], "example": { "error": "wrong parameters" } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\",\n headers=headers,\n json={\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"GET\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 43, "generationGroup": "mgis-get-catchement-query-join-9c9b8afa0b", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Perform aggregate operation on a single dataset - Identity: `api-operation:mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset - State model: stateful ```json { "slug": "mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/aggregate", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/aggregate?datasetNme=india&columnname=anzee&operation=Median", "operationId": "aggregateOperationId", "summary": "Perform aggregate operation on a single dataset", "description": "Perform aggregate operation on a single dataset", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "columnname", "in": "query", "required": true, "type": "string", "description": "column name on which the aggregate operation has to be performed", "example": "anzee", "enum": [] }, { "name": "operation", "in": "query", "required": true, "type": "string", "description": "aggregate operators which are acceptable are Count, Average, Max, Median, Min, StdDev and Sum", "example": "Median", "enum": [] }, { "name": "singlePass", "in": "query", "required": false, "type": "boolean", "description": "If TRUE computes all aggregation values in a single pass. Its default value is set true", "example": true, "enum": [] }, { "name": "dataStoreName", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response Code", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.GroupByAttributes", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.AggregationResults", "type": "array>", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.AggregationFunctions", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.AggregationAttribute", "type": "string", "required": false, "description": "Attribute on which aggregate function performed", "example": "latitude", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "GroupByAttributes": [ "example" ], "AggregationResults": [ [ "21.168174" ] ], "AggregationFunctions": [ "Median" ], "AggregationAttribute": "latitude" } } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/aggregate?datasetNme=india&columnname=anzee&operation=Median' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/aggregate?datasetNme=india&columnname=anzee&operation=Median\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/aggregate?datasetNme=india&columnname=anzee&operation=Median\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/aggregate?datasetNme=india&columnname=anzee&operation=Median\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/aggregate?datasetNme=india&columnname=anzee&operation=Median\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 28, "generationGroup": "mgis-get-dqv-aggregate-44968fb79a", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `api-operation:mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry - State model: stateful ```json { "slug": "mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/catchement_query/join", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id", "operationId": "catchement_queryId", "summary": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "queryType value can be basic, spatial .", "example": "functionBased", "enum": [] }, { "name": "datasetSource", "in": "query", "required": true, "type": "string", "description": "Source dataset name. Mandatory both in case of Spatial as well as Non-Spatial Query.", "example": "geocode_ii", "enum": [] }, { "name": "datasetRef", "in": "query", "required": false, "type": "string", "description": "Source dataset name. Mandatory both in case of Non-Spatial Query.", "example": "geocode_iii", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Mandatory both in case of Spatial as well as Non-Spatial Query. Operators allowed for queryType = 'basic' are: =, =, , <>, IN and NOT IN Operators allowed for queryType = 'spatial' are: Intersects, Disjoint, Overlaps, Equals, Touches, DWithin, Within, Contains and Crosses", "example": "Intersects", "enum": [] }, { "name": "sourceProperty", "in": "query", "required": true, "type": "string", "description": "Source property attributes to be queried. Mandatory both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "refProperty", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be queried. Mandatory in case of Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "selectionParamSource", "in": "query", "required": false, "type": "string", "description": "Source property attributes to be reflected in the result. Optional in case of arithmetic operations, Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id, lat", "enum": [] }, { "name": "selectionParamRef", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be reflected in the result. Optional both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "osm_id, name", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform spatial filters with user-defined geometry.", "example": true, "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Mandatory in case of operator DWithin, else it is not required.", "example": 10, "enum": [] } ], "request": { "required": true, "contentTypes": [ "application/json" ], "fields": [ { "name": "type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "features[].type", "type": "string", "required": false, "description": "", "example": "Feature", "enum": [] }, { "name": "features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "features[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "features[].geometry.type", "type": "string", "required": false, "description": "", "example": "Polygon", "enum": [] }, { "name": "features[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] } ], "example": { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": "example", "geometry": { "type": "Polygon", "coordinates": [] } } ] } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].prop1", "type": "string", "required": false, "description": "Prop1 value", "example": "example", "enum": [] }, { "name": "data[].prop2", "type": "string", "required": false, "description": "Prop2 value", "example": "example", "enum": [] }, { "name": "data[].prop3", "type": "string", "required": false, "description": "Prop3 value", "example": "example", "enum": [] }, { "name": "data[].prop4", "type": "string", "required": false, "description": "Prop4 value", "example": "example", "enum": [] }, { "name": "data[].prop5", "type": "string", "required": false, "description": "Prop5 value", "example": "example", "enum": [] }, { "name": "data[].prop6", "type": "string", "required": false, "description": "Prop6 value", "example": "example", "enum": [] }, { "name": "data[].prop7", "type": "string", "required": false, "description": "Prop7 value", "example": "example", "enum": [] }, { "name": "data[].prop8", "type": "string", "required": false, "description": "Prop8 value", "example": "example", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": [ { "prop1": "example", "prop2": "example", "prop3": "example", "prop4": "example", "prop5": "example", "prop6": "example", "prop7": "example", "prop8": "example" } ] } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 401, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "error due to authorization", "example": "authorization unsuccesful", "enum": [] } ], "example": { "code": 401, "message": "authorization unsuccesful" } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "405", "description": "Method not allowed.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 405, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "method not allowerd, wrong method or invalid parameters", "example": "Method not allowed", "enum": [] } ], "example": { "code": 405, "message": "Method not allowed" } }, { "status": "409", "description": "Conflict in parameters passed.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 409, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "wrong parameters", "example": "wrong parameters", "enum": [] } ], "example": { "code": 409, "message": "wrong parameters" } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n\n ]\n }\n }\n ]\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n \n ]\n }\n }\n ]\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\",\n headers=headers,\n json={\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n \n ]\n }\n }\n ]\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"GET\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n\n ]\n }\n }\n ]\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/catchement_query/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n\n ]\n }\n }\n ]\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 53, "generationGroup": "mgis-get-dqv-catchement-query-join-2137002891", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input. - Identity: `api-operation:mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input - State model: stateful ```json { "slug": "mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/expression", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view", "operationId": "expressionId", "summary": "Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input.", "description": "Performs arithmetic,string,geometric and aggregate operations on a column of a dataset passed as an input. Arithmetic operations are +, -, , /. String operations are concat, lower, upper, initcap, replace, length, substring. Geometric operations are area,length,latitude,longitude,centroid. Aggregate operations are count,min,max,median,stddev,sum,avg.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "queryType values can be arithmetic,string,geometric and aggregate. On the basis of queryType value API can find which type of query you want to execute.", "example": "arithmetic", "enum": [] }, { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Operator can contain the value of arithmetic,string,aggregate,geometric. Arithmetic Operators -,+,/, String Operators = Length,Upper,Lower,InitCap,Concat,Replace,Substring Aggregate Operators = Count, Average, Max, Median, Min, StdDev, Sum and distinct Geometric Operators = Lat,Long,Centroid,Area,Length", "example": "replace", "enum": [] }, { "name": "col", "in": "query", "required": true, "type": "string", "description": "Single/Multiple column names on which the querytype operations has to be performed. In case of Querytype Geometric and geometric operators and String Operator(substring) single column value is required.", "example": "district,bank", "enum": [] }, { "name": "type", "in": "query", "required": true, "type": "string", "description": "This parameter consists the type of property. Properties are - Create, View, Update. In case of Create We need new column. In case of View, newcolumn is not required and the data after operation will be shown in response. In case of Update the values get updated in the col of the table. In case of Geometric Operations UPDATE method/type are not applicable. In case of Aggregate Operations CREATE and UPDATE methods/types are not applicable.", "example": "view", "enum": [] }, { "name": "new_column", "in": "query", "required": false, "type": "string", "description": "newcolumn parameter is only mandatory in case of Type:Create, which is the name of new column to be created", "example": "updated_values", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "Filter is the query to be applied on the dataset.", "example": "district in ( 'Bikaner','Churu')values", "enum": [] }, { "name": "delimiter", "in": "query", "required": false, "type": "string", "description": "A delimiter is a sequence of one or more characters for specifying the boundary between separate, independent regions in plain text, mathematical expressions or other data streams. An example of a delimiter is the comma character, which acts as a field delimiter in a sequence of comma-separated values.[Note: Delimiter is applicable when when multiple column names have been added and its value always be in single inverted comma.]", "example": "'_'", "enum": [] }, { "name": "oldData", "in": "query", "required": false, "type": "string", "description": "oldData is the existing value which can be replaced.", "example": "Bikaner", "enum": [] }, { "name": "newData", "in": "query", "required": false, "type": "string", "description": "New Value that needs to be replaced with an existing value.", "example": "Delhi", "enum": [] }, { "name": "start", "in": "query", "required": false, "type": "number", "description": "starting index of substring.", "example": 2, "enum": [] }, { "name": "steps", "in": "query", "required": false, "type": "number", "description": "number of characters in the substring. If steps is blank then substring will contain characters from starting value provided to end of string.", "example": 5, "enum": [] }, { "name": "groupBy", "in": "query", "required": false, "type": "string", "description": "Pass the column names list which you want to display in the resultant. In case of multiple attributes passed in the groupBy parameter, by default it will take the first column for group by. In case of Aggregate Operation user can pass single/multiple attribute. In case of String and Arithmetic Operations groupBy, In case of multiple attributes passed in the groupBy parameter, by default it will take the first column for group by. In case of Geometric Operation groupBy is not applicable.", "example": "household", "enum": [] }, { "name": "distinct", "in": "query", "required": false, "type": "string", "description": "Distinct parameter is used when user want to get unique values of single/multiple columns of a dataset. Boolean values True and false can be passed. It is mandatory parameter when operator is distinct with queryType = aggregate.", "example": true, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response Code", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.result", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.result[].lat", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "data.result[].lon", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "data.result[].updated_values", "type": "number", "required": false, "description": "", "example": 109.9204, "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "result": [ { "lat": 32.3345, "lon": 77.5859, "updated_values": 109.9204 } ] } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 34, "generationGroup": "mgis-get-dqv-expression-970375fcf6", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Performs geometric operations. - Identity: `api-operation:mgis-get-dqv-geometricfunction-performs-geometric-operations` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-geometricfunction-performs-geometric-operations - State model: stateful ```json { "slug": "mgis-get-dqv-geometricfunction-performs-geometric-operations", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/geometricFunction", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/geometricFunction?functionNme=area", "operationId": "geometricFunctionID", "summary": "Performs geometric operations.", "description": "Performs geometric operations between two user-defined geometry as well as within the dataset. The geometric opertaions available for user defined geometry are (the brackets consists of the parameters to be passed while using the geometric function): Area (geom1) Centroid (geom1) Buffer (geom1, distance) Intersection (geom1, geom2) Distance (geom1, geom2) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString) The geometric opertaions available for within dataset are: Area (geom1) Centroid (geom1) Buffer (geom1, distance) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString)", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "functionNme", "in": "query", "required": true, "type": "string", "description": "Geometric operators which are acceptable are: For user defined geometry: intersection, area, buffer, distance, centroid, isEmpty, length and endPoint For within the dataset: area, buffer, centroid, isEmpty, length and endPoint", "example": "area", "enum": [] }, { "name": "datasetNme", "in": "query", "required": false, "type": "string", "description": "The dataset on which geometric operation has to be performed. It is mandatory in case of performing geometric operations within the datset.", "example": "geo", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform geometric operations with user-defined geometry.", "example": true, "enum": [] }, { "name": "geom1", "in": "query", "required": false, "type": "string", "description": "user defined geometry in terms of geoJSON. It is mandatory in case of user-defined geometry for all the geometric opertaions.", "example": "{\n\"type\": \"Polygon\",\n\"coordinates\": [\n[\n[\n75.9375,\n23.725011735951796\n],\n[\n78.92578124999999,\n23.725011735951796\n],\n[\n78.92578124999999,\n26.115985925333536\n],\n[\n75.9375,\n26.115985925333536\n],\n[\n75.9375,\n23.725011735951796\n]\n]\n]\n}", "enum": [] }, { "name": "geom2", "in": "query", "required": false, "type": "string", "description": "user defined geometry in terms of geoJSON. It is mandatory in case of user-defined geometry for distance and intersection geometric opertaions.", "example": "{ \"type\": \"Polygon\", \"coordinates\": [ [ [ 75.9375, 23.725011735951796 ], [ 78.92578124999999, 23.725011735951796 ], [ 78.92578124999999, 26.115985925333536 ], [ 75.9375, 26.115985925333536 ], [ 75.9375, 23.725011735951796 ] ] ] }", "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Mandatory in case when opertaor used is Buffer, else it is not required.", "example": 10, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "response code", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].area", "type": "number", "required": false, "description": "value of area after spatial operation", "example": "0.2670491076815", "enum": [] } ], "example": { "code": "200", "success": true, "message": true, "data": [ { "area": "0.2670491076815" } ] } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/geometricFunction?functionNme=area' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/geometricFunction?functionNme=area\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/geometricFunction?functionNme=area\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/geometricFunction?functionNme=area\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/geometricFunction?functionNme=area\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 26, "generationGroup": "mgis-get-dqv-geometricfunction-fb5ef95bd8", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the BoundingBox of the particular layer. - Identity: `api-operation:mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer - State model: stateful ```json { "slug": "mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/getBoundingBox", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/getBoundingBox?datasetNme=india", "operationId": "BoundingBoxID", "summary": "Returns the BoundingBox of the particular layer.", "description": "Returns the Bounding Box of the particular layer without cqlfilter and returns the bounding box of feature with cqlfilter.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "query", "in": "query", "required": false, "type": "string", "description": "the cqlfilter to be applied on the layer.", "example": "state = 'Delhi'", "enum": [] }, { "name": "dataStoreName", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] }, { "name": "layerType", "in": "query", "required": false, "type": "string", "description": "When user wants to fetch bbox for admin layers.", "example": "admin", "enum": [] }, { "name": "countryNme", "in": "query", "required": false, "type": "string", "description": "When user wants to fetch bbox for Nepal and Bhutan only.", "example": "nepal", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.bounds", "type": "array", "required": false, "description": "", "example": "example", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "bounds": [ [ [ "8.035406", "68.952956" ], [ "34.570723", "96.82733" ] ] ] } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/getBoundingBox?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/getBoundingBox?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/getBoundingBox?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/getBoundingBox?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/getBoundingBox?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 19, "generationGroup": "mgis-get-dqv-getboundingbox-b57b6fcefb", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the entire dataset. - Identity: `api-operation:mgis-get-dqv-getdataset-fetches-the-entire-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-getdataset-fetches-the-entire-dataset - State model: stateful ```json { "slug": "mgis-get-dqv-getdataset-fetches-the-entire-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/getDataset", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/getDataset?datasetNme=india", "operationId": "getDatasetId", "summary": "Fetches the entire dataset.", "description": "Fetches the entire dataset. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "groupBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘true’ to perform groupBy on the datsetNme. 'propertyName' paramter is mandatory for 'groupBy' parameter.", "example": "true", "enum": [] }, { "name": "propertyName", "in": "query", "required": false, "type": "string", "description": "Pass the column names list which you want to display in the resultant. Optional in case of order(sortBy). Mandatory in case of 'groupBy'.", "example": "street,poi", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘A' for ascending and ‘D’ for descending to perform order(sort) By. Mandatory when order(sort) By is to be performed.", "example": "A", "enum": [] }, { "name": "sortByProperty", "in": "query", "required": false, "type": "string", "description": "Pass the column names which the user wants to order(sort) By in the resultant. Mandatory when order(sort) By is to be performed.", "example": "poi,street", "enum": [] }, { "name": "startIndex", "in": "query", "required": false, "type": "number", "description": "To set the start index from which the user wants the result to be displayed. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 1, "enum": [] }, { "name": "count", "in": "query", "required": false, "type": "number", "description": "To fix the number of results to be returned. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 3, "enum": [] }, { "name": "bbox", "in": "query", "required": false, "type": "string", "description": "Returns the bounding box of the dataset if set as true.", "example": "false", "enum": [] }, { "name": "dataStoreName", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "data.features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.features[].type", "type": "string", "required": false, "description": "", "example": "feature", "enum": [] }, { "name": "data.features[].id", "type": "string", "required": false, "description": "feature id of the feature attribute.", "example": "india.1", "enum": [] }, { "name": "data.features[].geometry", "type": "string", "required": false, "description": "geometry of the feature attribute.", "example": "28.612964,77.229463", "enum": [] }, { "name": "data.features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.features[].properties.st_name", "type": "string", "required": false, "description": "", "example": "ANDAMAN AND NICOBAR ISLANDS", "enum": [] }, { "name": "data.totalFeatures", "type": "number", "required": false, "description": "", "example": 35, "enum": [] }, { "name": "data.numberMatched", "type": "number", "required": false, "description": "", "example": 35, "enum": [] }, { "name": "data.numberReturned", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "data.timestamp", "type": "string", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data.links", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.links[].title", "type": "string", "required": false, "description": "", "example": "next page", "enum": [] }, { "name": "data.links[].type", "type": "string", "required": false, "description": "", "example": "application/json", "enum": [] }, { "name": "data.links[].rel", "type": "string", "required": false, "description": "", "example": "next", "enum": [] }, { "name": "data.links[].href", "type": "string", "required": false, "description": "", "example": "http://localhost:8081/geoserver/wfs?PROPERTYNAME=st_name&TYPENAME=anjali%3Aindia&REQUEST=GetFeature&OUTPUTFORMAT=application%2Fjson&VERSION=2.0.0&SERVICE=WFS&COUNT=1&ISDENORMALIZED=false&STARTINDEX=1", "enum": [] }, { "name": "data.crs", "type": "string", "required": false, "description": "", "example": "null", "enum": [] }, { "name": "data.layerBounds", "type": "string", "required": false, "description": "", "example": "example", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "type": "FeatureCollection", "features": [ { "type": "feature", "id": "india.1", "geometry": "null", "properties": { "st_name": "ANDAMAN AND NICOBAR ISLANDS" } } ], "totalFeatures": 35, "numberMatched": 35, "numberReturned": 1, "timestamp": "2020-08-10T13:59:51.624Z", "links": [ { "title": "next page", "type": "application/json", "rel": "next", "href": "http://localhost:8081/geoserver/wfs?PROPERTYNAME=st_name&TYPENAME=anjali%3Aindia&REQUEST=GetFeature&OUTPUTFORMAT=application%2Fjson&VERSION=2.0.0&SERVICE=WFS&COUNT=1&ISDENORMALIZED=false&STARTINDEX=1" } ], "crs": "null" } } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/getDataset?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/getDataset?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/getDataset?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/getDataset?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/getDataset?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 46, "generationGroup": "mgis-get-dqv-getdataset-0ba657c8d9", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `api-operation:mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry - State model: stateful ```json { "slug": "mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/dqv/query_apply/join", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id", "operationId": "applyQueryCrossId", "summary": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "queryType value can be basic, spatialOperation or functionBased .", "example": "functionBased", "enum": [] }, { "name": "datasetSource", "in": "query", "required": true, "type": "string", "description": "Source dataset name. Mandatory both in case of Spatial as well as Non-Spatial Query.", "example": "geocode_ii", "enum": [] }, { "name": "datasetRef", "in": "query", "required": false, "type": "string", "description": "Source dataset name. Mandatory both in case of Non-Spatial Query.", "example": "geocode_iii", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Mandatory both in case of Spatial as well as Non-Spatial Query. Operators allowed for queryType = 'basic' are: =, =, , <>, IN and NOT IN Operators allowed for queryType = 'spatialOperation' are: Intersects, Disjoint, Overlaps, Equals, Touches, DWithin, Within, Contains and Crosses", "example": "Intersects", "enum": [] }, { "name": "sourceProperty", "in": "query", "required": true, "type": "string", "description": "Source property attributes to be queried. Mandatory both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "refProperty", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be queried. Mandatory in case of Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "selectionParamSource", "in": "query", "required": false, "type": "string", "description": "Source property attributes to be reflected in the result. Optional in case of arithmetic operations, Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id, lat", "enum": [] }, { "name": "selectionParamRef", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be reflected in the result. Optional both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "osm_id, name", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform spatial filters with user-defined geometry.", "example": true, "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Mandatory in case of operator DWithin, else it is not required.", "example": 10, "enum": [] }, { "name": "comparisonFunction", "in": "query", "required": false, "type": "string", "description": "The functions allowed are: Area, Length and isEmpty . This parameter is mandatory for queryType functionBased.", "example": "Area", "enum": [] }, { "name": "comparisonOperator", "in": "query", "required": false, "type": "string", "description": "The operators allowed are: =, >, , >= and <=. This parameter is mandatory for queryType functionBased.", "example": "=", "enum": [] }, { "name": "comparisonValue", "in": "query", "required": false, "type": "string", "description": "The values allowed are: Numeric (in meters) (for comparisonFunction area and length) Boolean (for comparisonFunction isEmpty) . This parameter is mandatory for queryType functionBased.", "example": "100", "enum": [] }, { "name": "saveAsNewDataset", "in": "query", "required": false, "type": "string", "description": "Boolean if true cross join result will be saved in to db as new table.", "example": true, "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": false, "type": "string", "description": "Name of new Table(mandatory if saveAsNewDataset = true)", "example": "JoinTable", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "query on the basis of which the response required (only applicable on queryType spatial join).", "example": "id=368", "enum": [] } ], "request": { "required": true, "contentTypes": [ "application/json" ], "fields": [ { "name": "geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "geometry.features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "geometry.features[].type", "type": "string", "required": false, "description": "", "example": "Feature", "enum": [] }, { "name": "geometry.features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "geometry.features[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.features[].geometry.type", "type": "string", "required": false, "description": "", "example": "Polygon", "enum": [] }, { "name": "geometry.features[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] } ], "example": { "geometry": { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": "example", "geometry": { "type": "Polygon", "coordinates": "28.612964,77.229463" } } ] } } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data[].prop1", "type": "string", "required": false, "description": "Prop1 value", "example": "example", "enum": [] }, { "name": "data[].prop2", "type": "string", "required": false, "description": "Prop2 value", "example": "example", "enum": [] }, { "name": "data[].prop3", "type": "string", "required": false, "description": "Prop3 value", "example": "example", "enum": [] }, { "name": "data[].prop4", "type": "string", "required": false, "description": "Prop4 value", "example": "example", "enum": [] }, { "name": "data[].prop5", "type": "string", "required": false, "description": "Prop5 value", "example": "example", "enum": [] }, { "name": "data[].prop6", "type": "string", "required": false, "description": "Prop6 value", "example": "example", "enum": [] }, { "name": "data[].prop7", "type": "string", "required": false, "description": "Prop7 value", "example": "example", "enum": [] }, { "name": "data[].prop8", "type": "string", "required": false, "description": "Prop8 value", "example": "example", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": [ { "prop1": "example", "prop2": "example", "prop3": "example", "prop4": "example", "prop5": "example", "prop6": "example", "prop7": "example", "prop8": "example" } ] } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 401, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "error due to authorization", "example": "authorization unsuccesful", "enum": [] } ], "example": { "code": 401, "message": "authorization unsuccesful" } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "405", "description": "Method not allowed.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 405, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "method not allowerd, wrong method or invalid parameters", "example": "Method not allowed", "enum": [] } ], "example": { "code": 405, "message": "Method not allowed" } }, { "status": "409", "description": "Conflict in parameters passed.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 409, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "wrong parameters", "example": "wrong parameters", "enum": [] } ], "example": { "code": 409, "message": "wrong parameters" } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/dqv/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"geometry\": {\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": \"28.612964,77.229463\"\n }\n }\n ]\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"geometry\": {\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": \"28.612964,77.229463\"\n }\n }\n ]\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/dqv/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\",\n headers=headers,\n json={\n \"geometry\": {\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": \"28.612964,77.229463\"\n }\n }\n ]\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"geometry\": {\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": \"28.612964,77.229463\"\n }\n }\n ]\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/dqv/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"geometry\": {\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": \"28.612964,77.229463\"\n }\n }\n ]\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 60, "generationGroup": "mgis-post-dqv-query-apply-join-b29f7253f5", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together. - Identity: `api-operation:mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together` - Canonical: https://developer.mappls.com/api-reference/mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together - State model: stateful ```json { "slug": "mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/dqv/query_apply/single", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/query_apply/single?datasetNme=india", "operationId": "applyQuerySingleId", "summary": "Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together.", "description": "You cannot pass query, summerizeValue and uniqueValue paramater together. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together You can perform geometric operation (area and length) when queryType = 'functionBased' is passed. The query parameter is an optional paramater in this case. summerizeValue and uniqueValue paramater are not applicable in this case.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "queryType", "in": "query", "required": false, "type": "string", "description": "queryType value should be functionBased. Mandatory when user has to perform geometric operations with or without query.", "example": "functionBased", "enum": [] }, { "name": "query", "in": "query", "required": false, "type": "string", "description": "Query to be applied on the dataset. Mandatory if uniqueValue, summerizeValue and queryType parameter is not passed. This is an optional paramter when queryType = 'functionBased' is passed.", "example": "state = 'Delhi'", "enum": [] }, { "name": "uniqueValue", "in": "query", "required": false, "type": "string", "description": "Unique values of a attribute of the dataset. Mandatory if query and summerizeValue parameter is not passed.", "example": "st_name", "enum": [] }, { "name": "summerizeValue", "in": "query", "required": false, "type": "string", "description": "Summerize values of a attribute of the dataset. Mandatory if query and uniqueValue parameter is not passed.", "example": "st_name", "enum": [] }, { "name": "groupBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘true’ to perform groupBy on the datsetNme. Applicable for 'query'. 'propertyName' paramter is mandatory for 'groupBy' parameter.", "example": "true", "enum": [] }, { "name": "propertyName", "in": "query", "required": false, "type": "string", "description": "Pass the column names list which you want to display in the resultant. Optional in case of order(sortBy). Mandatory in case of 'groupBy'.", "example": "street,poi", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘A' for ascending and ‘D’ for descending to perform order(sort) By. Applicable for all. Mandatory when order(sort) By is to be performed.", "example": "A", "enum": [] }, { "name": "sortByProperty", "in": "query", "required": false, "type": "string", "description": "Pass the column names which the user wants to order(sort) By in the resultant. Applicable for 'query'. Mandatory when order(sort) By is to be performed.", "example": "poi,street", "enum": [] }, { "name": "propertyName", "in": "query", "required": false, "type": "string", "description": "Property attributes to be reflected in the result. If not passed all the columns of the datasetNme will be displayed in the resultant.", "example": "housenumber", "enum": [] }, { "name": "comparisonFunction", "in": "query", "required": false, "type": "string", "description": "The functions allowed are: Area and Length . This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased", "example": "Area", "enum": [] }, { "name": "comparisonOperator", "in": "query", "required": false, "type": "string", "description": "The operators allowed are: =, >, , >= and <=. This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased", "example": "=", "enum": [] }, { "name": "comparisonValue", "in": "query", "required": false, "type": "number", "description": "The value should be in numeric (in meters). This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased", "example": 10, "enum": [] }, { "name": "saveAsNewDataset", "in": "query", "required": false, "type": "string", "description": "Pass ‘true’ for the resultant to be saved in to user's workspace as a new table. Applicable for only queryType = 'functionBased", "example": "true", "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": false, "type": "string", "description": "Name of the table in which the resultant has to be stored. This parameter is mandatory if saveAsNewDataset = true. Applicable for only queryType = 'functionBased'", "example": "geotest", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Sort the result in ascending(A) or descending(D) order. Applicable for 'orderBy', 'groupBy', 'uniqueValue' and 'summerizeValue'.", "example": "A", "enum": [] }, { "name": "startIndex", "in": "query", "required": false, "type": "number", "description": "To set the start index from which the user wants the result to be displayed. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 1, "enum": [] }, { "name": "count", "in": "query", "required": false, "type": "number", "description": "To fix the number of results to be returned. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 3, "enum": [] }, { "name": "bbox", "in": "query", "required": false, "type": "string", "description": "Returns the bounding box of the dataset if set as true.", "example": "false", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "data.features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.features[].type", "type": "string", "required": false, "description": "", "example": "Feature", "enum": [] }, { "name": "data.features[].id", "type": "string", "required": false, "description": "", "example": " india.2", "enum": [] }, { "name": "data.features[].geometry", "type": "string", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "data.features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.features[].properties.st_name", "type": "string", "required": false, "description": "", "example": "Andhra Pradesh", "enum": [] }, { "name": "data.totalFeatures", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "data.numberMatched", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "data.numberReturned", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "data.timestamp", "type": "string", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "data.crs", "type": "string", "required": false, "description": "", "example": "null", "enum": [] }, { "name": "data.layerBounds", "type": "string", "required": false, "description": "", "example": "null", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": " india.2", "geometry": "null", "properties": { "st_name": "Andhra Pradesh" } } ], "totalFeatures": 1, "numberMatched": 1, "numberReturned": 1, "timestamp": "2020-08-10T13:59:51.624Z", "crs": "null", "layerBounds": "null" } } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "405", "description": "Method not allowed.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 405, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "method not allowerd, wrong method or invalid parameters", "example": "Method not allowed", "enum": [] } ], "example": { "code": 405, "message": "Method not allowed" } }, { "status": "409", "description": "Conflict in parameters passed.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 409, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "wrong parameters", "example": "wrong parameters", "enum": [] } ], "example": { "code": 409, "message": "wrong parameters" } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/dqv/query_apply/single?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/query_apply/single?datasetNme=india\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/dqv/query_apply/single?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/query_apply/single?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/dqv/query_apply/single?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 57, "generationGroup": "mgis-post-dqv-query-apply-single-b7a129a66c", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Validates the query to be applied on a dataset. - Identity: `api-operation:mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset - State model: stateful ```json { "slug": "mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/dqv-apis.yml", "sourceFingerprint": "391a57c02f461cd4b27fba7b0ef8f838096a4cc16680bb2c6df225fbcf1fe427", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/dqv/query_validation", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/dqv/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27", "operationId": "queryValidateId", "summary": "Validates the query to be applied on a dataset.", "description": "Validates the query to be applied on a dataset.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "query", "in": "query", "required": true, "type": "string", "description": "Query to be applied on the dataset. Mandatory if uniqueValue and summerizeValue parameter is not passed.", "example": "state = 'Delhi'", "enum": [] }, { "name": "dataStoreName", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Displays the message wheather the query is valid or invalid.", "example": "Valid Query", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] } ], "example": { "code": "200", "success": true, "message": "Valid Query", "data": "example" } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 404, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "code": 404, "message": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "message", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/dqv/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/dqv/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/dqv/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/dqv/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/dqv/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 22, "generationGroup": "mgis-get-dqv-query-validation-5e2a147139", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input. - Identity: `api-operation:mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input` - Canonical: https://developer.mappls.com/api-reference/mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input - State model: stateful ```json { "slug": "mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/expression", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view", "operationId": "expressionId", "summary": "Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input.", "description": "Performs arithmetic,string,geometric and aggregate operations on a column of a dataset passed as an input. Arithmetic operations are +, -, , /. String operations are concat, lower, upper, initcap, replace, length, substring. Geometric operations are area,length,latitude,longitude,centroid. Aggregate operations are count,min,max,median,stddev,sum,avg.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "queryType values can be arithmetic,string,geometric and aggregate. On the basis of queryType value API can find which type of query you want to execute.", "example": "arithmetic", "enum": [] }, { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Operator can contain the value of arithmetic,string,aggregate,geometric. Arithmetic Operators -,+,/, String Operators = Length,Upper,Lower,InitCap,Concat,Replace,Substring Aggregate Operators = Count, Average, Max, Median, Min, StdDev, Sum and distinct Geometric Operators = Lat,Long,Centroid,Area,Length", "example": "replace", "enum": [] }, { "name": "col", "in": "query", "required": true, "type": "string", "description": "Single/Multiple column names on which the querytype operations has to be performed. In case of Querytype Geometric and geometric operators and String Operator(substring) single column value is required.", "example": "district,bank", "enum": [] }, { "name": "type", "in": "query", "required": true, "type": "string", "description": "This parameter consists the type of property. Properties are - Create, View, Update. In case of Create We need new column. In case of View, newcolumn is not required and the data after operation will be shown in response. In case of Update the values get updated in the col of the table. In case of Geometric Operations UPDATE method/type are not applicable. In case of Aggregate Operations CREATE and UPDATE methods/types are not applicable.", "example": "view", "enum": [] }, { "name": "new_column", "in": "query", "required": false, "type": "string", "description": "newcolumn parameter is only mandatory in case of Type:Create, which is the name of new column to be created", "example": "updated_values", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "Filter is the query to be applied on the dataset.", "example": "district in ( 'Bikaner','Churu')values", "enum": [] }, { "name": "delimiter", "in": "query", "required": false, "type": "string", "description": "A delimiter is a sequence of one or more characters for specifying the boundary between separate, independent regions in plain text, mathematical expressions or other data streams. An example of a delimiter is the comma character, which acts as a field delimiter in a sequence of comma-separated values.[Note: Delimiter is applicable when when multiple column names have been added and its value always be in single inverted comma.]", "example": "'_'", "enum": [] }, { "name": "oldData", "in": "query", "required": false, "type": "string", "description": "oldData is the existing value which can be replaced.", "example": "Bikaner", "enum": [] }, { "name": "newData", "in": "query", "required": false, "type": "string", "description": "New Value that needs to be replaced with an existing value.", "example": "Delhi", "enum": [] }, { "name": "start", "in": "query", "required": false, "type": "number", "description": "starting index of substring.", "example": 2, "enum": [] }, { "name": "steps", "in": "query", "required": false, "type": "number", "description": "number of characters in the substring. If steps is blank then substring will contain characters from starting value provided to end of string.", "example": 5, "enum": [] }, { "name": "groupBy", "in": "query", "required": false, "type": "string", "description": "Pass the column names list which you want to display in the resultant. In case of multiple attributes passed in the groupBy parameter, by default it will take the first column for group by. In case of Aggregate Operation user can pass single/multiple attribute. In case of String and Arithmetic Operations groupBy, In case of multiple attributes passed in the groupBy parameter, by default it will take the first column for group by. In case of Geometric Operation groupBy is not applicable.", "example": "household", "enum": [] }, { "name": "distinct", "in": "query", "required": false, "type": "string", "description": "Distinct parameter is used when user want to get unique values of single/multiple columns of a dataset. Boolean values True and false can be passed. It is mandatory parameter when operator is distinct with queryType = aggregate.", "example": true, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response Code", "example": "200", "enum": [] }, { "name": "result", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result[].lat", "type": "number", "required": false, "description": "", "example": "28.612964", "enum": [] }, { "name": "result[].lon", "type": "number", "required": false, "description": "", "example": "77.229463", "enum": [] }, { "name": "result[].updated_values", "type": "number", "required": false, "description": "", "example": 109.9204, "enum": [] } ], "example": { "code": "200", "result": [ { "lat": 32.3345, "lon": 77.5859, "updated_values": 109.9204 } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/expression?queryType=arithmetic&datasetNme=india&operator=replace&col=district%2Cbank&type=view\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 31, "generationGroup": "mgis-get-expression-620dd9eb38", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Performs geometric operations. - Identity: `api-operation:mgis-get-geometricfunction-performs-geometric-operations` - Canonical: https://developer.mappls.com/api-reference/mgis-get-geometricfunction-performs-geometric-operations - State model: stateful ```json { "slug": "mgis-get-geometricfunction-performs-geometric-operations", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/geometricFunction", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/geometricFunction?functionNme=area", "operationId": "geometricFunctionID", "summary": "Performs geometric operations.", "description": "Performs geometric operations between two user-defined geometry as well as within the dataset. The geometric opertaions available for user defined geometry are (the brackets consists of the parameters to be passed while using the geometric function): Area (geom1) Centroid (geom1) Buffer (geom1, distance) Intersection (geom1, geom2) Distance (geom1, geom2) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString) The geometric opertaions available for within dataset are: Area (geom1) Centroid (geom1) Buffer (geom1, distance) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString)", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "functionNme", "in": "query", "required": true, "type": "string", "description": "Geometric operators which are acceptable are: For user defined geometry: intersection, area, buffer, distance, centroid, isEmpty, length and endPoint For within the dataset: area, buffer, centroid, isEmpty, length and endPoint", "example": "area", "enum": [] }, { "name": "datasetNme", "in": "query", "required": false, "type": "string", "description": "The dataset on which geometric operation has to be performed. It is mandatory in case of performing geometric operations within the datset.", "example": "geo", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform geometric operations with user-defined geometry.", "example": true, "enum": [] }, { "name": "geom1", "in": "query", "required": false, "type": "string", "description": "user defined geometry in terms of geoJSON. It is mandatory in case of user-defined geometry for all the geometric opertaions.", "example": "{\n\"type\": \"Polygon\",\n\"coordinates\": [\n[\n[\n75.9375,\n23.725011735951796\n],\n[\n78.92578124999999,\n23.725011735951796\n],\n[\n78.92578124999999,\n26.115985925333536\n],\n[\n75.9375,\n26.115985925333536\n],\n[\n75.9375,\n23.725011735951796\n]\n]\n]\n}", "enum": [] }, { "name": "geom2", "in": "query", "required": false, "type": "string", "description": "user defined geometry in terms of geoJSON. It is mandatory in case of user-defined geometry for distance and intersection geometric opertaions.", "example": "{ \"type\": \"Polygon\", \"coordinates\": [ [ [ 75.9375, 23.725011735951796 ], [ 78.92578124999999, 23.725011735951796 ], [ 78.92578124999999, 26.115985925333536 ], [ 75.9375, 26.115985925333536 ], [ 75.9375, 23.725011735951796 ] ] ] }", "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Mandatory in case when opertaor used is Buffer, else it is not required.", "example": 10, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "response code", "example": "200", "enum": [] }, { "name": "result", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result[].area", "type": "number", "required": false, "description": "value of area after spatial operation", "example": "0.2670491076815", "enum": [] } ], "example": { "code": "200", "result": [ { "area": "0.2670491076815" } ] } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/geometricFunction?functionNme=area' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/geometricFunction?functionNme=area\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/geometricFunction?functionNme=area\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/geometricFunction?functionNme=area\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/geometricFunction?functionNme=area\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 24, "generationGroup": "mgis-get-geometricfunction-a30b004a7a", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the BoundingBox of the particular layer. - Identity: `api-operation:mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer - State model: stateful ```json { "slug": "mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/getBoundingBox", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/getBoundingBox?datasetNme=india", "operationId": "BoundingBoxID", "summary": "Returns the BoundingBox of the particular layer.", "description": "Returns the Bounding Box of the particular layer without cqlfilter and returns the bounding box of feature with cqlfilter.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "query", "in": "query", "required": false, "type": "string", "description": "the cqlfilter to be applied on the layer.", "example": "state = 'Delhi'", "enum": [] }, { "name": "datastore", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] }, { "name": "layerType", "in": "query", "required": false, "type": "string", "description": "When user to fetch bbox for admin layers.", "example": "admin", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "result", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "result.features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.features[].type", "type": "string", "required": false, "description": "", "example": "feature", "enum": [] }, { "name": "result.features[].id", "type": "string", "required": false, "description": "feature id of the feature attribute.", "example": "india.1", "enum": [] }, { "name": "result.features[].geometry", "type": "string", "required": false, "description": "geometry of the feature attribute.", "example": "28.612964,77.229463", "enum": [] }, { "name": "result.features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.features[].properties.bbox", "type": "string", "required": false, "description": "", "example": "BOX(74.7912769996 34.0866250004,74.7912769996 34.0866250004)", "enum": [] }, { "name": "result.totalFeatures", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.numberMatched", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.numberReturned", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.timestamp", "type": "string", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "result.crs", "type": "string", "required": false, "description": "", "example": "null", "enum": [] } ], "example": { "code": "200", "result": { "type": "FeatureCollection", "features": [ { "type": "feature", "id": "india.1", "geometry": "null", "properties": { "bbox": "BOX(74.7912769996 34.0866250004,74.7912769996 34.0866250004)" } } ], "totalFeatures": 1, "numberMatched": 1, "numberReturned": 1, "timestamp": "2020-08-10T13:59:51.624Z", "crs": "null" } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/getBoundingBox?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/getBoundingBox?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/getBoundingBox?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/getBoundingBox?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/getBoundingBox?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 28, "generationGroup": "mgis-get-getboundingbox-e12794310e", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the entire dataset. - Identity: `api-operation:mgis-get-getdataset-fetches-the-entire-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getdataset-fetches-the-entire-dataset - State model: stateful ```json { "slug": "mgis-get-getdataset-fetches-the-entire-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/getDataset", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/getDataset?datasetNme=india", "operationId": "getDatasetId", "summary": "Fetches the entire dataset.", "description": "Fetches the entire dataset. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "groupBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘true’ to perform groupBy on the datsetNme. 'propertyName' paramter is mandatory for 'groupBy' parameter.", "example": "true", "enum": [] }, { "name": "propertyName", "in": "query", "required": false, "type": "string", "description": "Pass the column names list which you want to display in the resultant. Optional in case of order(sortBy). Mandatory in case of 'groupBy'.", "example": "street,poi", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘A' for ascending and ‘D’ for descending to perform order(sort) By. Mandatory when order(sort) By is to be performed.", "example": "A", "enum": [] }, { "name": "sortByProperty", "in": "query", "required": false, "type": "string", "description": "Pass the column names which the user wants to order(sort) By in the resultant. Mandatory when order(sort) By is to be performed.", "example": "poi,street", "enum": [] }, { "name": "startIndex", "in": "query", "required": false, "type": "number", "description": "To set the start index from which the user wants the result to be displayed. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 1, "enum": [] }, { "name": "count", "in": "query", "required": false, "type": "number", "description": "To fix the number of results to be returned. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 3, "enum": [] }, { "name": "bbox", "in": "query", "required": false, "type": "string", "description": "Returns the bounding box of the dataset if set as true.", "example": "false", "enum": [] }, { "name": "datastore", "in": "query", "required": false, "type": "string", "description": "Name of datastore where adaptor published.", "example": "adaptor", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "result", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "result.features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.features[].type", "type": "string", "required": false, "description": "", "example": "feature", "enum": [] }, { "name": "result.features[].id", "type": "string", "required": false, "description": "feature id of the feature attribute.", "example": "india.1", "enum": [] }, { "name": "result.features[].geometry", "type": "string", "required": false, "description": "geometry of the feature attribute.", "example": "28.612964,77.229463", "enum": [] }, { "name": "result.features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.features[].properties.st_name", "type": "string", "required": false, "description": "", "example": "ANDAMAN AND NICOBAR ISLANDS", "enum": [] }, { "name": "result.totalFeatures", "type": "number", "required": false, "description": "", "example": 35, "enum": [] }, { "name": "result.numberMatched", "type": "number", "required": false, "description": "", "example": 35, "enum": [] }, { "name": "result.numberReturned", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.timestamp", "type": "string", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "result.links", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.links[].title", "type": "string", "required": false, "description": "", "example": "next page", "enum": [] }, { "name": "result.links[].type", "type": "string", "required": false, "description": "", "example": "application/json", "enum": [] }, { "name": "result.links[].rel", "type": "string", "required": false, "description": "", "example": "next", "enum": [] }, { "name": "result.links[].href", "type": "string", "required": false, "description": "", "example": "http://localhost:8081/geoserver/wfs?PROPERTYNAME=st_name&TYPENAME=anjali%3Aindia&REQUEST=GetFeature&OUTPUTFORMAT=application%2Fjson&VERSION=2.0.0&SERVICE=WFS&COUNT=1&ISDENORMALIZED=false&STARTINDEX=1", "enum": [] }, { "name": "result.crs", "type": "string", "required": false, "description": "", "example": "null", "enum": [] } ], "example": { "code": "200", "result": { "type": "FeatureCollection", "features": [ { "type": "feature", "id": "india.1", "geometry": "null", "properties": { "st_name": "ANDAMAN AND NICOBAR ISLANDS" } } ], "totalFeatures": 35, "numberMatched": 35, "numberReturned": 1, "timestamp": "2020-08-10T13:59:51.624Z", "links": [ { "title": "next page", "type": "application/json", "rel": "next", "href": "http://localhost:8081/geoserver/wfs?PROPERTYNAME=st_name&TYPENAME=anjali%3Aindia&REQUEST=GetFeature&OUTPUTFORMAT=application%2Fjson&VERSION=2.0.0&SERVICE=WFS&COUNT=1&ISDENORMALIZED=false&STARTINDEX=1" } ], "crs": "null" } } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/getDataset?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/getDataset?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/getDataset?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/getDataset?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/getDataset?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 43, "generationGroup": "mgis-get-getdataset-54829730bd", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the geometry of the particular layer on the basis of the featureID provided by the user. - Identity: `api-operation:mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user - State model: stateful ```json { "slug": "mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/getGeometry", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/getGeometry?datasetNme=india", "operationId": "GetGeometryID", "summary": "Returns the geometry of the particular layer on the basis of the featureID provided by the user.", "description": "Returns the geometry of the particular layer on the basis of the featureID or filter provided by the user.(Any one of the filter or featureID can be provided)", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "feature id of the particular feature of the layer whose geometry is required.", "example": "india.8", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "query on the basis of which the geometry is required.", "example": "id=368", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.type", "type": "string", "required": false, "description": "", "example": "Multipoint", "enum": [] }, { "name": "geometry.coordinates", "type": "string", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.geometry_name", "type": "string", "required": false, "description": "geometry of the feature attribute.", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.properties", "type": "string", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "geometry": { "type": "Multipoint", "coordinates": [ 80.3519, 26.4634 ], "geometry_name": "geom", "properties": {} } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "error due to missing param", "example": "Mandatory Parameters missing", "enum": [] } ], "example": { "error": "Mandatory Parameters missing" } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/getGeometry?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/getGeometry?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/getGeometry?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/getGeometry?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/getGeometry?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 13, "generationGroup": "mgis-get-getgeometry-810a0cb660", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `api-operation:mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry - State model: stateful ```json { "slug": "mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/query_apply/join", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id", "operationId": "applyQueryCrossId", "summary": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "queryType value can be basic, spatialOperation or functionBased .", "example": "functionBased", "enum": [] }, { "name": "datasetSource", "in": "query", "required": true, "type": "string", "description": "Source dataset name. Mandatory both in case of Spatial as well as Non-Spatial Query.", "example": "geocode_ii", "enum": [] }, { "name": "datasetRef", "in": "query", "required": false, "type": "string", "description": "Source dataset name. Mandatory both in case of Non-Spatial Query.", "example": "geocode_iii", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Mandatory both in case of Spatial as well as Non-Spatial Query. Operators allowed for queryType = 'basic' are: =, =, , <>, IN and NOT IN Operators allowed for queryType = 'spatialOperation' are: Intersects, Disjoint, Overlaps, Equals, Touches, DWithin, Within, Contains and Crosses", "example": "Intersects", "enum": [] }, { "name": "sourceProperty", "in": "query", "required": true, "type": "string", "description": "Source property attributes to be queried. Mandatory both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "refProperty", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be queried. Mandatory in case of Non-Spatial Query.", "example": "id", "enum": [] }, { "name": "selectionParamSource", "in": "query", "required": false, "type": "string", "description": "Source property attributes to be reflected in the result. Optional in case of arithmetic operations, Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "id, lat", "enum": [] }, { "name": "selectionParamRef", "in": "query", "required": false, "type": "string", "description": "Reference property attributes to be reflected in the result. Optional both in case of Spatial(between 2 datasets) as well as Non-Spatial Query.", "example": "osm_id, name", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform spatial filters with user-defined geometry.", "example": true, "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Mandatory in case of operator DWithin, else it is not required.", "example": 10, "enum": [] }, { "name": "comparisonFunction", "in": "query", "required": false, "type": "string", "description": "The functions allowed are: Area, Length and isEmpty . This parameter is mandatory for queryType functionBased.", "example": "Area", "enum": [] }, { "name": "comparisonOperator", "in": "query", "required": false, "type": "string", "description": "The operators allowed are: =, >, , >= and <=. This parameter is mandatory for queryType functionBased.", "example": "=", "enum": [] }, { "name": "comparisonValue", "in": "query", "required": false, "type": "string", "description": "The values allowed are: Numeric (in meters) (for comparisonFunction area and length) Boolean (for comparisonFunction isEmpty) . This parameter is mandatory for queryType functionBased.", "example": "100", "enum": [] }, { "name": "saveAsNewDataset", "in": "query", "required": false, "type": "string", "description": "Boolean if true cross join result will be saved in to db as new table.", "example": true, "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": false, "type": "string", "description": "Name of new Table(mandatory if saveAsNewDataset = true)", "example": "JoinTable", "enum": [] } ], "request": { "required": true, "contentTypes": [ "application/json" ], "fields": [ { "name": "type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "features[].type", "type": "string", "required": false, "description": "", "example": "Feature", "enum": [] }, { "name": "features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "features[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "features[].geometry.type", "type": "string", "required": false, "description": "", "example": "Polygon", "enum": [] }, { "name": "features[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] } ], "example": { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": "example", "geometry": { "type": "Polygon", "coordinates": [] } } ] } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "result", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result[].prop1", "type": "string", "required": false, "description": "Prop1 value", "example": "example", "enum": [] }, { "name": "result[].prop2", "type": "string", "required": false, "description": "Prop2 value", "example": "example", "enum": [] }, { "name": "result[].prop3", "type": "string", "required": false, "description": "Prop3 value", "example": "example", "enum": [] }, { "name": "result[].prop4", "type": "string", "required": false, "description": "Prop4 value", "example": "example", "enum": [] }, { "name": "result[].prop5", "type": "string", "required": false, "description": "Prop5 value", "example": "example", "enum": [] }, { "name": "result[].prop6", "type": "string", "required": false, "description": "Prop6 value", "example": "example", "enum": [] }, { "name": "result[].prop7", "type": "string", "required": false, "description": "Prop7 value", "example": "example", "enum": [] }, { "name": "result[].prop8", "type": "string", "required": false, "description": "Prop8 value", "example": "example", "enum": [] } ], "example": { "code": "200", "result": [ { "prop1": "example", "prop2": "example", "prop3": "example", "prop4": "example", "prop5": "example", "prop6": "example", "prop7": "example", "prop8": "example" } ] } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "error due to authorization", "example": "authorization unsuccesful", "enum": [] } ], "example": { "error": "authorization unsuccesful" } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "405", "description": "Method not allowed.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "method not allowerd, wrong method or invalid parameters", "example": "Method not allowed", "enum": [] } ], "example": { "error": "Method not allowed" } }, { "status": "409", "description": "Conflict in parameters passed.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "wrong parameters", "example": "wrong parameters", "enum": [] } ], "example": { "error": "wrong parameters" } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mapmyindia.com/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n\n ]\n }\n }\n ]\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n \n ]\n }\n }\n ]\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mapmyindia.com/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\",\n headers=headers,\n json={\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n \n ]\n }\n }\n ]\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n\n ]\n }\n }\n ]\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mapmyindia.com/query_apply/join?queryType=functionBased&datasetSource=geocode_ii&operator=Intersects&sourceProperty=id\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": \"example\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n\n ]\n }\n }\n ]\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 53, "generationGroup": "mgis-post-query-apply-join-0a448610a0", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together. - Identity: `api-operation:mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together` - Canonical: https://developer.mappls.com/api-reference/mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together - State model: stateful ```json { "slug": "mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/query_apply/single", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/query_apply/single?datasetNme=india", "operationId": "applyQuerySingleId", "summary": "Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together.", "description": "You cannot pass query, summerizeValue and uniqueValue paramater together. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together You can perform geometric operation (area and length) when queryType = 'functionBased' is passed. The query parameter is an optional paramater in this case. summerizeValue and uniqueValue paramater are not applicable in this case.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "queryType", "in": "query", "required": false, "type": "string", "description": "queryType value should be functionBased. Mandatory when user has to perform geometric operations with or without query.", "example": "functionBased", "enum": [] }, { "name": "query", "in": "query", "required": false, "type": "string", "description": "Query to be applied on the dataset. Mandatory if uniqueValue, summerizeValue and queryType parameter is not passed. This is an optional paramter when queryType = 'functionBased' is passed.", "example": "state = 'Delhi'", "enum": [] }, { "name": "uniqueValue", "in": "query", "required": false, "type": "string", "description": "Unique values of a attribute of the dataset. Mandatory if query and summerizeValue parameter is not passed.", "example": "st_name", "enum": [] }, { "name": "summerizeValue", "in": "query", "required": false, "type": "string", "description": "Summerize values of a attribute of the dataset. Mandatory if query and uniqueValue parameter is not passed.", "example": "st_name", "enum": [] }, { "name": "groupBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘true’ to perform groupBy on the datsetNme. Applicable for 'query'. 'propertyName' paramter is mandatory for 'groupBy' parameter.", "example": "true", "enum": [] }, { "name": "propertyName", "in": "query", "required": false, "type": "string", "description": "Pass the column names list which you want to display in the resultant. Optional in case of order(sortBy). Mandatory in case of 'groupBy'.", "example": "street,poi", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Pass ‘A' for ascending and ‘D’ for descending to perform order(sort) By. Applicable for all. Mandatory when order(sort) By is to be performed.", "example": "A", "enum": [] }, { "name": "sortByProperty", "in": "query", "required": false, "type": "string", "description": "Pass the column names which the user wants to order(sort) By in the resultant. Applicable for 'query'. Mandatory when order(sort) By is to be performed.", "example": "poi,street", "enum": [] }, { "name": "propertyName", "in": "query", "required": false, "type": "string", "description": "Property attributes to be reflected in the result. If not passed all the columns of the datasetNme will be displayed in the resultant.", "example": "housenumber", "enum": [] }, { "name": "comparisonFunction", "in": "query", "required": false, "type": "string", "description": "The functions allowed are: Area and Length . This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased", "example": "Area", "enum": [] }, { "name": "comparisonOperator", "in": "query", "required": false, "type": "string", "description": "The operators allowed are: =, >, , >= and <=. This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased", "example": "=", "enum": [] }, { "name": "comparisonValue", "in": "query", "required": false, "type": "number", "description": "The value should be in numeric (in meters). This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased", "example": 10, "enum": [] }, { "name": "saveAsNewDataset", "in": "query", "required": false, "type": "string", "description": "Pass ‘true’ for the resultant to be saved in to user's workspace as a new table. Applicable for only queryType = 'functionBased", "example": "true", "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": false, "type": "string", "description": "Name of the table in which the resultant has to be stored. This parameter is mandatory if saveAsNewDataset = true. Applicable for only queryType = 'functionBased'", "example": "geotest", "enum": [] }, { "name": "sortBy", "in": "query", "required": false, "type": "string", "description": "Sort the result in ascending(A) or descending(D) order. Applicable for 'orderBy', 'groupBy', 'uniqueValue' and 'summerizeValue'.", "example": "A", "enum": [] }, { "name": "startIndex", "in": "query", "required": false, "type": "number", "description": "To set the start index from which the user wants the result to be displayed. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 1, "enum": [] }, { "name": "count", "in": "query", "required": false, "type": "number", "description": "To fix the number of results to be returned. Applicable for 'query', 'uniqueValue' and 'summerizeValue'.", "example": 3, "enum": [] }, { "name": "bbox", "in": "query", "required": false, "type": "string", "description": "Returns the bounding box of the dataset if set as true.", "example": "false", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "result", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] }, { "name": "result.features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.features[].type", "type": "string", "required": false, "description": "", "example": "Feature", "enum": [] }, { "name": "result.features[].id", "type": "string", "required": false, "description": "", "example": " india.2", "enum": [] }, { "name": "result.features[].geometry", "type": "string", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "result.features[].properties", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "result.features[].properties.st_name", "type": "string", "required": false, "description": "", "example": "Andhra Pradesh", "enum": [] }, { "name": "result.totalFeatures", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.numberMatched", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.numberReturned", "type": "number", "required": false, "description": "", "example": 1, "enum": [] }, { "name": "result.timestamp", "type": "string", "required": false, "description": "", "example": "1700000000000", "enum": [] }, { "name": "result.crs", "type": "string", "required": false, "description": "", "example": "null", "enum": [] }, { "name": "layerBounds", "type": "string", "required": false, "description": "", "example": "null", "enum": [] } ], "example": { "code": "200", "result": { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": " india.2", "geometry": "null", "properties": { "st_name": "Andhra Pradesh" } } ], "totalFeatures": 1, "numberMatched": 1, "numberReturned": 1, "timestamp": "2020-08-10T13:59:51.624Z", "crs": "null" }, "layerBounds": "null" } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "405", "description": "Method not allowed.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "method not allowerd, wrong method or invalid parameters", "example": "Method not allowed", "enum": [] } ], "example": { "error": "Method not allowed" } }, { "status": "409", "description": "Conflict in parameters passed.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "wrong parameters", "example": "wrong parameters", "enum": [] } ], "example": { "error": "wrong parameters" } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mapmyindia.com/query_apply/single?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/query_apply/single?datasetNme=india\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mapmyindia.com/query_apply/single?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/query_apply/single?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mapmyindia.com/query_apply/single?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 53, "generationGroup": "mgis-post-query-apply-single-b50343a051", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Validates the query to be applied on a dataset. - Identity: `api-operation:mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset - State model: stateful ```json { "slug": "mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/dqv-apis.yml", "sourceFingerprint": "ec78e94e77644b4d9ff44c58916c40813cc7f96798318569b33204ebd94fba04", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/query_validation", "baseUrl": "https://mgis-api.mapmyindia.com/", "requestUrl": "https://mgis-api.mapmyindia.com/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27", "operationId": "queryValidateId", "summary": "Validates the query to be applied on a dataset.", "description": "Validates the query to be applied on a dataset.", "tags": [ "Dataset, Query and Validate (DQV) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name of whose information has to be fetched.", "example": "india", "enum": [] }, { "name": "query", "in": "query", "required": true, "type": "string", "description": "Query to be applied on the dataset. Mandatory if uniqueValue and summerizeValue parameter is not passed.", "example": "state = 'Delhi'", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Displays the message wheather the query is valid or invalid.", "example": "Valid Query", "enum": [] }, { "name": "message.type", "type": "string", "required": false, "description": "", "example": "FeatureCollection", "enum": [] } ], "example": { "code": "200", "message": "Valid Query" } }, { "status": "206", "description": "Impartial Content.", "fields": [ { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 206, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Invalid UniqueValue.", "enum": [] } ], "example": { "code": 206, "message": "Invalid UniqueValue." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Error exception code.", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Error message.", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "No data found in Database.", "enum": [] } ], "example": { "error": "No data found in Database." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "error", "type": "string", "required": false, "description": "No data found in Database.", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Internal server error.", "example": "Something went wrong.", "enum": [] } ], "example": { "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mapmyindia.com/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mapmyindia.com/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mapmyindia.com/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mapmyindia.com/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mapmyindia.com/query_validation?datasetNme=india&query=state+%3D+%27Delhi%27\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 20, "generationGroup": "mgis-get-query-validation-29c9255f8f", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · fetches the attribute names. - Identity: `api-operation:mgis-get-describedataset-fetches-the-attribute-names-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-describedataset-fetches-the-attribute-names-v1 - State model: stateful ```json { "slug": "mgis-get-describedataset-fetches-the-attribute-names-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/describe-dataset-api.yml", "sourceFingerprint": "c981431acc37f36caebfd2b0f9c66ad08ebedef3f93e0eba70375b935d27fadd", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/describeDataset", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/describeDataset?datasetNme=india", "operationId": "describeDatasetGet", "summary": "fetches the attribute names.", "description": "Fetches the attribute names of the dataset except geometry in response.", "tags": [ "Describe Dataset API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "Returns all attribute names except geometry against a dataset.", "example": "india", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "propertyList", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "propertyList[].ColumnName", "type": "string", "required": false, "description": "Name of Column", "example": "st_name", "enum": [] }, { "name": "propertyList[].ColumnType", "type": "string", "required": false, "description": "Data Type of ColumnName", "example": "string", "enum": [] } ], "example": { "code": "200", "propertyList": [ { "ColumnName": "st_name", "ColumnType": "string" } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "422", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "422", "error": "Bad request. Username not found." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "422", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "422", "error": "Bad request. Username not found." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "422", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "422", "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mappls.com/describeDataset?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/describeDataset?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mappls.com/describeDataset?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/describeDataset?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mappls.com/describeDataset?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 23, "generationGroup": "mgis-get-describedataset-855417da71", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-describedataset-fetches-the-attribute-names" ] } ``` ## api-operation · fetches the attribute names. - Identity: `api-operation:mgis-get-describedataset-fetches-the-attribute-names` - Canonical: https://developer.mappls.com/api-reference/mgis-get-describedataset-fetches-the-attribute-names - State model: stateful ```json { "slug": "mgis-get-describedataset-fetches-the-attribute-names", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/describe-dataset-api.yml", "sourceFingerprint": "ea4acadc9a13ed87bdc8f5b4a009cb6eebcc13efc93221a3103ac8f5ea70c9b6", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/describeDataset", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/describeDataset?datasetNme=india", "operationId": "describeDatasetGet", "summary": "fetches the attribute names.", "description": "Fetches the attribute names of the dataset except geometry in response.", "tags": [ "Describe Dataset API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "Returns all attribute names except geometry against a dataset.", "example": "india", "enum": [] }, { "name": "dataStoreName", "in": "query", "required": false, "type": "string", "description": "Name of the dataStoreName in case of data adaptor.", "example": "india", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.propertyList", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.propertyList[].ColumnName", "type": "string", "required": false, "description": "Name of Column", "example": "st_name", "enum": [] }, { "name": "data.propertyList[].ColumnType", "type": "string", "required": false, "description": "Data Type of ColumnName", "example": "string", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "propertyList": [ { "ColumnName": "st_name", "ColumnType": "string" } ] } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "message": "Layer not found.", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Access defined.", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 401, "enum": [] } ], "example": { "message": "Access defined.", "code": 401 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/describeDataset?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/describeDataset?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/describeDataset?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/describeDataset?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/describeDataset?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 19, "generationGroup": "mgis-get-describedataset-855417da71", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-describedataset-fetches-the-attribute-names-v1" ] } ``` ## api-operation · Download the dataset files in .kml, .shp or .geojson files on server. - Identity: `api-operation:mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server` - Canonical: https://developer.mappls.com/api-reference/mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server - State model: stateful ```json { "slug": "mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/export-features-apis.yml", "sourceFingerprint": "0e6609fbac25fedcc94e168c9de96d9398dea70b3fdd3cdeaa12659133fa09ab", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/export_feature", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/export_feature?datasetNme=ind_rails&fileType=.kml%2C+.shp+or+.geojson", "operationId": "getLegendsImgId", "summary": "Download the dataset files in .kml, .shp or .geojson files on server.", "description": "Download the dataset files in .kml, .shp or .geojson files on server.", "tags": [ "Export Feature API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "layername", "example": "ind_rails", "enum": [] }, { "name": "fileType", "in": "query", "required": true, "type": "string", "description": "Type of file you want to Download(.kml, .shp or .geojson).", "example": ".kml, .shp or .geojson", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Response when file successfully saved on server.", "fields": [ { "name": "code", "type": "integer", "required": false, "description": "", "example": 200, "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "File downloaded successfully.", "enum": [] }, { "name": "download_url", "type": "string", "required": false, "description": "", "example": "https://mgis-apiv2.mappls.com/export_data/prj_ID/datasetNme_timestamp.fileType", "enum": [] } ], "example": { "code": 200, "success": true, "message": "File downloaded successfully.", "download_url": "https://mgis-apiv2.mappls.com/export_data/prj_ID/datasetNme_timestamp.fileType" } }, { "status": "404", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "No such layer found.", "enum": [] } ], "example": { "code": "404", "message": "No such layer found." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/export_feature?datasetNme=ind_rails&fileType=.kml%2C+.shp+or+.geojson' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/export_feature?datasetNme=ind_rails&fileType=.kml%2C+.shp+or+.geojson\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/export_feature?datasetNme=ind_rails&fileType=.kml%2C+.shp+or+.geojson\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/export_feature?datasetNme=ind_rails&fileType=.kml%2C+.shp+or+.geojson\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/export_feature?datasetNme=ind_rails&fileType=.kml%2C+.shp+or+.geojson\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 10, "generationGroup": "mgis-get-export-feature-835dd26cc7", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Fetches Geometry type of datasetNme - Identity: `api-operation:mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme - State model: stateful ```json { "slug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/get-geometry-type-api.yml", "sourceFingerprint": "4c85c54f75f91c3f3353aa5644b077a5c49aa91d6ed3a3d53cedf535fcfc7a54", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/getGeometryType", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/getGeometryType?datasetNme=india", "operationId": "getgeometryID", "summary": "Fetches Geometry type of datasetNme", "description": "Fetches Geometry type of datasetNme includes vector and raster both.", "tags": [ "Get Feature Centroid/ Geometry Type API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name whose feature centroid or geometry is required.", "example": "india", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "layer's Geometry Type", "example": "linestring", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": "linestring" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "404", "message": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/getGeometryType?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/getGeometryType?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/getGeometryType?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/getGeometryType?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/getGeometryType?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 20, "generationGroup": "mgis-get-getgeometrytype-97af5b353e", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1" ] } ``` ## api-operation · Fetches Geometry type of datasetNme - Identity: `api-operation:mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1 - State model: stateful ```json { "slug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/get-geometry-type-api.yml", "sourceFingerprint": "baec95146c20c62ed13d99d44f62f336b8e09e2f2bd7bae23559048ffdbd4a3d", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/getGeometryType", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/getGeometryType?datasetNme=india", "operationId": "getgeometryID", "summary": "Fetches Geometry type of datasetNme", "description": "Fetches Geometry type of datasetNme", "tags": [ "Get Geometry Type API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The dataset name whose feature centroid or geometry is required.", "example": "india", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "geometryType", "type": "string", "required": false, "description": "layer's Geometry Type", "example": "28.612964,77.229463", "enum": [] } ], "example": { "geometryType": "linestring" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "422", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "422", "error": "Bad request. Username not found." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "422", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "422", "error": "Bad request. Username not found." } }, { "status": "422", "description": "Parameter missing", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "422", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "422", "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mappls.com/getGeometryType?datasetNme=india' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/getGeometryType?datasetNme=india\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mappls.com/getGeometryType?datasetNme=india\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/getGeometryType?datasetNme=india\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mappls.com/getGeometryType?datasetNme=india\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 20, "generationGroup": "mgis-get-getgeometrytype-97af5b353e", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme" ] } ``` ## api-operation · Fetches the feature information. - Identity: `api-operation:mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1 - State model: stateful ```json { "slug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/layer_visualization.yml", "sourceFingerprint": "8cfb02a3fcaa29b0fbe05896bfa2b311de8b9f97e897dbfddf54a338d452d8f2", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/map/getFeatureInfo", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844", "operationId": "getFeatureInfoId", "summary": "Fetches the feature information.", "description": "Fetches the feature information of the dataset name of a bounding box.", "tags": [ "Get Map and Get Feature Info API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched.", "example": "india", "enum": [] }, { "name": "x", "in": "query", "required": true, "type": "number", "description": "To pass the x coordinate of the feature.", "example": 457, "enum": [] }, { "name": "y", "in": "query", "required": true, "type": "number", "description": "To pass the y coordinate of the feature.", "example": 33, "enum": [] }, { "name": "height", "in": "query", "required": true, "type": "number", "description": "To set the height of the maptiles.", "example": 256, "enum": [] }, { "name": "width", "in": "query", "required": true, "type": "number", "description": "To set the width of the maptiles.", "example": 256, "enum": [] }, { "name": "bbox", "in": "query", "required": true, "type": "string", "description": "Defines the set of substitution values that can be used in SLD variable substitution.", "example": "7514065.628545968,2504688.542848655,8766409.899970295,3757032.8142729844", "enum": [] }, { "name": "transparent", "in": "query", "required": false, "type": "string", "description": "To set the transparency of the maptiles.", "example": "true", "enum": [] }, { "name": "srs", "in": "query", "required": false, "type": "string", "description": "To pass the projection of the maptiles.", "example": "EPSG:3857", "enum": [] }, { "name": "style", "in": "query", "required": false, "type": "string", "description": "To pass the style of the maptiles.", "example": "example", "enum": [] }, { "name": "buffer", "in": "query", "required": false, "type": "number", "description": "To pass the y coordinate of the feature.", "example": 30, "enum": [] }, { "name": "cql_filter", "in": "query", "required": false, "type": "string", "description": "To pass the cqlfilter for fetching the filtered features. This is an optional parameter.", "example": "name = 'India'", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.featureInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.featureInfo.st_name", "type": "unknown", "required": false, "description": "", "example": "Rajasthan", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "featureInfo": { "st_name": "Rajasthan" } } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Does not exist.", "enum": [] } ], "example": { "code": "404", "message": "Does not exist." } }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 32, "generationGroup": "mgis-get-map-getfeatureinfo-6dd132c52b", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-map-getfeatureinfo-fetches-the-feature-information" ] } ``` ## api-operation · Fetches the feature information. - Identity: `api-operation:mgis-get-map-getfeatureinfo-fetches-the-feature-information` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information - State model: stateful ```json { "slug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/layer_visualization.yml", "sourceFingerprint": "789212df7cef0c3c95f49b37b2ce29dd4e8cedfaa496a797b04008071fc8fa34", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/map/getFeatureInfo", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844", "operationId": "getFeatureInfoId", "summary": "Fetches the feature information.", "description": "Fetches the feature information of the dataset name of a bounding box.", "tags": [ "Get Map and Get Feature Info API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched.", "example": "india", "enum": [] }, { "name": "x", "in": "query", "required": true, "type": "number", "description": "To pass the x coordinate of the feature.", "example": 457, "enum": [] }, { "name": "y", "in": "query", "required": true, "type": "number", "description": "To pass the y coordinate of the feature.", "example": 33, "enum": [] }, { "name": "height", "in": "query", "required": true, "type": "number", "description": "To set the height of the maptiles.", "example": 256, "enum": [] }, { "name": "width", "in": "query", "required": true, "type": "number", "description": "To set the width of the maptiles.", "example": 256, "enum": [] }, { "name": "bbox", "in": "query", "required": true, "type": "string", "description": "Defines the set of substitution values that can be used in SLD variable substitution.", "example": "7514065.628545968,2504688.542848655,8766409.899970295,3757032.8142729844", "enum": [] }, { "name": "transparent", "in": "query", "required": false, "type": "string", "description": "To set the transparency of the maptiles.", "example": "true", "enum": [] }, { "name": "srs", "in": "query", "required": false, "type": "string", "description": "To pass the projection of the maptiles.", "example": "EPSG:3857", "enum": [] }, { "name": "style", "in": "query", "required": false, "type": "string", "description": "To pass the style of the maptiles.", "example": "example", "enum": [] }, { "name": "buffer", "in": "query", "required": false, "type": "number", "description": "To pass the y coordinate of the feature.", "example": 30, "enum": [] }, { "name": "cql_filter", "in": "query", "required": false, "type": "string", "description": "To pass the cqlfilter for fetching the filtered features. This is an optional parameter.", "example": "name = 'India'", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Response code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "", "enum": [] }, { "name": "data", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.featureInfo", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "data.featureInfo.st_name", "type": "unknown", "required": false, "description": "", "example": "Rajasthan", "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "featureInfo": { "st_name": "Rajasthan" } } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Does not exist.", "enum": [] } ], "example": { "code": "404", "message": "Does not exist." } }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/map/getFeatureInfo?datasetNme=india&x=457&y=33&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 32, "generationGroup": "mgis-get-map-getfeatureinfo-6dd132c52b", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1" ] } ``` ## api-operation · Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry. - Identity: `api-operation:mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1 - State model: stateful ```json { "slug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/layer_visualization.yml", "sourceFingerprint": "8cfb02a3fcaa29b0fbe05896bfa2b311de8b9f97e897dbfddf54a338d452d8f2", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/map/getLayerJoin", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN", "operationId": null, "summary": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "description": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "tags": [ "Get Map and Get Feature Info API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "The queryType can be 'basic' or 'spatialOperation'.", "example": "basic", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform geometric operations with user-defined geometry. It is mandatory in case of queryType 'spatialOperation' for userDefined geometry.", "example": "true", "enum": [] }, { "name": "datasetSource", "in": "query", "required": true, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "india", "enum": [] }, { "name": "datasetRef", "in": "query", "required": false, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched. It is mandatory in case of queryType 'basic' as well as for queryType 'spatialOperation' in case of performing the operation between 2 datsets.", "example": "geo", "enum": [] }, { "name": "sourceProperty", "in": "query", "required": false, "type": "string", "description": "Source property on which the user wants to fetch the result. It is mandatory in case of queryType 'basic'", "example": "id", "enum": [] }, { "name": "refProperty", "in": "query", "required": false, "type": "string", "description": "Reference property on which the user wants to fetch the result. It is mandatory in case of queryType 'basic'", "example": "id", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Operators acceptable for queryType 'basic' are: =, =, , <>, IN and NOT IN Operators acceptable for queryType 'spatialOperation' are: Intersects, Disjoint, Overlaps, Equals, Touches, DWithin, Within, Contains and Crosses It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "=", "enum": [] }, { "name": "height", "in": "query", "required": true, "type": "number", "description": "To set the height of the maptiles. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": 256, "enum": [] }, { "name": "width", "in": "query", "required": true, "type": "number", "description": "To set the width of the maptiles. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": 256, "enum": [] }, { "name": "bbox", "in": "query", "required": true, "type": "string", "description": "Defines the set of substitution values that can be used in SLD variable substitution. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "7514065.628545968,2504688.542848655,8766409.899970295,3757032.8142729844", "enum": [] }, { "name": "access_token", "in": "query", "required": true, "type": "string", "description": "To authorization token for the API access. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "geom", "in": "query", "required": false, "type": "string", "description": "User defined geometry will be of geoJSON format. It will contain the geometry key-value part of the geojson. The geojson should contain the coordinates in [lon, lat] format . It is mandatory in case of queryType 'spatialOperation' for userDefined geometry.", "example": "{ \"type\": \"Polygon\", \"coordinates\": [[[74.02587890625,21.739091217718574],[77.71728515624999,21.739091217718574],[77.71728515624999,25.20494115356912],[74.02587890625,25.20494115356912],[74.02587890625,21.739091217718574]]]}", "enum": [] }, { "name": "transparent", "in": "query", "required": false, "type": "string", "description": "To set the transparency of the maptiles.", "example": "true", "enum": [] }, { "name": "srs", "in": "query", "required": false, "type": "string", "description": "To pass the projection of the maptiles.", "example": "EPSG:3857", "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Distance is only required when the operator is DWITHIN .", "example": 10, "enum": [] }, { "name": "env", "in": "query", "required": false, "type": "string", "description": "Enables the user to change the styling of the layer.", "example": "fillcolor:023e8a, fillopacity:2a9d8f, strokecolor:283618,strokewidth:1,labelsize: 18, labelcolor: 772e25", "enum": [] }, { "name": "style", "in": "query", "required": false, "type": "string", "description": "To pass the style of the maptiles.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "example" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Does not exist.", "enum": [] } ], "example": { "code": "404", "message": "Does not exist." } }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 32, "generationGroup": "mgis-get-map-getlayerjoin-9a1aac1c53", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry" ] } ``` ## api-operation · Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry. - Identity: `api-operation:mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry - State model: stateful ```json { "slug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/layer_visualization.yml", "sourceFingerprint": "789212df7cef0c3c95f49b37b2ce29dd4e8cedfaa496a797b04008071fc8fa34", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/map/getLayerJoin", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN", "operationId": null, "summary": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "description": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "tags": [ "Get Map and Get Feature Info API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "queryType", "in": "query", "required": true, "type": "string", "description": "The queryType can be 'basic' or 'spatialOperation'.", "example": "basic", "enum": [] }, { "name": "userGeom", "in": "query", "required": false, "type": "string", "description": "Value of UserGeom will be 'true' if user wants to perform geometric operations with user-defined geometry. It is mandatory in case of queryType 'spatialOperation' for userDefined geometry.", "example": "true", "enum": [] }, { "name": "datasetSource", "in": "query", "required": true, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "india", "enum": [] }, { "name": "datasetRef", "in": "query", "required": false, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched. It is mandatory in case of queryType 'basic' as well as for queryType 'spatialOperation' in case of performing the operation between 2 datsets.", "example": "geo", "enum": [] }, { "name": "sourceProperty", "in": "query", "required": false, "type": "string", "description": "Source property on which the user wants to fetch the result. It is mandatory in case of queryType 'basic'", "example": "id", "enum": [] }, { "name": "refProperty", "in": "query", "required": false, "type": "string", "description": "Reference property on which the user wants to fetch the result. It is mandatory in case of queryType 'basic'", "example": "id", "enum": [] }, { "name": "operator", "in": "query", "required": true, "type": "string", "description": "Operators acceptable for queryType 'basic' are: =, =, , <>, IN and NOT IN Operators acceptable for queryType 'spatialOperation' are: Intersects, Disjoint, Overlaps, Equals, Touches, DWithin, Within, Contains and Crosses It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "=", "enum": [] }, { "name": "height", "in": "query", "required": true, "type": "number", "description": "To set the height of the maptiles. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": 256, "enum": [] }, { "name": "width", "in": "query", "required": true, "type": "number", "description": "To set the width of the maptiles. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": 256, "enum": [] }, { "name": "bbox", "in": "query", "required": true, "type": "string", "description": "Defines the set of substitution values that can be used in SLD variable substitution. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "7514065.628545968,2504688.542848655,8766409.899970295,3757032.8142729844", "enum": [] }, { "name": "access_token", "in": "query", "required": true, "type": "string", "description": "To authorization token for the API access. It is mandatory both in case of queryType 'basic' as well as queryType 'spatialOperation'.", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "geom", "in": "query", "required": false, "type": "string", "description": "User defined geometry will be of geoJSON format. It will contain the geometry key-value part of the geojson. The geojson should contain the coordinates in [lon, lat] format . It is mandatory in case of queryType 'spatialOperation' for userDefined geometry.", "example": "{ \"type\": \"Polygon\", \"coordinates\": [[[74.02587890625,21.739091217718574],[77.71728515624999,21.739091217718574],[77.71728515624999,25.20494115356912],[74.02587890625,25.20494115356912],[74.02587890625,21.739091217718574]]]}", "enum": [] }, { "name": "transparent", "in": "query", "required": false, "type": "string", "description": "To set the transparency of the maptiles.", "example": "true", "enum": [] }, { "name": "srs", "in": "query", "required": false, "type": "string", "description": "To pass the projection of the maptiles.", "example": "EPSG:3857", "enum": [] }, { "name": "distance", "in": "query", "required": false, "type": "number", "description": "Distance is only required when the operator is DWITHIN .", "example": 10, "enum": [] }, { "name": "env", "in": "query", "required": false, "type": "string", "description": "Enables the user to change the styling of the layer.", "example": "fillcolor:023e8a, fillopacity:2a9d8f, strokecolor:283618,strokewidth:1,labelsize: 18, labelcolor: 772e25", "enum": [] }, { "name": "style", "in": "query", "required": false, "type": "string", "description": "To pass the style of the maptiles.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "example" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Does not exist.", "enum": [] } ], "example": { "code": "404", "message": "Does not exist." } }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/map/getLayerJoin?queryType=basic&datasetSource=india&operator=%3D&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 32, "generationGroup": "mgis-get-map-getlayerjoin-9a1aac1c53", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1" ] } ``` ## api-operation · Fetches the maptiles of the dataset name of a bounding box. - Identity: `api-operation:mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1 - State model: stateful ```json { "slug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/layer_visualization.yml", "sourceFingerprint": "8cfb02a3fcaa29b0fbe05896bfa2b311de8b9f97e897dbfddf54a338d452d8f2", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/map/getMap", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN", "operationId": "getMapId", "summary": "Fetches the maptiles of the dataset name of a bounding box.", "description": "Fetches the maptiles of the dataset name of a bounding box in response.", "tags": [ "Get Map and Get Feature Info API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched.", "example": "india", "enum": [] }, { "name": "height", "in": "query", "required": true, "type": "number", "description": "To set the height of the maptiles.", "example": 256, "enum": [] }, { "name": "width", "in": "query", "required": true, "type": "number", "description": "To set the width of the maptiles.", "example": 256, "enum": [] }, { "name": "bbox", "in": "query", "required": true, "type": "string", "description": "Defines the set of substitution values that can be used in SLD variable substitution.", "example": "7514065.628545968,2504688.542848655,8766409.899970295,3757032.8142729844", "enum": [] }, { "name": "access_token", "in": "query", "required": true, "type": "string", "description": "To authorization token for the API access. It is mandatory both in case of user-defined geometry as well as for the published dataset.", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "queryType", "in": "query", "required": false, "type": "string", "description": "queryType value should be 'functionBased'. Mandatory when user has to perform geometric operations with or without 'cqlfilter'.", "example": "functionBased", "enum": [] }, { "name": "comparisonFunction", "in": "query", "required": false, "type": "string", "description": "The functions allowed are: Area and Length . This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased'.", "example": "Area", "enum": [] }, { "name": "comparisonOperator", "in": "query", "required": false, "type": "string", "description": "The operators allowed are: =, >, , >= and <=. This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased'.", "example": "=", "enum": [] }, { "name": "comparisonValue", "in": "query", "required": false, "type": "number", "description": "The value should be in numeric (in meters). This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased'.", "example": 10, "enum": [] }, { "name": "transparent", "in": "query", "required": false, "type": "string", "description": "To set the transparency of the maptiles.", "example": "true", "enum": [] }, { "name": "env", "in": "query", "required": false, "type": "string", "description": "Enables the user to change the styling of the layer.", "example": "fillcolor:023e8a, fillopacity:2a9d8f, strokecolor:283618,strokewidth:1,labelsize: 18, labelcolor: 772e25", "enum": [] }, { "name": "cql_filter", "in": "query", "required": false, "type": "string", "description": "To pass the cqlfilter for fetching the filtered maptiles. This is an optional paramter when queryType = 'functionBased' is passed.", "example": "name = 'India'", "enum": [] }, { "name": "srs", "in": "query", "required": false, "type": "string", "description": "To pass the projection of the maptiles.", "example": "EPSG:3857", "enum": [] }, { "name": "style", "in": "query", "required": false, "type": "string", "description": "To pass the style of the maptiles.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "example" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Does not exist.", "enum": [] } ], "example": { "code": "404", "message": "Does not exist." } }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 29, "generationGroup": "mgis-get-map-getmap-ee5f026cd2", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box" ] } ``` ## api-operation · Fetches the maptiles of the dataset name of a bounding box. - Identity: `api-operation:mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box - State model: stateful ```json { "slug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/layer_visualization.yml", "sourceFingerprint": "789212df7cef0c3c95f49b37b2ce29dd4e8cedfaa496a797b04008071fc8fa34", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/map/getMap", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN", "operationId": "getMapId", "summary": "Fetches the maptiles of the dataset name of a bounding box.", "description": "Fetches the maptiles of the dataset name of a bounding box in response.", "tags": [ "Get Map and Get Feature Info API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The datasetNme of whose maptiles has to be fetched.", "example": "india", "enum": [] }, { "name": "height", "in": "query", "required": true, "type": "number", "description": "To set the height of the maptiles.", "example": 256, "enum": [] }, { "name": "width", "in": "query", "required": true, "type": "number", "description": "To set the width of the maptiles.", "example": 256, "enum": [] }, { "name": "bbox", "in": "query", "required": true, "type": "string", "description": "Defines the set of substitution values that can be used in SLD variable substitution.", "example": "7514065.628545968,2504688.542848655,8766409.899970295,3757032.8142729844", "enum": [] }, { "name": "access_token", "in": "query", "required": true, "type": "string", "description": "To authorization token for the API access. It is mandatory both in case of user-defined geometry as well as for the published dataset.", "example": "YOUR_ACCESS_TOKEN", "enum": [] }, { "name": "queryType", "in": "query", "required": false, "type": "string", "description": "queryType value should be 'functionBased'. Mandatory when user has to perform geometric operations with or without 'cqlfilter'.", "example": "functionBased", "enum": [] }, { "name": "comparisonFunction", "in": "query", "required": false, "type": "string", "description": "The functions allowed are: Area and Length . This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased'.", "example": "Area", "enum": [] }, { "name": "comparisonOperator", "in": "query", "required": false, "type": "string", "description": "The operators allowed are: =, >, , >= and <=. This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased'.", "example": "=", "enum": [] }, { "name": "comparisonValue", "in": "query", "required": false, "type": "number", "description": "The value should be in numeric (in meters). This parameter is mandatory for queryType functionBased. Applicable for only queryType = 'functionBased'.", "example": 10, "enum": [] }, { "name": "transparent", "in": "query", "required": false, "type": "string", "description": "To set the transparency of the maptiles.", "example": "true", "enum": [] }, { "name": "env", "in": "query", "required": false, "type": "string", "description": "Enables the user to change the styling of the layer.", "example": "fillcolor:023e8a, fillopacity:2a9d8f, strokecolor:283618,strokewidth:1,labelsize: 18, labelcolor: 772e25", "enum": [] }, { "name": "cql_filter", "in": "query", "required": false, "type": "string", "description": "To pass the cqlfilter for fetching the filtered maptiles. This is an optional paramter when queryType = 'functionBased' is passed.", "example": "name = 'India'", "enum": [] }, { "name": "srs", "in": "query", "required": false, "type": "string", "description": "To pass the projection of the maptiles.", "example": "EPSG:3857", "enum": [] }, { "name": "style", "in": "query", "required": false, "type": "string", "description": "To pass the style of the maptiles.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [], "example": "example" }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Invalid Parameter value", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Layer not found.", "enum": [] }, { "name": "auth", "type": "string", "required": false, "description": "", "example": "unsuccessful", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Invalid Parameter value", "message": "Layer not found.", "auth": "unsuccessful", "code": 400 } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Invalid Authorization.", "enum": [] } ], "example": { "code": "401", "message": "Invalid Authorization." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "", "example": "Does not exist.", "enum": [] } ], "example": { "code": "404", "message": "Does not exist." } }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/map/getMap?datasetNme=india&height=256&width=256&bbox=7514065.628545968%2C2504688.542848655%2C8766409.899970295%2C3757032.8142729844&access_token=YOUR_ACCESS_TOKEN\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 29, "generationGroup": "mgis-get-map-getmap-ee5f026cd2", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1" ] } ``` ## api-operation · Fetches the names of all the datasets available in the user's workspace on the geoserver. - Identity: `api-operation:mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1 - State model: stateful ```json { "slug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "34013a0683256113b49f4f53bf081248614e58651009f244030f2ff29bceb0d3", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/getLayersList", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/getLayersList", "operationId": "getLayersListId", "summary": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "description": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "tags": [ "L3 (Layer List and Legends) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "items[].layername", "type": "string", "required": false, "description": "", "example": "geocode_ii", "enum": [] }, { "name": "items[].geometrytype", "type": "string", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] } ], "example": [ { "layername": "geocode_ii", "geometrytype": "POLYGON" } ] }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "404", "error": "Bad request. Username not found." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "404", "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mappls.com/getLayersList' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/getLayersList\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mappls.com/getLayersList\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/getLayersList\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mappls.com/getLayersList\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 12, "generationGroup": "mgis-get-getlayerslist-7a2d5959c7", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver" ] } ``` ## api-operation · Fetches the names of all the datasets available in the user's workspace on the geoserver. - Identity: `api-operation:mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver - State model: stateful ```json { "slug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "cc9f61d938cafd0f18558bd2ec18e73b5293bb526b53a74b2d6e6373f0d087bf", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/getLayersList", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/getLayersList", "operationId": "getLayersListId", "summary": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "description": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "tags": [ "L3 (Layer List and Legends) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Make connection with database with valid credentials.", "example": "", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": { "layername": "geocode_ii", "geometrytype": "POLYGON", "source": "example" }, "enum": [] } ], "example": { "code": "200", "success": true, "message": "", "data": { "layername": "geocode_ii", "geometrytype": "POLYGON", "source": "example" } } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "404", "error": "Bad request. Username not found." } }, { "status": "404", "description": "No data found in database.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "404", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Bad request. Username not found.", "enum": [] } ], "example": { "code": "404", "error": "Bad request. Username not found." } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/getLayersList' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/getLayersList\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/getLayersList\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/getLayersList\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/getLayersList\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 14, "generationGroup": "mgis-get-getlayerslist-7a2d5959c7", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1" ] } ``` ## api-operation · Fetches the image of legends for the given dataset. - Identity: `api-operation:mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1 - State model: stateful ```json { "slug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "34013a0683256113b49f4f53bf081248614e58651009f244030f2ff29bceb0d3", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "GET", "path": "/getLegendsImg", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/getLegendsImg?datasetNme=ind_rails", "operationId": "getLegendsImgId", "summary": "Fetches the image of legends for the given dataset.", "description": "Fetches the image of legends for the given dataset.", "tags": [ "L3 (Layer List and Legends) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "geoserver layername", "example": "ind_rails", "enum": [] }, { "name": "stylename", "in": "query", "required": false, "type": "string", "description": "Any available styles for layer.", "example": "line", "enum": [] }, { "name": "polygonfillcolor", "in": "query", "required": false, "type": "string", "description": "Any color hex code.", "example": "ffffff", "enum": [] }, { "name": "polygonfillopacity", "in": "query", "required": false, "type": "string", "description": "value between 0-1.", "example": 0.5, "enum": [] }, { "name": "linestrokecolor", "in": "query", "required": false, "type": "string", "description": "Any color hex code.", "example": "ffffff", "enum": [] }, { "name": "linestrokewidth", "in": "query", "required": false, "type": "string", "description": "with value.", "example": 10, "enum": [] }, { "name": "linestrokeopacity", "in": "query", "required": false, "type": "string", "description": "value between 0-1.", "example": 0.2, "enum": [] }, { "name": "pointfillcolor", "in": "query", "required": false, "type": "string", "description": "Any color hex code.", "example": "ffffff", "enum": [] }, { "name": "pointfillopacity", "in": "query", "required": false, "type": "string", "description": "value between 0-1.", "example": 0.3, "enum": [] }, { "name": "pointsize", "in": "query", "required": false, "type": "string", "description": "size value.", "example": 20, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Legend image in PNG format", "fields": [], "example": "example" }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-api.mappls.com/getLegendsImg?datasetNme=ind_rails' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/getLegendsImg?datasetNme=ind_rails\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-api.mappls.com/getLegendsImg?datasetNme=ind_rails\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/getLegendsImg?datasetNme=ind_rails\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-api.mappls.com/getLegendsImg?datasetNme=ind_rails\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 14, "generationGroup": "mgis-get-getlegendsimg-eed36ebbd0", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": false, "alternativeSlugs": [ "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset" ] } ``` ## api-operation · Fetches the image of legends for the given dataset. - Identity: `api-operation:mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset - State model: stateful ```json { "slug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "cc9f61d938cafd0f18558bd2ec18e73b5293bb526b53a74b2d6e6373f0d087bf", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v2", "method": "GET", "path": "/getLegendsImg", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/getLegendsImg?datasetNme=ind_rails", "operationId": "getLegendsImgId", "summary": "Fetches the image of legends for the given dataset.", "description": "Fetches the image of legends for the given dataset.", "tags": [ "L3 (Layer List and Legends) API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "geoserver layername", "example": "ind_rails", "enum": [] }, { "name": "stylename", "in": "query", "required": false, "type": "string", "description": "Any available styles for layer.", "example": "line", "enum": [] }, { "name": "polygonfillcolor", "in": "query", "required": false, "type": "string", "description": "Any color hex code.", "example": "ffffff", "enum": [] }, { "name": "polygonfillopacity", "in": "query", "required": false, "type": "string", "description": "value between 0-1.", "example": 0.5, "enum": [] }, { "name": "linestrokecolor", "in": "query", "required": false, "type": "string", "description": "Any color hex code.", "example": "ffffff", "enum": [] }, { "name": "linestrokewidth", "in": "query", "required": false, "type": "string", "description": "with value.", "example": 10, "enum": [] }, { "name": "linestrokeopacity", "in": "query", "required": false, "type": "string", "description": "value between 0-1.", "example": 0.2, "enum": [] }, { "name": "pointfillcolor", "in": "query", "required": false, "type": "string", "description": "Any color hex code.", "example": "ffffff", "enum": [] }, { "name": "pointfillopacity", "in": "query", "required": false, "type": "string", "description": "value between 0-1.", "example": 0.3, "enum": [] }, { "name": "pointsize", "in": "query", "required": false, "type": "string", "description": "size value.", "example": 20, "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Legend image in PNG format", "fields": [], "example": "Image" }, { "status": "500", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://mgis-apiv2.mappls.com/getLegendsImg?datasetNme=ind_rails' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/getLegendsImg?datasetNme=ind_rails\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://mgis-apiv2.mappls.com/getLegendsImg?datasetNme=ind_rails\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/getLegendsImg?datasetNme=ind_rails\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://mgis-apiv2.mappls.com/getLegendsImg?datasetNme=ind_rails\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 14, "generationGroup": "mgis-get-getlegendsimg-eed36ebbd0", "generationCount": 2, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [ "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1" ] } ``` ## api-operation · copy dataset on mGIS engine - Identity: `api-operation:mgis-post-copy-style-copy-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-copy-style-copy-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-copy-style-copy-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/copy/style", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/copy/style?oldDatasetNme=example&newDatasetNme=example", "operationId": "copydatasetPost", "summary": "copy dataset on mGIS engine", "description": "Creates a copy of an existing dataset and takes input of the dataset in the form of geojson and other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "oldDatasetNme", "in": "query", "required": true, "type": "string", "description": "old dataset Name.", "example": "example", "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": true, "type": "string", "description": "new dataset Name.", "example": "example", "enum": [] }, { "name": "propertyNames", "in": "query", "required": false, "type": "string", "description": "Names of columns that are required in the copy dataset.", "example": "district,state,hospital,literacy", "enum": [] }, { "name": "newPropertyList", "in": "query", "required": false, "type": "string", "description": "Names of new columns that need to be added in the copy dataset.", "example": "{\"items\":[{\"propertyName\":\"name1\",\"propertyType\":\"text\"},{\"propertyName\":\"name2\",\"propertyType\":\"text\",\"defaultValue\":\"shsh\"}]}", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified previous dataset Name on mGIS platform", "example": "Published new DatasetName", "enum": [] } ], "example": { "message": "Published new DatasetName" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/copy/style?oldDatasetNme=example&newDatasetNme=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/copy/style?oldDatasetNme=example&newDatasetNme=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/copy/style?oldDatasetNme=example&newDatasetNme=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/copy/style?oldDatasetNme=example&newDatasetNme=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/copy/style?oldDatasetNme=example&newDatasetNme=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 12, "generationGroup": "mgis-post-copy-style-7b168c99ed", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Deletes the feature from the featureList. - Identity: `api-operation:mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist` - Canonical: https://developer.mappls.com/api-reference/mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist - State model: stateful ```json { "slug": "mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "DELETE", "path": "/deleteFeature", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/deleteFeature?datasetNme=a01072020", "operationId": "DeleteFeature", "summary": "Deletes the feature from the featureList.", "description": "Deletes the feature from the featureList on the basis of the filter value or the featureID value provided by the user.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "dataset name", "example": "a01072020", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "filter value", "example": "id=34801", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "unique feature id to delete the particular feature id. featureID can take input multiple values which should be comma separated.It can delete multiple feature.", "example": "a01072020.55,a01072020.60,a01072020.57", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 200, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the columns specified by the user in the updatedValues have been updated.", "example": "Feature deleted.", "enum": [] } ], "example": { "code": 200, "message": "Feature deleted." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://mgis-api.mappls.com/deleteFeature?datasetNme=a01072020' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/deleteFeature?datasetNme=a01072020\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://mgis-api.mappls.com/deleteFeature?datasetNme=a01072020\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/deleteFeature?datasetNme=a01072020\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://mgis-api.mappls.com/deleteFeature?datasetNme=a01072020\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 12, "generationGroup": "mgis-delete-deletefeature-d40a668d91", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Rename an existing dataset on mGIS engine - Identity: `api-operation:mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/rename/style", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/rename/style?oldDatasetNme=example&newDatasetNme=example", "operationId": "renamedatasetPost", "summary": "Rename an existing dataset on mGIS engine", "description": "Renames an existing dataset and takes input of the dataset in the form of geojson and other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "oldDatasetNme", "in": "query", "required": true, "type": "string", "description": "old dataset Name.", "example": "example", "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": true, "type": "string", "description": "new dataset Name.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified with new Dataset Name on mGIS platform", "example": "New Layer has been successfuly renamed with new style name.", "enum": [] } ], "example": { "message": "New Layer has been successfuly renamed with new style name." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/rename/style?oldDatasetNme=example&newDatasetNme=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/rename/style?oldDatasetNme=example&newDatasetNme=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/rename/style?oldDatasetNme=example&newDatasetNme=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/rename/style?oldDatasetNme=example&newDatasetNme=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/rename/style?oldDatasetNme=example&newDatasetNme=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 10, "generationGroup": "mgis-post-rename-style-059297d641", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Duplicate dataset within mGIS engine. - Identity: `api-operation:mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine - State model: stateful ```json { "slug": "mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/copy/style", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/copy/style?oldDatasetNme=example&newDatasetNme=example", "operationId": "copydatasetPost", "summary": "Duplicate dataset within mGIS engine.", "description": "Produces a duplicate of an established dataset and accepts input in the form of geojson and additional parameters to generate/publish it on the mGIS engine, enabling its application for manipulation, analysis, and visualization within the mGIS platform.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "oldDatasetNme", "in": "query", "required": true, "type": "string", "description": "old dataset Name.", "example": "example", "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": true, "type": "string", "description": "new dataset Name.", "example": "example", "enum": [] }, { "name": "propertyNames", "in": "query", "required": false, "type": "string", "description": "Names of columns that are required in the copy dataset.", "example": "district,state,hospital,literacy", "enum": [] }, { "name": "newPropertyList", "in": "query", "required": false, "type": "string", "description": "Names of new columns that need to be added in the copy dataset.", "example": "{\"items\":[{\"propertyName\":\"name1\",\"propertyType\":\"text\"},{\"propertyName\":\"name2\",\"propertyType\":\"text\",\"defaultValue\":\"shsh\"}]}", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified previous dataset Name on mGIS platform", "example": "Published new DatasetName", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Published new DatasetName", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/copy/style?oldDatasetNme=example&newDatasetNme=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/copy/style?oldDatasetNme=example&newDatasetNme=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/copy/style?oldDatasetNme=example&newDatasetNme=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/copy/style?oldDatasetNme=example&newDatasetNme=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/copy/style?oldDatasetNme=example&newDatasetNme=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 18, "generationGroup": "mgis-post-sat-copy-style-68356d18b8", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Deletes the feature from the featureList. - Identity: `api-operation:mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist` - Canonical: https://developer.mappls.com/api-reference/mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist - State model: stateful ```json { "slug": "mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "DELETE", "path": "/sat/deleteFeature", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/deleteFeature?datasetNme=a01072020", "operationId": "DeleteFeature", "summary": "Deletes the feature from the featureList.", "description": "Deletes the feature from the featureList on the basis of the filter value or the featureID value provided by the user.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The name of the datasetNme that user wants to delete.", "example": "a01072020", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "The unique filter condition specifically used to selectively include or exclude items from a set or dataset.", "example": "id=34801", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "unique feature id to delete the particular feature id. featureID can take input multiple values which should be comma separated.It can delete multiple feature.", "example": "a01072020.55,a01072020.60,a01072020.57", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the columns specified by the user in the updatedValues have been updated.", "example": "Feature deleted.", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Feature deleted.", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request DELETE \\\n --url 'https://mgis-apiv2.mappls.com/sat/deleteFeature?datasetNme=a01072020' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/deleteFeature?datasetNme=a01072020\", {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"DELETE\",\n \"https://mgis-apiv2.mappls.com/sat/deleteFeature?datasetNme=a01072020\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/deleteFeature?datasetNme=a01072020\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"DELETE\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Delete, \"https://mgis-apiv2.mappls.com/sat/deleteFeature?datasetNme=a01072020\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "retire", "evidenceScore": 17, "generationGroup": "mgis-delete-sat-deletefeature-664040f8a5", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Rename an existing dataset on mGIS engine - Identity: `api-operation:mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/rename/style", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/rename/style?oldDatasetNme=example&newDatasetNme=example", "operationId": "renamedatasetPost", "summary": "Rename an existing dataset on mGIS engine", "description": "Changes the name of an existing dataset, and accepts input in the form of geojson and additional parameters to generate/publish it on the mGIS engine. This facilitates its utilization for manipulation, analysis, and visualization within the mGIS platform.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "oldDatasetNme", "in": "query", "required": true, "type": "string", "description": "old dataset Name.", "example": "example", "enum": [] }, { "name": "newDatasetNme", "in": "query", "required": true, "type": "string", "description": "new dataset Name.", "example": "example", "enum": [] }, { "name": "styleID", "in": "query", "required": false, "type": "string", "description": "Style identifier and its corresponding description.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified with new Dataset Name on mGIS platform", "example": "New Layer has been successfuly renamed with new style name.", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "New Layer has been successfuly renamed with new style name.", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/rename/style?oldDatasetNme=example&newDatasetNme=example' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/rename/style?oldDatasetNme=example&newDatasetNme=example\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/rename/style?oldDatasetNme=example&newDatasetNme=example\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/rename/style?oldDatasetNme=example&newDatasetNme=example\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/rename/style?oldDatasetNme=example&newDatasetNme=example\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 17, "generationGroup": "mgis-post-sat-rename-style-0a77e17789", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Uploads and publishes the dataset on mGIS engine - Identity: `api-operation:mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/saveDataset/file", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/saveDataset/file", "operationId": "PublishingFilePost", "summary": "Uploads and publishes the dataset on mGIS engine", "description": "Accepts a dataset in formats like JSON, GeoJSON, CSV, XLSX, KML, ZIP, XLT, TIF, along with additional parameters, to generate/publish it on the mGIS engine. This enables further utilization for manipulation, analysis, and visualization within the mGIS platform.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "datasetNme", "type": "string", "required": false, "description": "Name of the dataset that will be used while saving/appending/truncating [If not provided filename is taken as datasetNme]", "example": "test", "enum": [] }, { "name": "file", "type": "string", "required": true, "description": "File that data contains data that needs to be published/appended [max size: 20 MB]", "example": "example", "enum": [] }, { "name": "sheetName", "type": "string", "required": false, "description": "Name of the sheet incase the file is one of the spreadsheet formats [If not provided first sheet of the document is taken by default]", "example": "example", "enum": [] }, { "name": "lat", "type": "string", "required": false, "description": "Name of the column containing latitude incase the file is one of the spreadsheet formats [If not provided 'Lat' is taken by default]", "example": "28.612964", "enum": [] }, { "name": "lng", "type": "string", "required": false, "description": "Name of the column containing longitude incase the file is one of the spreadsheet formats [If not provided 'Lng' is taken by default]", "example": "77.229463", "enum": [] }, { "name": "appendStatus", "type": "string", "required": false, "description": "If set to true, the file provided will be appended to pre-existing data within the dataset of name provided in datasetNme param [condition is that the data should exist / no need to set it to false in case of non-appending]", "example": "example", "enum": [] }, { "name": "truncateStatus", "type": "string", "required": false, "description": "If set to true, the file provided will be appended and pre-existing data within the dataset of name provided in datasetNme param will be truncated/deleted [condition is that the data provided should be of same structure OR should contain previous structure else there can be loss of information / no need to set it to false]", "example": "example", "enum": [] }, { "name": "polygonfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the polygon/s", "example": "f2e824", "enum": [] }, { "name": "polygonfillopacity", "type": "string", "required": false, "description": "opacity of polygon/s ranging from 0-1", "example": 0.7, "enum": [] }, { "name": "linestrokecolor", "type": "string", "required": false, "description": "hex color without '#' of the line/s", "example": "2ce622", "enum": [] }, { "name": "linestrokewidth", "type": "string", "required": false, "description": "width of the line/s in pixels", "example": 2, "enum": [] }, { "name": "linestrokeopacity", "type": "string", "required": false, "description": "opacity of line/s ranging from 0-1", "example": 0.5, "enum": [] }, { "name": "pointfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the point/s", "example": "2266e3", "enum": [] }, { "name": "pointfillopacity", "type": "string", "required": false, "description": "opacity of point/s ranging from 0-1", "example": 0.8, "enum": [] }, { "name": "pointsize", "type": "string", "required": false, "description": "size of point/s in pixels", "example": 10, "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified on mGIS platform", "example": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/saveDataset/file' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/saveDataset/file\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/saveDataset/file\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/saveDataset/file\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/saveDataset/file\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 29, "generationGroup": "mgis-post-sat-savedataset-file-25b107f9a6", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Transfers and deploys the dataset onto the mGIS engine. - Identity: `api-operation:mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine - State model: stateful ```json { "slug": "mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/saveDataset/object", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/saveDataset/object", "operationId": "PublishingObjectPost", "summary": "Transfers and deploys the dataset onto the mGIS engine.", "description": "Accepts a dataset in geojson format along with specified parameters to generate/publish it on the mGIS engine, enabling further manipulation, analysis, and visualization within the mGIS platform.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "datasetNme", "type": "string", "required": true, "description": "Name of the dataset that will be used while saving/appending/truncating", "example": "test", "enum": [] }, { "name": "geoJSON", "type": "string", "required": true, "description": "String representation of GEOJSON object that you want to save as a dataset", "example": "{ \"type\": \"FeatureCollection\", \"features\": [ { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 80.1727294921875, 27.581329075043357 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 78.848876953125, 26.711266913515747 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 81.309814453125, 26.23430203240673 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 79.1015625, 25.596948323286135 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }", "enum": [] }, { "name": "appendStatus", "type": "string", "required": false, "description": "If set to true, the geoJSON provided will be appended to pre-existing data within the dataset of name provided in datasetNme param [condition is that the data should exist / no need to set it to false in case of non-appending]", "example": "example", "enum": [] }, { "name": "truncateStatus", "type": "string", "required": false, "description": "If set to true, the geoJSON provided will be appended and pre-existing data within the dataset of name provided in datasetNme param will be truncated/deleted [condition is that the data provided should be of same structure OR should contain previous structure else there can be loss of information / no need to set it to false]", "example": "example", "enum": [] }, { "name": "polygonfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the polygon/s", "example": "f2e824", "enum": [] }, { "name": "polygonfillopacity", "type": "string", "required": false, "description": "opacity of polygon/s ranging from 0-1", "example": 0.7, "enum": [] }, { "name": "linestrokecolor", "type": "string", "required": false, "description": "hex color without '#' of the line/s", "example": "2ce622", "enum": [] }, { "name": "linestrokewidth", "type": "string", "required": false, "description": "width of the line/s in pixels", "example": 2, "enum": [] }, { "name": "linestrokeopacity", "type": "string", "required": false, "description": "opacity of line/s ranging from 0-1", "example": 0.5, "enum": [] }, { "name": "pointfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the point/s", "example": "2266e3", "enum": [] }, { "name": "pointfillopacity", "type": "string", "required": false, "description": "opacity of point/s ranging from 0-1", "example": 0.8, "enum": [] }, { "name": "pointsize", "type": "string", "required": false, "description": "size of point/s in pixels", "example": 10, "enum": [] }, { "name": "featureID", "type": "string", "required": false, "description": "unique feature id to delete the particular feature id.", "example": "india.1", "enum": [] } ], "example": { "datasetNme": "test", "geoJSON": "{ \"type\": \"FeatureCollection\", \"features\": [ { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 80.1727294921875, 27.581329075043357 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 78.848876953125, 26.711266913515747 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 81.309814453125, 26.23430203240673 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 79.1015625, 25.596948323286135 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified on mGIS platform", "example": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/saveDataset/object' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/saveDataset/object\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/saveDataset/object\",\n headers=headers,\n json={\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/saveDataset/object\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/saveDataset/object\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 27, "generationGroup": "mgis-post-sat-savedataset-object-3ca562f60c", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Uploads and publishes the subset of datasets on mGIS engine - Identity: `api-operation:mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/saveDataset/subset", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/saveDataset/subset", "operationId": "PublishingSubsetPost", "summary": "Uploads and publishes the subset of datasets on mGIS engine", "description": "Generates and deploys subsets of existing datasets, filtered by specific conditions (either attribute-based or spatial), for subsequent utilization in manipulation, analysis, and visualization within the mGIS platform.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "datasetNme", "type": "string", "required": true, "description": "Name of the parent dataset which will be used to create sub-dataset", "example": "example", "enum": [] }, { "name": "newDatasetNme", "type": "string", "required": true, "description": "Name of the sub-dataset which will be created from parent dataset", "example": "example", "enum": [] }, { "name": "filter", "type": "string", "required": false, "description": "WHERE clause which filters the parent dataset", "example": "id > 20", "enum": [] }, { "name": "properties", "type": "string", "required": false, "description": "Comma separated name of the columns that will be used to create sub-dataset [If not provided all the column will be used by default]", "example": "column1,column2,column3", "enum": [] }, { "name": "polygonfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the polygon/s", "example": "f2e824", "enum": [] }, { "name": "polygonfillopacity", "type": "string", "required": false, "description": "opacity of polygon/s ranging from 0-1", "example": 0.7, "enum": [] }, { "name": "linestrokecolor", "type": "string", "required": false, "description": "hex color without '#' of the line/s", "example": "2ce622", "enum": [] }, { "name": "linestrokewidth", "type": "string", "required": false, "description": "width of the line/s in pixels", "example": 2, "enum": [] }, { "name": "linestrokeopacity", "type": "string", "required": false, "description": "opacity of line/s ranging from 0-1", "example": 0.5, "enum": [] }, { "name": "pointfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the point/s", "example": "2266e3", "enum": [] }, { "name": "pointfillopacity", "type": "string", "required": false, "description": "opacity of point/s ranging from 0-1", "example": 0.8, "enum": [] }, { "name": "pointsize", "type": "string", "required": false, "description": "size of point/s in pixels", "example": 10, "enum": [] }, { "name": "layerType", "type": "string", "required": false, "description": "Type of the layer that can only be 'user' or 'admin'.", "example": "user,admin", "enum": [] }, { "name": "countryNme", "type": "string", "required": false, "description": "The countryNme parameter to get the data of the specific country datasets(nepal,bhutan)", "example": "nepal,bhutan", "enum": [] } ], "example": { "datasetNme": "example", "newDatasetNme": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published on mGIS platform", "example": "Subset DATASET_NAME has been published for user USERNAME successfully", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Subset DATASET_NAME has been published for user USERNAME successfully", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/saveDataset/subset' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/saveDataset/subset\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/saveDataset/subset\",\n headers=headers,\n json={\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/saveDataset/subset\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/saveDataset/subset\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 28, "generationGroup": "mgis-post-sat-savedataset-subset-c5f14d1641", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Modifies one or more features with the provided updated values. - Identity: `api-operation:mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values - State model: stateful ```json { "slug": "mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/updateFeature", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D", "operationId": "UpdateFeature", "summary": "Modifies one or more features with the provided updated values.", "description": "This operation involves making changes to individual or multiple features within a dataset by applying updated values. This process allows for the refinement or adjustment of specific attributes or characteristics associated with the geographic elements, ensuring that the dataset accurately reflects the most current information.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The name of the datasetNme that user wants to delete.", "example": "a01072020", "enum": [] }, { "name": "updatedValues", "in": "query", "required": true, "type": "string", "description": "Array of objects containing properties and their values to be updated in a feature (any one filter or featureID or replaceAll must be passed along with updatedValues).", "example": "[{\"propertyName\":\"parentcate\",\"newValue\":\"6\"}]", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "The unique filter condition specifically used to selectively include or exclude items from a set or dataset.", "example": "id=34801", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "unique feature id to delete the particular feature id. featureID can take input multiple values which should be comma separated.It can delete multiple feature.", "example": "a01072020.55,a01072020.60,a01072020.57", "enum": [] }, { "name": "replaceAll", "in": "query", "required": false, "type": "string", "description": "valueless parameter to replace all the features with the updated values provided.No value is required to be passed in replaceAll.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the columns specified by the user in the updatedValues have been updated.", "example": "Columns Updated.", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Columns Updated.", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 19, "generationGroup": "mgis-post-sat-updatefeature-c3b4032f26", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user. - Identity: `api-operation:mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user - State model: stateful ```json { "slug": "mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/updateGeom", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/updateGeom?datasetNme=a01072020", "operationId": "updateGeom", "summary": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "description": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "The name of the datasetNme that user wants to delete.", "example": "a01072020", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "The unique filter condition specifically used to selectively include or exclude items from a set or dataset.", "example": "id=34801", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "unique feature id to delete the particular feature id. featureID can take input multiple values which should be comma separated.It can delete multiple feature.", "example": "a01072020.55,a01072020.60,a01072020.57", "enum": [] } ], "request": { "required": true, "contentTypes": [ "application/json" ], "fields": [ { "name": "geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.coordinates", "type": "unknown", "required": false, "description": "updated geomtery coordinates. Case-1 multipoint {\"geometry\":{\"coordinates\":[500000,54505678]}} Case-2 multipolygon {\"geometry\":{\"coordinates\":[[[76.55555,24.046464],[76.552734,28.844674],[83.056641,28.844674],[83.056641,24.046464],[76.55555,24.046464]]]}} Case-3 multiline {\"geometry\":{\"coordinates\":[[500000,54505678],[0,540000],[5450000,0]]}}", "example": "28.612964,77.229463", "enum": [] } ], "example": { "geometry": { "coordinates": "example" } } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that geometry updated on mGIS platform", "example": "Geometry Updated", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Geometry Updated", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/updateGeom?datasetNme=a01072020' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/updateGeom?datasetNme=a01072020\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/updateGeom?datasetNme=a01072020\",\n headers=headers,\n json={\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/updateGeom?datasetNme=a01072020\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/updateGeom?datasetNme=a01072020\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 19, "generationGroup": "mgis-post-sat-updategeom-c904383ab9", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Add or delete column in a given Dataset on mGIS engine - Identity: `api-operation:mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/sat-apis.yml", "sourceFingerprint": "a2a4cba3e839f88138a9856683d09a09e1ca7a5a9f0ab93785da7b28f3ba215e", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/sat/updateStructure", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/sat/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D", "operationId": "updateStructure", "summary": "Add or delete column in a given Dataset on mGIS engine", "description": "Performs operation like add and delete for columns on the given dataset table.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "dataset Name.", "example": "test", "enum": [] }, { "name": "operation", "in": "query", "required": true, "type": "string", "description": "only two possible operation add or delete.", "example": "add", "enum": [] }, { "name": "updateColumns", "in": "query", "required": true, "type": "string", "description": "an array of objects which contain column name , its type and default value. example [{\"name\":\"id\",\"type\":\"int\",\"defaultValue\":55}]", "example": "[{\"name\":\"id\",\"type\":\"int\",\"defaultValue\":55}]", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "200", "enum": [] }, { "name": "success", "type": "string", "required": false, "description": "", "example": true, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that structure updated successfully on mGIS platform", "example": "Structure updated successfully", "enum": [] }, { "name": "data", "type": "unknown", "required": false, "description": "", "example": {}, "enum": [] } ], "example": { "code": "200", "success": true, "message": "Structure updated successfully", "data": {} } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "message": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "401", "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "code": "401", "message": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "message": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/sat/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/sat/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/sat/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/sat/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/sat/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 17, "generationGroup": "mgis-post-sat-updatestructure-db18ed4c48", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Uploads and publishes the dataset on mGIS engine - Identity: `api-operation:mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/saveDataset/file", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/saveDataset/file", "operationId": "PublishingFilePost", "summary": "Uploads and publishes the dataset on mGIS engine", "description": "Takes input of the dataset in the following format => JSON | json | geojson | GEOJSON | csv | CSV | xlsx | xls | XLSX | XLS | kml | KML | zip | ZIP | xlt | XLT | xlsm | XLSM | xltx | XLTX | TIF | tif along with other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "datasetNme", "type": "string", "required": false, "description": "Name of the dataset that will be used while saving/appending/truncating [If not provided filename is taken as datasetNme]", "example": "test", "enum": [] }, { "name": "file", "type": "string", "required": true, "description": "File that data contains data that needs to be published/appended [max size: 20 MB]", "example": "example", "enum": [] }, { "name": "sheetName", "type": "string", "required": false, "description": "Name of the sheet incase the file is one of the spreadsheet formats [If not provided first sheet of the document is taken by default]", "example": "example", "enum": [] }, { "name": "lat", "type": "string", "required": false, "description": "Name of the column containing latitude incase the file is one of the spreadsheet formats [If not provided 'Lat' is taken by default]", "example": "28.612964", "enum": [] }, { "name": "lng", "type": "string", "required": false, "description": "Name of the column containing longitude incase the file is one of the spreadsheet formats [If not provided 'Lng' is taken by default]", "example": "77.229463", "enum": [] }, { "name": "appendStatus", "type": "string", "required": false, "description": "If set to true, the file provided will be appended to pre-existing data within the dataset of name provided in datasetNme param [condition is that the data should exist / no need to set it to false in case of non-appending]", "example": "example", "enum": [] }, { "name": "truncateStatus", "type": "string", "required": false, "description": "If set to true, the file provided will be appended and pre-existing data within the dataset of name provided in datasetNme param will be truncated/deleted [condition is that the data provided should be of same structure OR should contain previous structure else there can be loss of information / no need to set it to false]", "example": "example", "enum": [] }, { "name": "polygonfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the polygon/s", "example": "f2e824", "enum": [] }, { "name": "polygonfillopacity", "type": "string", "required": false, "description": "opacity of polygon/s ranging from 0-1", "example": 0.7, "enum": [] }, { "name": "linestrokecolor", "type": "string", "required": false, "description": "hex color without '#' of the line/s", "example": "2ce622", "enum": [] }, { "name": "linestrokewidth", "type": "string", "required": false, "description": "width of the line/s in pixels", "example": 2, "enum": [] }, { "name": "linestrokeopacity", "type": "string", "required": false, "description": "opacity of line/s ranging from 0-1", "example": 0.5, "enum": [] }, { "name": "pointfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the point/s", "example": "2266e3", "enum": [] }, { "name": "pointfillopacity", "type": "string", "required": false, "description": "opacity of point/s ranging from 0-1", "example": 0.8, "enum": [] }, { "name": "pointsize", "type": "string", "required": false, "description": "size of point/s in pixels", "example": 10, "enum": [] } ], "example": { "file": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified on mGIS platform", "example": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'", "enum": [] } ], "example": { "message": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/saveDataset/file' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/saveDataset/file\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/saveDataset/file\",\n headers=headers,\n json={\n \"file\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/saveDataset/file\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/saveDataset/file\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 23, "generationGroup": "mgis-post-savedataset-file-1d08b94a01", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Uploads and publishes the dataset on mGIS engine - Identity: `api-operation:mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/saveDataset/object", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/saveDataset/object", "operationId": "PublishingObjectPost", "summary": "Uploads and publishes the dataset on mGIS engine", "description": "Takes input of the dataset in the form of geojson and other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "datasetNme", "type": "string", "required": true, "description": "Name of the dataset that will be used while saving/appending/truncating", "example": "test", "enum": [] }, { "name": "geoJSON", "type": "string", "required": true, "description": "String representation of GEOJSON object that you want to save as a dataset", "example": "{ \"type\": \"FeatureCollection\", \"features\": [ { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 80.1727294921875, 27.581329075043357 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 78.848876953125, 26.711266913515747 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 81.309814453125, 26.23430203240673 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 79.1015625, 25.596948323286135 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }", "enum": [] }, { "name": "appendStatus", "type": "string", "required": false, "description": "If set to true, the geoJSON provided will be appended to pre-existing data within the dataset of name provided in datasetNme param [condition is that the data should exist / no need to set it to false in case of non-appending]", "example": "example", "enum": [] }, { "name": "truncateStatus", "type": "string", "required": false, "description": "If set to true, the geoJSON provided will be appended and pre-existing data within the dataset of name provided in datasetNme param will be truncated/deleted [condition is that the data provided should be of same structure OR should contain previous structure else there can be loss of information / no need to set it to false]", "example": "example", "enum": [] }, { "name": "polygonfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the polygon/s", "example": "f2e824", "enum": [] }, { "name": "polygonfillopacity", "type": "string", "required": false, "description": "opacity of polygon/s ranging from 0-1", "example": 0.7, "enum": [] }, { "name": "linestrokecolor", "type": "string", "required": false, "description": "hex color without '#' of the line/s", "example": "2ce622", "enum": [] }, { "name": "linestrokewidth", "type": "string", "required": false, "description": "width of the line/s in pixels", "example": 2, "enum": [] }, { "name": "linestrokeopacity", "type": "string", "required": false, "description": "opacity of line/s ranging from 0-1", "example": 0.5, "enum": [] }, { "name": "pointfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the point/s", "example": "2266e3", "enum": [] }, { "name": "pointfillopacity", "type": "string", "required": false, "description": "opacity of point/s ranging from 0-1", "example": 0.8, "enum": [] }, { "name": "pointsize", "type": "string", "required": false, "description": "size of point/s in pixels", "example": 10, "enum": [] } ], "example": { "datasetNme": "test", "geoJSON": "{ \"type\": \"FeatureCollection\", \"features\": [ { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 80.1727294921875, 27.581329075043357 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 78.848876953125, 26.711266913515747 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 81.309814453125, 26.23430203240673 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 79.1015625, 25.596948323286135 ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \"type\": \"Feature\", \"properties\": {}, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published/modified on mGIS platform", "example": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'", "enum": [] } ], "example": { "message": "Layer 'LAYER_NAME' has been published/modified in workspace 'WORKSPACE_NAME'" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/saveDataset/object' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/saveDataset/object\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/saveDataset/object\",\n headers=headers,\n json={\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/saveDataset/object\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/saveDataset/object\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"datasetNme\": \"test\",\n \"geoJSON\": \"{ \\\"type\\\": \\\"FeatureCollection\\\", \\\"features\\\": [ { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 80.1727294921875, 27.581329075043357 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 78.848876953125, 26.711266913515747 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 81.309814453125, 26.23430203240673 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Point\\\", \\\"coordinates\\\": [ 79.1015625, 25.596948323286135 ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"Polygon\\\", \\\"coordinates\\\": [ [ [ 80.4473876953125, 27.332735136859146 ], [ 79.881591796875, 27.176469131898898 ], [ 79.73876953125, 27.029770731463536 ], [ 79.85412597656249, 26.544308558627424 ], [ 80.1727294921875, 26.249083096330665 ], [ 80.8154296875, 26.80446076654616 ], [ 80.4473876953125, 27.332735136859146 ] ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 76.66259765625, 26.31311263768267 ], [ 77.71728515624999, 25.16517336866393 ], [ 79.1455078125, 24.647017162630366 ], [ 80.771484375, 25.005972656239187 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.7392578125, 27.410785702577023 ], [ 79.43115234375, 29.05616970274342 ], [ 82.24365234375, 29.094577077511826 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 74.77294921875, 21.453068633086783 ], [ 74.72900390625, 22.59372606392931 ], [ 75.1904296875, 22.207749178410847 ], [ 75.849609375, 22.63429269379353 ], [ 75.89355468749999, 21.57571893245848 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.2119140625, 22.79643932091949 ], [ 76.552734375, 22.63429269379353 ], [ 76.31103515625, 22.14670778001263 ], [ 76.37695312499999, 21.57571893245848 ], [ 76.88232421875, 21.43261686447735 ], [ 77.431640625, 21.3303150734318 ], [ 77.431640625, 22.004174972902003 ], [ 76.9482421875, 22.004174972902003 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 77.80517578125, 22.79643932091949 ], [ 78.92578124999999, 22.87744046489713 ], [ 78.28857421875, 22.79643932091949 ], [ 78.33251953125, 21.759499730719817 ], [ 77.82714843749999, 21.69826549685252 ], [ 78.99169921875, 21.759499730719817 ] ] } }, { \\\"type\\\": \\\"Feature\\\", \\\"properties\\\": {}, \\\"geometry\\\": { \\\"type\\\": \\\"LineString\\\", \\\"coordinates\\\": [ [ 80.22216796875, 22.695120184965695 ], [ 79.7607421875, 22.998851594142913 ], [ 79.40917968749999, 22.553147478403194 ], [ 80.0244140625, 22.105998799750566 ], [ 80.15625, 21.657428197370653 ], [ 79.6728515625, 21.4121622297254 ], [ 79.365234375, 21.820707853875017 ] ] } } ] }\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 20, "generationGroup": "mgis-post-savedataset-object-484fad7990", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Uploads and publishes the subset of datasets on mGIS engine - Identity: `api-operation:mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/saveDataset/subset", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/saveDataset/subset", "operationId": "PublishingSubsetPost", "summary": "Uploads and publishes the subset of datasets on mGIS engine", "description": "Creates and publishes subset of the existing datasets based on certain conditions (attributes based / spatial) so that the resultant sub-dataset can be used for further manipulation/analysis/visualization on mGIS platform", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": true, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "datasetNme", "type": "string", "required": true, "description": "Name of the parent dataset which will be used to create sub-dataset", "example": "example", "enum": [] }, { "name": "newDatasetNme", "type": "string", "required": true, "description": "Name of the sub-dataset which will be created from parent dataset", "example": "example", "enum": [] }, { "name": "filter", "type": "string", "required": false, "description": "WHERE clause which filters the parent dataset", "example": "id > 20", "enum": [] }, { "name": "properties", "type": "string", "required": false, "description": "Comma separated name of the columns that will be used to create sub-dataset [If not provided all the column will be used by default]", "example": "column1,column2,column3", "enum": [] }, { "name": "polygonfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the polygon/s", "example": "f2e824", "enum": [] }, { "name": "polygonfillopacity", "type": "string", "required": false, "description": "opacity of polygon/s ranging from 0-1", "example": 0.7, "enum": [] }, { "name": "linestrokecolor", "type": "string", "required": false, "description": "hex color without '#' of the line/s", "example": "2ce622", "enum": [] }, { "name": "linestrokewidth", "type": "string", "required": false, "description": "width of the line/s in pixels", "example": 2, "enum": [] }, { "name": "linestrokeopacity", "type": "string", "required": false, "description": "opacity of line/s ranging from 0-1", "example": 0.5, "enum": [] }, { "name": "pointfillcolor", "type": "string", "required": false, "description": "hex color without '#' of the point/s", "example": "2266e3", "enum": [] }, { "name": "pointfillopacity", "type": "string", "required": false, "description": "opacity of point/s ranging from 0-1", "example": 0.8, "enum": [] }, { "name": "pointsize", "type": "string", "required": false, "description": "size of point/s in pixels", "example": 10, "enum": [] } ], "example": { "datasetNme": "example", "newDatasetNme": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the layer has been published on mGIS platform", "example": "Subset DATASET_NAME has been published for user USERNAME successfully", "enum": [] } ], "example": { "message": "Subset DATASET_NAME has been published for user USERNAME successfully" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/saveDataset/subset' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/saveDataset/subset\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/saveDataset/subset\",\n headers=headers,\n json={\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/saveDataset/subset\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/saveDataset/subset\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"datasetNme\": \"example\",\n \"newDatasetNme\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 20, "generationGroup": "mgis-post-savedataset-subset-ef01d482ce", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Updates a single or multiple features with the updated values provided. - Identity: `api-operation:mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided` - Canonical: https://developer.mappls.com/api-reference/mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided - State model: stateful ```json { "slug": "mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/updateFeature", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D", "operationId": "UpdateFeature", "summary": "Updates a single or multiple features with the updated values provided.", "description": "Updates the a feature or multiple features with the updated values provided.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "dataset name", "example": "a01072020", "enum": [] }, { "name": "updatedValues", "in": "query", "required": true, "type": "string", "description": "Array of objects containing properties and their values to be updated in a feature (any one filter or featureID or replaceAll must be passed along with updatedValues).", "example": "[{\"propertyName\":\"parentcate\",\"newValue\":\"6\"}]", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "filter value", "example": "id=34801", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "unique feature id to delete the particular feature id. featureID can take input multiple values which should be comma separated.It can delete multiple feature.", "example": "a01072020.55,a01072020.60,a01072020.57", "enum": [] }, { "name": "replaceAll", "in": "query", "required": false, "type": "string", "description": "valueless parameter to replace all the features with the updated values provided.No value is required to be passed in replaceAll.", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 200, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that the columns specified by the user in the updatedValues have been updated.", "example": "Columns Updated.", "enum": [] } ], "example": { "code": 200, "message": "Columns Updated." } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/updateFeature?datasetNme=a01072020&updatedValues=%5B%7B%22propertyName%22%3A%22parentcate%22%2C%22newValue%22%3A%226%22%7D%5D\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 14, "generationGroup": "mgis-post-updatefeature-cbe90dc227", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user. - Identity: `api-operation:mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user` - Canonical: https://developer.mappls.com/api-reference/mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user - State model: stateful ```json { "slug": "mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/updateGeom", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/updateGeom?datasetNme=a01072020", "operationId": "updateGeom", "summary": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "description": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "dataset name", "example": "a01072020", "enum": [] }, { "name": "filter", "in": "query", "required": false, "type": "string", "description": "filter value", "example": "id=34801", "enum": [] }, { "name": "featureID", "in": "query", "required": false, "type": "string", "description": "unique feature id to delete the particular feature id. featureID can take input multiple values which should be comma separated.It can delete multiple feature.", "example": "a01072020.55,a01072020.60,a01072020.57", "enum": [] } ], "request": { "required": true, "contentTypes": [ "application/json" ], "fields": [ { "name": "geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "geometry.coordinates", "type": "unknown", "required": false, "description": "updated geomtery coordinates. Case-1 multipoint {\"geometry\":{\"coordinates\":[500000,54505678]}} Case-2 multipolygon {\"geometry\":{\"coordinates\":[[[76.55555,24.046464],[76.552734,28.844674],[83.056641,28.844674],[83.056641,24.046464],[76.55555,24.046464]]]}} Case-3 multiline {\"geometry\":{\"coordinates\":[[500000,54505678],[0,540000],[5450000,0]]}}", "example": "28.612964,77.229463", "enum": [] } ], "example": { "geometry": { "coordinates": "example" } } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 200, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that geometry updated on mGIS platform", "example": "Geometry Updated", "enum": [] } ], "example": { "code": 200, "message": "Geometry Updated" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/updateGeom?datasetNme=a01072020' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/updateGeom?datasetNme=a01072020\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/updateGeom?datasetNme=a01072020\",\n headers=headers,\n json={\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/updateGeom?datasetNme=a01072020\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/updateGeom?datasetNme=a01072020\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"geometry\": {\n \"coordinates\": \"example\"\n }\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 14, "generationGroup": "mgis-post-updategeom-b721973ace", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Add or delete column in a given Dataset on mGIS engine - Identity: `api-operation:mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine - State model: stateful ```json { "slug": "mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/sat-apis.yml", "sourceFingerprint": "15348c512128c6a43cfaf8fb29f24a78551008d1ee356cb76baa85a2724a65a8", "specVersion": "3.0.1", "apiVersion": "V1.0.0", "sourceGeneration": "v1", "method": "POST", "path": "/updateStructure", "baseUrl": "https://mgis-api.mappls.com/", "requestUrl": "https://mgis-api.mappls.com/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D", "operationId": "updateStructure", "summary": "Add or delete column in a given Dataset on mGIS engine", "description": "Performs operation like add and delete for columns on the given dataset table.", "tags": [ "SAT API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "datasetNme", "in": "query", "required": true, "type": "string", "description": "dataset Name.", "example": "test", "enum": [] }, { "name": "operation", "in": "query", "required": true, "type": "string", "description": "only two possible operation add or delete.", "example": "add", "enum": [] }, { "name": "updateColumns", "in": "query", "required": true, "type": "string", "description": "an array of objects which contain column name , its type and default value. example [{\"name\":\"id\",\"type\":\"int\",\"defaultValue\":55}]", "example": "[{\"name\":\"id\",\"type\":\"int\",\"defaultValue\":55}]", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "message", "type": "string", "required": false, "description": "If everything goes ok then user receives a message indicating that structure updated successfully on mGIS platform", "example": "Structure updated successfully", "enum": [] } ], "example": { "message": "Structure updated successfully" } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 400, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory parameters missing.", "enum": [] } ], "example": { "code": 400, "error": "Mandatory parameters missing." } }, { "status": "401", "description": "Unauthorized, accesscode is not valid for the request", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Authorization Unsuccessful", "enum": [] } ], "example": { "error": "Authorization Unsuccessful" } }, { "status": "500", "description": "Internal Server Error, the request caused an error in our systems.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "", "example": 500, "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": 500, "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-api.mappls.com/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-api.mappls.com/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-api.mappls.com/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-api.mappls.com/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"POST\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-api.mappls.com/updateStructure?datasetNme=test&operation=add&updateColumns=%5B%7B%22name%22%3A%22id%22%2C%22type%22%3A%22int%22%2C%22defaultValue%22%3A55%7D%5D\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 13, "generationGroup": "mgis-post-updatestructure-46244ca230", "generationCount": 1, "preferredGeneration": "v1", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the array of features which contains objects of geometry of the uploaded image. - Identity: `api-operation:mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image` - Canonical: https://developer.mappls.com/api-reference/mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image - State model: stateful ```json { "slug": "mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "contractStatus": "source-snapshot", "sourceId": "public-mapmyindia-mgis-apis", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/imagesegmentation.yml", "sourceFingerprint": "1d9a9ed6968df6392a22084195c34db67eb5989ac544b44341637caaf4dd2943", "specVersion": "3.0.1", "apiVersion": "V2.0.0", "sourceGeneration": "v2", "method": "POST", "path": "/ai_ml/imageSegmentation", "baseUrl": "https://mgis-apiv2.mappls.com/", "requestUrl": "https://mgis-apiv2.mappls.com/ai_ml/imageSegmentation", "operationId": "describeDatasetGet", "summary": "Returns the array of features which contains objects of geometry of the uploaded image.", "description": "Fetches the featureList of the uploaded image on the basis of the geotag, featureNme, bounds provided by the user. File, geotag, featureNme are the mandatory parameters.", "tags": [ "Satellite Image Segmentation API" ], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "file", "type": "string", "required": true, "description": "Image file in .tiff or .jpg or .png. formats", "example": "example", "enum": [] }, { "name": "geotag", "type": "string", "required": true, "description": "Case1 - Will be 0 for .jpeg, .jpg and .png images without bounds and will return geoJson reponse in pixels. Case2- Will be 1 for .tiff and .tif images without bounds and will return geoJson reponse in pixels. Case3-Will be 2 for .jpg, .jpeg and .png images with bounds and returns geoJson response.", "example": "example", "enum": [] }, { "name": "featureNme", "type": "string", "required": true, "description": "Can be either FP, RD, SOIL, VEG and WATER.", "example": "example", "enum": [] }, { "name": "bounds", "type": "object", "required": false, "description": "will be an object containing south-west and north-east corner of the image uploaded. Bounds is mandatory in case when geotag value is 2 and is not required in case when geotag value is 0 and 1.", "example": "example", "enum": [] }, { "name": "imageType", "type": "string", "required": false, "description": "type of image i.e. google or bhuwan.", "example": "example", "enum": [] }, { "name": "scale", "type": "integer", "required": false, "description": "integer value which should greater than 0.", "example": "1", "enum": [] } ], "example": { "file": "example", "geotag": "example", "featureNme": "example" } }, "responses": [ { "status": "200", "description": "OK", "fields": [ { "name": "Features", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "Features[].geometry", "type": "object", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] }, { "name": "Features[].geometry.coordinates", "type": "array", "required": false, "description": "", "example": "28.612964,77.229463", "enum": [] } ], "example": { "Features": [ { "geometry": { "coordinates": [] } } ] } }, { "status": "400", "description": "Bad Request, User made an error while creating a valid request.", "fields": [ { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Mandatory Parameter Missing", "enum": [] }, { "name": "code", "type": "number", "required": false, "description": "Error code.", "example": 400, "enum": [] } ], "example": { "error": "Mandatory Parameter Missing", "code": 400 } }, { "status": "500", "description": "Internal server error.", "fields": [ { "name": "code", "type": "string", "required": false, "description": "Error code.", "example": "500", "enum": [] }, { "name": "error", "type": "string", "required": false, "description": "Different error messages that might have occured while making a particular request to the server", "example": "Something went wrong.", "enum": [] } ], "example": { "code": "500", "error": "Something went wrong." } } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://mgis-apiv2.mappls.com/ai_ml/imageSegmentation' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"file\": \"example\",\n \"geotag\": \"example\",\n \"featureNme\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://mgis-apiv2.mappls.com/ai_ml/imageSegmentation\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"file\": \"example\",\n \"geotag\": \"example\",\n \"featureNme\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://mgis-apiv2.mappls.com/ai_ml/imageSegmentation\",\n headers=headers,\n json={\n \"file\": \"example\",\n \"geotag\": \"example\",\n \"featureNme\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://mgis-apiv2.mappls.com/ai_ml/imageSegmentation\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"file\": \"example\",\n \"geotag\": \"example\",\n \"featureNme\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://mgis-apiv2.mappls.com/ai_ml/imageSegmentation\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"file\": \"example\",\n \"geotag\": \"example\",\n \"featureNme\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 16, "generationGroup": "mgis-post-ai-ml-imagesegmentation-681344c9ca", "generationCount": 1, "preferredGeneration": "v2", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the details of all the models - Identity: `api-operation:skydnn-ai-get-models-returns-the-details-of-all-the-models` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models - State model: hybrid ```json { "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "family": "skydnn-ai", "familyName": "SkyDNN AI & Vision", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "current-source", "sourceId": "local-aihub-docs-skydnn-aiapi-docs", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "specVersion": "3.0.0", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/models", "baseUrl": "https://ai.mappls.com", "requestUrl": "https://ai.mappls.com/models", "operationId": null, "summary": "Returns the details of all the models", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "tags": [], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Successful.", "fields": [], "example": null }, { "status": "400", "description": "No current models in port", "fields": [], "example": null }, { "status": "500", "description": "Internal Error. Exception during processing whoami.", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://ai.mappls.com/models' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://ai.mappls.com/models\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://ai.mappls.com/models\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://ai.mappls.com/models\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://ai.mappls.com/models\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 3, "generationGroup": "skydnn-ai-get-models-8e291288ae", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the details of provided model - Identity: `api-operation:skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model - State model: hybrid ```json { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "family": "skydnn-ai", "familyName": "SkyDNN AI & Vision", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "current-source", "sourceId": "local-aihub-docs-skydnn-aiapi-docs", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "specVersion": "3.0.0", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/models/{api_model_key}", "baseUrl": "https://ai.mappls.com", "requestUrl": "https://ai.mappls.com/models/vidteq-ods-9", "operationId": null, "summary": "Returns the details of provided model", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "tags": [], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [ { "name": "api_model_key", "in": "path", "required": true, "type": "string", "description": "model key", "example": "vidteq-ods-9", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Successful.", "fields": [], "example": null }, { "status": "400", "description": "No current models in port", "fields": [], "example": null }, { "status": "500", "description": "Internal Error. Exception during processing whoami.", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://ai.mappls.com/models/vidteq-ods-9' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://ai.mappls.com/models/vidteq-ods-9\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://ai.mappls.com/models/vidteq-ods-9\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://ai.mappls.com/models/vidteq-ods-9\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://ai.mappls.com/models/vidteq-ods-9\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 4, "generationGroup": "skydnn-ai-get-models-api-model-key-b008e6d6bb", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the prediction as response in form of JSON - Identity: `api-operation:skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json - State model: hybrid ```json { "slug": "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "family": "skydnn-ai", "familyName": "SkyDNN AI & Vision", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "current-source", "sourceId": "local-aihub-docs-skydnn-aiapi-docs", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "specVersion": "3.0.0", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/predict", "baseUrl": "https://ai.mappls.com", "requestUrl": "https://ai.mappls.com/predict", "operationId": null, "summary": "Returns the prediction as response in form of JSON", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "tags": [], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [ "multipart/form-data" ], "fields": [ { "name": "image", "type": "string", "required": false, "description": "", "example": "example", "enum": [] } ], "example": { "image": "example" } }, "responses": [ { "status": "200", "description": "Successful.", "fields": [], "example": null }, { "status": "400", "description": "Invalid Image Type", "fields": [], "example": null }, { "status": "500", "description": "Internal Error. Exception in detection", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://ai.mappls.com/predict' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"image\": \"example\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://ai.mappls.com/predict\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"image\": \"example\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://ai.mappls.com/predict\",\n headers=headers,\n json={\n \"image\": \"example\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://ai.mappls.com/predict\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"image\": \"example\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://ai.mappls.com/predict\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"image\": \"example\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 4, "generationGroup": "skydnn-ai-post-predict-7a0fcb1bbb", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Returns the current models in port - Identity: `api-operation:skydnn-ai-get-server-whoami-returns-the-current-models-in-port` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port - State model: hybrid ```json { "slug": "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "family": "skydnn-ai", "familyName": "SkyDNN AI & Vision", "product": "AI & Vision", "stateModel": "hybrid", "contractStatus": "current-source", "sourceId": "local-aihub-docs-skydnn-aiapi-docs", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "specVersion": "3.0.0", "apiVersion": "V1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/server/whoami", "baseUrl": "https://ai.mappls.com", "requestUrl": "https://ai.mappls.com/server/whoami", "operationId": null, "summary": "Returns the current models in port", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "tags": [], "deprecated": false, "auth": { "mode": "bearer", "schemes": [ { "name": "bearerAuth", "type": "http", "scheme": "bearer" } ] }, "parameters": [], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Successful.", "fields": [], "example": null }, { "status": "400", "description": "No current models in port", "fields": [], "example": null }, { "status": "500", "description": "Internal Error. Exception during processing whoami.", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://ai.mappls.com/server/whoami' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://ai.mappls.com/server/whoami\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://ai.mappls.com/server/whoami\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://ai.mappls.com/server/whoami\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://ai.mappls.com/server/whoami\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 3, "generationGroup": "skydnn-ai-get-server-whoami-4f03367bac", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get all your client details - Identity: `api-operation:workmate-get-clients-to-get-all-your-client-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-clients-to-get-all-your-client-details - State model: stateful ```json { "slug": "workmate-get-clients-to-get-all-your-client-details", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/clients", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/clients", "operationId": "getClient", "summary": "To get all your client details", "description": "Get all your client details that comes under your organization. Using this API you will be able to identify the client's unique id, name, address,lat, long, and the contact person details. Also, you can get client's department details belong to the client.", "tags": [ "Client Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "startTime", "in": "query", "required": false, "type": "integer", "description": "EPOCH time stamp in local time. Records will be fetched from this start time.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": false, "type": "integer", "description": "EPOCH time stamp in local time. Records will be fetched till this end time.", "example": "1700000000000", "enum": [] }, { "name": "userId", "in": "query", "required": false, "type": "integer", "description": "Unique ID of the user. Once it is mentioned, only client created by these user will be displayed.", "example": "332,4323", "enum": [] }, { "name": "clientId", "in": "query", "required": false, "type": "integer", "description": "Unique ID of the client. To get the details about only the mentioned client.", "example": "YOUR_CLIENT_ID", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "successful API call", "fields": [ { "name": "clients", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "clients[].id", "type": "integer", "required": false, "description": "Unique ID of the client or Customer", "example": 3232, "enum": [] }, { "name": "clients[].status", "type": "integer", "required": false, "description": "Client status. 1 - active, 0 - inactive", "example": 1, "enum": [] }, { "name": "clients[].name", "type": "string", "required": false, "description": "Name of the client or customer", "example": "ABN pvt.ltd", "enum": [] }, { "name": "clients[].address", "type": "string", "required": false, "description": "Location address of the client or customer.", "example": "237, okhla phase 3, new delhi -110020", "enum": [] }, { "name": "clients[].contactPersonName", "type": "string", "required": false, "description": "Contact person name of client or customer location", "example": "Dinesh", "enum": [] }, { "name": "clients[].emailId", "type": "string", "required": false, "description": "Client or Customer contact email id.", "example": "workmate@mapmyindia.com", "enum": [] }, { "name": "clients[].mobileNo", "type": "string", "required": false, "description": "Client or Customer contact mobile number", "example": 9348332321, "enum": [] }, { "name": "clients[].userId", "type": "integer", "required": false, "description": "The Id of the user who created this client or customer", "example": 3232, "enum": [] }, { "name": "clients[].userName", "type": "string", "required": false, "description": "Name of the user who has created this client.", "example": "kalaivanan", "enum": [] }, { "name": "clients[].typeId", "type": "integer", "required": false, "description": "Unqiue ID of the client type/category.", "example": 0, "enum": [] }, { "name": "clients[].typeName", "type": "string", "required": false, "description": "Client category/type name", "example": "Service stations", "enum": [] }, { "name": "clients[].lat", "type": "number", "required": false, "description": "Latitude of the client location.", "example": "28.612964", "enum": [] }, { "name": "clients[].long", "type": "number", "required": false, "description": "Longitude of the client location.", "example": 77.268118, "enum": [] }, { "name": "clients[].creationTime", "type": "integer", "required": false, "description": "Client creatation time in Local Epoch Time stamp.", "example": "1700000000000", "enum": [] }, { "name": "clients[].updationTime", "type": "integer", "required": false, "description": "Last updated time against the client in Epoch Time.", "example": "1700000000000", "enum": [] }, { "name": "clients[].creationTimeStr", "type": "string", "required": false, "description": "Client creation time in string format", "example": "1700000000000", "enum": [] }, { "name": "clients[].updationTimeStr", "type": "string", "required": false, "description": "Client updation time in string format", "example": "1700000000000", "enum": [] }, { "name": "clients[].viewRight", "type": "integer", "required": false, "description": "view rights of the client. 0-public , 1-team , 2-manager", "example": 2, "enum": [] }, { "name": "clients[].departments", "type": "array", "required": false, "description": "Details of Departments associated with the clients", "example": "example", "enum": [] }, { "name": "clients[].departments[].id", "type": "string", "required": false, "description": "Unqiue Id of the department", "example": 32, "enum": [] }, { "name": "clients[].departments[].name", "type": "string", "required": false, "description": "Name of the department", "example": "product team", "enum": [] }, { "name": "clients[].departments[].contactPersonName", "type": "string", "required": false, "description": "Name of the department contact person", "example": "sundaram", "enum": [] }, { "name": "clients[].departments[].mobileNo", "type": "string", "required": false, "description": "Department cotnact person mobile number", "example": 9349439334, "enum": [] }, { "name": "clients[].departments[].emailId", "type": "string", "required": false, "description": "Department cotnact person email Id", "example": "sales@mapmyindia.com", "enum": [] }, { "name": "clients[].departments[].creationTime", "type": "string", "required": false, "description": "Time at which this department is being added. EPoch time.", "example": "1700000000000", "enum": [] }, { "name": "clients[].departments[].updationTime", "type": "string", "required": false, "description": "Time at which this department is being upated last time. It is in Epoch time.", "example": "1700000000000", "enum": [] }, { "name": "clients[].lastActivity", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "clients[].lastActivity.Status", "type": "integer", "required": false, "description": "Last activity done by the user. 3- check-in , 4- check out, 5- client created.", "example": 4, "enum": [] }, { "name": "clients[].lastActivity.time", "type": "integer", "required": false, "description": "Time at which last activity is being carried out in EPOCH Time.", "example": "1700000000000", "enum": [] }, { "name": "clients[].lastActivity.Lat", "type": "number", "required": false, "description": "Last activity location latitude.", "example": "28.612964", "enum": [] }, { "name": "clients[].lastActivity.Long", "type": "number", "required": false, "description": "Last activity location Longitude.", "example": 77.269003, "enum": [] }, { "name": "clients[].lastActivity.visitedUserId", "type": "integer", "required": false, "description": "Unique ID of the user who has done the last activity against this client.", "example": 3223, "enum": [] }, { "name": "clients[].lastActivity.vistedUserName", "type": "string", "required": false, "description": "Name of the user who has done the last activity aginst this client.", "example": "Megha Soni", "enum": [] } ], "example": { "clients": [ { "id": 3232, "status": 1, "name": "ABN pvt.ltd", "address": "237, okhla phase 3, new delhi -110020", "contactPersonName": "Dinesh", "emailId": "workmate@mapmyindia.com", "mobileNo": 9348332321, "userId": 3232 } ] } }, { "status": "204", "description": "Content not available for the selected period.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "userId not belong to your account", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/clients' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/clients\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/clients\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/clients\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/clients\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 48, "generationGroup": "workmate-get-clients-13667b3461", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To create new client - Identity: `api-operation:workmate-post-clients-to-create-new-client` - Canonical: https://developer.mappls.com/api-reference/workmate-post-clients-to-create-new-client - State model: stateful ```json { "slug": "workmate-post-clients-to-create-new-client", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/clients", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/clients", "operationId": "createClient", "summary": "To create new client", "description": "Create Client API allows you to add a new client to your organization. Using this API, You can create a new client with a name, address, lat,long, contact details, Department along with their contact details.", "tags": [ "Client Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/json" ], "fields": [ { "name": "clientName", "type": "string", "required": true, "description": "Name of the client or customer location", "example": "ABN pvt.ltd", "enum": [] }, { "name": "address", "type": "string", "required": false, "description": "Client location address.", "example": "237, okhla phase 3, new delhi -110020", "enum": [] }, { "name": "contactPersonName", "type": "string", "required": false, "description": "Clients or customers Contact person name", "example": "Dinesh", "enum": [] }, { "name": "emailId", "type": "string", "required": false, "description": "Clients or Customers contact email id.", "example": "workmate@mapmyindia.com", "enum": [] }, { "name": "mobileNo", "type": "string", "required": false, "description": "Client or Customer contact mobile number", "example": 9348332321, "enum": [] }, { "name": "typeId", "type": "integer", "required": false, "description": "Customer or client category based on your compnay details", "example": 1, "enum": [] }, { "name": "lat", "type": "number", "required": false, "description": "Latitude of the client location.", "example": "28.612964", "enum": [] }, { "name": "long", "type": "number", "required": false, "description": "Longitude of the client location.", "example": 77.268118, "enum": [] }, { "name": "viewRight", "type": "integer", "required": false, "description": "Clients view right to the users. 0-public , 1-team , 2-manager", "example": 2, "enum": [] }, { "name": "departments", "type": "array", "required": false, "description": "Departments details associated with the clients", "example": "example", "enum": [] }, { "name": "departments[].name", "type": "string", "required": false, "description": "Name of the department", "example": "product team", "enum": [] }, { "name": "departments[].contactPersonName", "type": "string", "required": false, "description": "Name of the department contact person", "example": "sundaram", "enum": [] }, { "name": "departments[].mobileNo", "type": "string", "required": false, "description": "Department cotnact person mobile number", "example": 9349439334, "enum": [] }, { "name": "departments[].emailId", "type": "string", "required": false, "description": "Department cotnact person email Id", "example": "sales@mapmyindia.com", "enum": [] } ], "example": { "clientName": "ABN pvt.ltd" } }, "responses": [ { "status": "201", "description": "Client Created", "fields": [ { "name": "id", "type": "number", "required": false, "description": "Unique Id of the client", "example": 1212, "enum": [] } ], "example": { "id": 1212 } }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "The user type is Field user. Only manager and admin type users have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://workmate.mapmyindia.com/apis/clients' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"clientName\": \"ABN pvt.ltd\"\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/clients\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"clientName\": \"ABN pvt.ltd\"\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://workmate.mapmyindia.com/apis/clients\",\n headers=headers,\n json={\n \"clientName\": \"ABN pvt.ltd\"\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/clients\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"clientName\": \"ABN pvt.ltd\"\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://workmate.mapmyindia.com/apis/clients\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"clientName\": \"ABN pvt.ltd\"\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 23, "generationGroup": "workmate-post-clients-a667fb2528", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get the list of client category in an account - Identity: `api-operation:workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account` - Canonical: https://developer.mappls.com/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account - State model: stateful ```json { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/configurations/categories", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/configurations/categories", "operationId": "getclientCategories", "summary": "To get the list of client category in an account", "description": "It gives all the client categories in an particular account. Category id can be used to create a client.", "tags": [ "Company Configurations" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "categories", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "categories[].categoryId", "type": "string", "required": false, "description": "Unique Id for the category", "example": 122, "enum": [] }, { "name": "categories[].categoryName", "type": "string", "required": false, "description": "Name of the category", "example": "Service Stations", "enum": [] } ], "example": { "categories": [ { "categoryId": 122, "categoryName": "Service Stations" } ] } }, { "status": "204", "description": "Content Not available.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/configurations/categories' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/configurations/categories\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/configurations/categories\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/configurations/categories\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/configurations/categories\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 12, "generationGroup": "workmate-get-configurations-categories-47ed5af6c2", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get the form's Id and their details from your account. - Identity: `api-operation:workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account` - Canonical: https://developer.mappls.com/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account - State model: stateful ```json { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/configurations/forms", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/configurations/forms", "operationId": "getForms", "summary": "To get the form's Id and their details from your account.", "description": "It gives all the forms which are created under your account. using this API you can get the unique Ids of different form and it can be used in custom form data API.", "tags": [ "Company Configurations" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "forms", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "forms[].formId", "type": "string", "required": false, "description": "Forms unique ID, Which will be used in Custom Forms data API to get the details.", "example": "5bb5e97a390bec703259364d", "enum": [] }, { "name": "forms[].formName", "type": "string", "required": false, "description": "Name of the Form.", "example": "Delivery Details", "enum": [] }, { "name": "forms[].formDescription", "type": "string", "required": false, "description": "Detailed description of the Form", "example": "Enter the delivery details while doing checkout", "enum": [] } ], "example": { "forms": [ { "formId": "5bb5e97a390bec703259364d", "formName": "Delivery Details", "formDescription": "Enter the delivery details while doing checkout" } ] } }, { "status": "204", "description": "Content Not available.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/configurations/forms' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/configurations/forms\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/configurations/forms\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/configurations/forms\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/configurations/forms\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 13, "generationGroup": "workmate-get-configurations-forms-ab55883c8c", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Get users attendance details with travelled distance. - Identity: `api-operation:workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance` - Canonical: https://developer.mappls.com/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance - State model: stateful ```json { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/reports/attendances", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/reports/attendances?startTime=1700000000000&endTime=1700000000000", "operationId": "gattendanceetAttendanceData", "summary": "Get users attendance details with travelled distance.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "tags": [ "Reports" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "userId", "in": "query", "required": false, "type": "integer", "description": "", "example": "1", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "integer", "description": "", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "integer", "description": "", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "attendances", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "attendances[].name", "type": "string", "required": false, "description": "Name of the user.", "example": "Lok Priya", "enum": [] }, { "name": "attendances[].employeeId", "type": "string", "required": false, "description": "Id of the employee", "example": "ce003232", "enum": [] }, { "name": "attendances[].branchName", "type": "string", "required": false, "description": "Employees Branch Name", "example": "Bangalore", "enum": [] }, { "name": "attendances[].branchCode", "type": "string", "required": false, "description": "Employee's Branch Code", "example": 232, "enum": [] }, { "name": "attendances[].userId", "type": "string", "required": false, "description": "Employee's Branch Code", "example": 232, "enum": [] }, { "name": "attendances[].workStartTime", "type": "integer", "required": false, "description": "Time at which work is being started in Epoch Time.", "example": "1700000000000", "enum": [] }, { "name": "attendances[].workEndTime", "type": "integer", "required": false, "description": "Time at which work is being started in Epoch Time.", "example": "1700000000000", "enum": [] }, { "name": "attendances[].workEndRemark", "type": "string", "required": false, "description": "Remarks entered by the user while concluding the work.", "example": "Completed todays work.", "enum": [] }, { "name": "attendances[].workStartRemark", "type": "string", "required": false, "description": "emarks entered by the user while starting the work.", "example": "Starting my work from client location.", "enum": [] }, { "name": "attendances[].workEndAddress", "type": "string", "required": false, "description": "Location at which work is being concluded", "example": "237,okhla phase3, New delhi -110020", "enum": [] }, { "name": "attendances[].workStartAddress", "type": "string", "required": false, "description": "Location at which work is being concluded", "example": "237,okhla phase3, New delhi -110020", "enum": [] }, { "name": "attendances[].workEndLatitude", "type": "number", "required": false, "description": "Latitude value of Work end location", "example": "28.612964", "enum": [] }, { "name": "attendances[].workEndLongitude", "type": "number", "required": false, "description": "Longitude value of Work end location", "example": "77.229463", "enum": [] }, { "name": "attendances[].workStartLatitude", "type": "number", "required": false, "description": "Longitude value of Work Start location", "example": "28.612964", "enum": [] }, { "name": "attendances[].workStartLongitude", "type": "number", "required": false, "description": "Longitude value of Work Start location", "example": "77.229463", "enum": [] }, { "name": "attendances[].workEndOdometer", "type": "number", "required": false, "description": "work end Odometer reading.", "example": 20, "enum": [] }, { "name": "attendances[].workStartOdometer", "type": "number", "required": false, "description": "Work start Odometer reading.", "example": 10, "enum": [] }, { "name": "attendances[].costFactor", "type": "number", "required": false, "description": "Per km traveled cost. It will be multiplied against distance traveled by the user.", "example": 3.5, "enum": [] }, { "name": "attendances[].distance", "type": "number", "required": false, "description": "Total travel distance between work start to work end activity. It is calculated based on the location details collected from app", "example": 26.07931, "enum": [] } ], "example": { "attendances": [ { "name": "Lok Priya", "employeeId": "ce003232", "branchName": "Bangalore", "branchCode": 232, "userId": 232, "workStartTime": 1573064999, "workEndTime": 1573018435, "workEndRemark": "Completed todays work." } ] } }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "The user type is Field user. Only manager and admin user type user has the access to this API.", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "userId not belong to your account", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/reports/attendances?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/reports/attendances?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/reports/attendances?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/reports/attendances?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/reports/attendances?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 32, "generationGroup": "workmate-get-reports-attendances-1f97a6a469", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get form based check in/out details - Identity: `api-operation:workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details - State model: stateful ```json { "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/reports/forms/{formId}", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/reports/forms/AD329238910921?startTime=1700000000000&endTime=1700000000000", "operationId": "getCustomFormsData", "summary": "To get form based check in/out details", "description": "Get the complete detail about the check in/check-out activity against the particular form. Get the form Id from the custom form API.", "tags": [ "Reports" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "formId", "in": "path", "required": true, "type": "string", "description": "Unique ID of the Form. It can be fetched from company setting forms API.", "example": "AD329238910921", "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "integer", "description": "Start time of the report. At a time maximum of 31 days can data can be fetched together. Time in epoch time.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "integer", "description": "Start time of the report. At a time maximum of 31 days can data can be fetched together. Time in epoch time.", "example": "1700000000000", "enum": [] }, { "name": "userId", "in": "query", "required": false, "type": "number", "description": "Unique ID of the user.", "example": 32323, "enum": [] }, { "name": "clientId", "in": "query", "required": false, "type": "number", "description": "Unique ID of the client.", "example": "YOUR_CLIENT_ID", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "formsData", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "formsData[].employeeName", "type": "string", "required": false, "description": "Name of the Employee", "example": "kalaivanan Sundaram", "enum": [] }, { "name": "formsData[].employeeId", "type": "string", "required": false, "description": "Id of the employee", "example": "ce12345", "enum": [] }, { "name": "formsData[].branchName", "type": "string", "required": false, "description": "Name of the branch", "example": "okhla", "enum": [] }, { "name": "formsData[].branchCode", "type": "string", "required": false, "description": "Code number of the branch", "example": 3232, "enum": [] }, { "name": "formsData[].userId", "type": "number", "required": false, "description": "Unique id of the workmate user.", "example": 3232, "enum": [] }, { "name": "formsData[].clientName", "type": "string", "required": false, "description": "Name of Checked in Client.", "example": "Mapmyindia", "enum": [] }, { "name": "formsData[].departmentName", "type": "string", "required": false, "description": "Name of the Checked in department", "example": "product", "enum": [] }, { "name": "formsData[].contactPersonName", "type": "string", "required": false, "description": "Either client or department contact person name", "example": "sundaram", "enum": [] }, { "name": "formsData[].checkinDateTime", "type": "string", "required": false, "description": "Date & Time at which user checked in against the client", "example": "1700000000000", "enum": [] }, { "name": "formsData[].checkinAddress", "type": "string", "required": false, "description": "checked in location address", "example": "1134, indira nagar, second stage, Bangalore -560008", "enum": [] }, { "name": "formsData[].checkoutDateTime", "type": "string", "required": false, "description": "Date & Time at which user checked out against the client", "example": "1700000000000", "enum": [] }, { "name": "formsData[].checkoutAddress", "type": "string", "required": false, "description": "checked out location address", "example": "1135, indira nagar, second stage, Bangalore -560008", "enum": [] }, { "name": "formsData[].totalHoursSpent", "type": "string", "required": false, "description": "Total time spent at the client location. The time differnece between check-in to check out.", "example": "00:03:00", "enum": [] }, { "name": "formsData[].remarks", "type": "string", "required": false, "description": "Comments entered by the user during the check-out process.", "example": "collected the parcel.", "enum": [] }, { "name": "formsData[].tags", "type": "string", "required": false, "description": "List of selected tags during check in. It indicates the check in purpose.", "example": "Meeting", "enum": [] }, { "name": "formsData[].customFormData", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "formsData[].customFormData[].label", "type": "string", "required": false, "description": "Name of the question or title.", "example": "Enter the cash collection details.", "enum": [] }, { "name": "formsData[].customFormData[].value", "type": "string", "required": false, "description": "Response to the question (lable)", "example": "Rs. 250 is being collected.", "enum": [] }, { "name": "formsData[].clientEmailId", "type": "string", "required": false, "description": "Contact person email id of the checked in client or the department", "example": "sundaram@gmail.com", "enum": [] }, { "name": "formsData[].clientMobileNo", "type": "string", "required": false, "description": "Contact person mobile number of the checked in client or department", "example": 934838232, "enum": [] } ], "example": { "formsData": [ { "employeeName": "kalaivanan Sundaram", "employeeId": "ce12345", "branchName": "okhla", "branchCode": 3232, "userId": 3232, "clientName": "Mapmyindia", "departmentName": "product", "contactPersonName": "sundaram" } ] } }, { "status": "204", "description": "Content Not available for the selected period.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "userId not belong to your account", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/reports/forms/AD329238910921?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/reports/forms/AD329238910921?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/reports/forms/AD329238910921?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/reports/forms/AD329238910921?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/reports/forms/AD329238910921?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 36, "generationGroup": "workmate-get-reports-forms-formid-b82d2c7882", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · Get users movement details - Identity: `api-operation:workmate-get-reports-movements-userid-get-users-movement-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-reports-movements-userid-get-users-movement-details - State model: stateful ```json { "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/reports/movements/{userId}", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/reports/movements/32323?startTime=1700000000000&endTime=1700000000000", "operationId": "getMovementData", "summary": "Get users movement details", "description": "Get individual users location data which includes address, time, speed, phones's battery level.", "tags": [ "Reports" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "userId", "in": "path", "required": true, "type": "number", "description": "Unique ID of the user.", "example": 32323, "enum": [] }, { "name": "startTime", "in": "query", "required": true, "type": "integer", "description": "Start time of the report. At a time maximum of 31 days can data can be fetched together. Time in epoch time.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": true, "type": "integer", "description": "Start time of the report. At a time maximum of 31 days can data can be fetched together. Time in epoch time.", "example": "1700000000000", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "movements", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "movements[].address", "type": "string", "required": false, "description": "Users location address for the given time.", "example": "40/2, Kalasipalyam, Bengaluru, Karnataka. 18 m from MP Auto Consultancy pin- 560002 (India)", "enum": [] }, { "name": "movements[].distance", "type": "string", "required": false, "description": "Total traveled distance from start time to this location for the selected period. It is in a kilometer.", "example": "10. 00", "enum": [] }, { "name": "movements[].driftStatus", "type": "integer", "required": false, "description": "Based on the GPS drift this location data is accepted or rejected will be stated. 1 - accepted, 0 - rejected.", "example": 1, "enum": [] }, { "name": "movements[].heading", "type": "integer", "required": false, "description": "GPS angle. It gives the direction of the user.", "example": 234, "enum": [] }, { "name": "movements[].lat", "type": "number", "required": false, "description": "Latitude value of location", "example": "28.612964", "enum": [] }, { "name": "movements[].long", "type": "number", "required": false, "description": "longitude value of the location.", "example": 77.843835, "enum": [] }, { "name": "movements[].speed", "type": "integer", "required": false, "description": "Speed of user at that time. It is a GPS speed.It is in Km/hr", "example": 234, "enum": [] }, { "name": "movements[].movementStatus", "type": "string", "required": false, "description": "Stopped or moving status will be there for the user.", "example": "stopped", "enum": [] }, { "name": "movements[].gpsTime", "type": "integer", "required": false, "description": "GPS time in epochtime stamp. It is the time at which location is being collected from the mobile phone.", "example": "1700000000000", "enum": [] }, { "name": "movements[].insertTime", "type": "integer", "required": false, "description": "Time at which location packet is being received at the server end. It is normally called as GPRS time. it is in EPOCH time format.", "example": "1700000000000", "enum": [] }, { "name": "movements[].internalBatteryLevel", "type": "integer", "required": false, "description": "Phones battery percentage.", "example": 24, "enum": [] } ], "example": { "movements": [ { "address": "40/2, Kalasipalyam, Bengaluru, Karnataka. 18 m from MP Auto Consultancy pin- 560002 (India)", "distance": "10. 00", "driftStatus": 1, "heading": 234, "lat": 28.550607, "long": 77.843835, "speed": 234, "movementStatus": "stopped" } ] } }, { "status": "204", "description": "Content Not available for the selected period.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "The user type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "userId not belong to your account", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/reports/movements/32323?startTime=1700000000000&endTime=1700000000000' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/reports/movements/32323?startTime=1700000000000&endTime=1700000000000\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/reports/movements/32323?startTime=1700000000000&endTime=1700000000000\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/reports/movements/32323?startTime=1700000000000&endTime=1700000000000\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/reports/movements/32323?startTime=1700000000000&endTime=1700000000000\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 25, "generationGroup": "workmate-get-reports-movements-userid-a9df3fbbf2", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get the task list details. - Identity: `api-operation:workmate-get-tasklists-to-get-the-task-list-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-tasklists-to-get-the-task-list-details - State model: stateful ```json { "slug": "workmate-get-tasklists-to-get-the-task-list-details", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/taskLists", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/taskLists", "operationId": "getTaskList", "summary": "To get the task list details.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "tags": [ "Task Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "Header for this API. Available values are v1.0.0, Default value is v1.0.0", "example": "v1.0.0", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "taskLists", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "taskLists[].id", "type": "string", "required": false, "description": "Unique Id of the task", "example": 32, "enum": [] }, { "name": "taskLists[].name", "type": "string", "required": false, "description": "Name of the task", "example": "Document Collection from client", "enum": [] }, { "name": "taskLists[].description", "type": "string", "required": false, "description": "Detailed description of task.", "example": "Collect documents like PAN Card, Passport and the application form.", "enum": [] }, { "name": "taskLists[].taskListId", "type": "string", "required": false, "description": "Unique Id number of the task list. It can be used while creating the Task", "example": 23, "enum": [] } ], "example": { "taskLists": [ { "id": 32, "name": "Document Collection from client", "description": "Collect documents like PAN Card, Passport and the application form.", "taskListId": 23 } ] } }, { "status": "204", "description": "Content Not available.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/taskLists' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/taskLists\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/taskLists\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/taskLists\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/taskLists\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 14, "generationGroup": "workmate-get-tasklists-28035b4d18", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get the list of tasks and their details - Identity: `api-operation:workmate-get-tasks-to-get-the-list-of-tasks-and-their-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details - State model: stateful ```json { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/tasks", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/tasks", "operationId": "getTask", "summary": "To get the list of tasks and their details", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "tags": [ "Task Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "Header for this API. Available values are v1.0.0, Default value is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "startTime", "in": "query", "required": false, "type": "number", "description": "Enter the start time for the select period. It is in Epoch Time.", "example": "1700000000000", "enum": [] }, { "name": "endTime", "in": "query", "required": false, "type": "number", "description": "Enter the end time for the select period. It is in EPOCH Time.", "example": "1700000000000", "enum": [] }, { "name": "ownerId", "in": "query", "required": false, "type": "number", "description": "Unqiue Id of the the user who has created this task.", "example": "1", "enum": [] }, { "name": "assigneeId", "in": "query", "required": false, "type": "number", "description": "Unique Id of the user who performs this task.", "example": "1", "enum": [] }, { "name": "clientDetails", "in": "query", "required": false, "type": "boolean", "description": "To get client location details for the task.", "example": "true", "enum": [] }, { "name": "activityDetails", "in": "query", "required": false, "type": "boolean", "description": "To get Activity details against the task.", "example": "true", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "tasks", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].id", "type": "string", "required": false, "description": "Unique Id of the task", "example": 32, "enum": [] }, { "name": "tasks[].name", "type": "string", "required": false, "description": "Name of the task", "example": "Document Collection from client", "enum": [] }, { "name": "tasks[].description", "type": "string", "required": false, "description": "Detailed description of task.", "example": "Collect documents like PAN Card, Passport and the application form.", "enum": [] }, { "name": "tasks[].priority", "type": "number", "required": false, "description": "Task priority . 0 - None, 1- Low, 2 - Medium, 3 - High.", "example": 1, "enum": [] }, { "name": "tasks[].taskListId", "type": "string", "required": false, "description": "Unique Id number of the task list", "example": 23, "enum": [] }, { "name": "tasks[].taskListName", "type": "string", "required": false, "description": "Name of the Task list", "example": 323, "enum": [] }, { "name": "tasks[].ownerId", "type": "number", "required": false, "description": "Unique user Id of the Task owner. The user who created this task", "example": 23, "enum": [] }, { "name": "tasks[].status", "type": "string", "required": false, "description": "Indicates the current status of the task like 1- unassigned, 2- assigned, 3- read, 4- work in progress, 5- overdue, 6- completed, 7- completed early, 8- completed later, 9- manually closed.", "example": 2, "enum": [] }, { "name": "tasks[].creationDate", "type": "number", "required": false, "description": "Date in which the task is created. It is in EPOCH time.", "example": 1472668079, "enum": [] }, { "name": "tasks[].dueDate", "type": "number", "required": false, "description": "Due date of the task. Task should be completed on or before this date. It is in EPOCH time.", "example": 1472667900, "enum": [] }, { "name": "tasks[].assigneeId", "type": "number", "required": false, "description": "Unique id of the user who is going to perform this task.", "example": 148, "enum": [] }, { "name": "tasks[].clientId", "type": "number", "required": false, "description": "Unique Id of the client. The task should be perfomed at this locaton. It is a Task location.", "example": "YOUR_CLIENT_ID", "enum": [] }, { "name": "tasks[].updationDate", "type": "number", "required": false, "description": "Last activity time against this task.", "example": 1472742952, "enum": [] }, { "name": "tasks[].departmentId", "type": "number", "required": false, "description": "Unique ID of the Department where task need to be done.", "example": "1", "enum": [] }, { "name": "tasks[].checkinId", "type": "number", "required": false, "description": "Unique Id of the check in activity against this task", "example": 323, "enum": [] }, { "name": "tasks[].clientName", "type": "string", "required": false, "description": "Name of the client. The task should be performed at this client lcoation.", "example": "Cafe coffee day Indiranagar", "enum": [] }, { "name": "tasks[].departmentName", "type": "string", "required": false, "description": "Department Name of the client. The task should be perfomed at this client department lcoation.", "example": "Sales department", "enum": [] }, { "name": "tasks[].ownerName", "type": "string", "required": false, "description": "Name of the task owner.", "example": "sandeep kumar", "enum": [] }, { "name": "tasks[].asigneeName", "type": "string", "required": false, "description": "Name of the assinee. who is going to perform this task.", "example": "lok priya.", "enum": [] }, { "name": "tasks[].clientDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].clientDetails.lat", "type": "number", "required": false, "description": "Latitude value of the task location", "example": "28.612964", "enum": [] }, { "name": "tasks[].clientDetails.long", "type": "number", "required": false, "description": "Longitude value of the task location", "example": 77.392323, "enum": [] }, { "name": "tasks[].clientDetails.address", "type": "string", "required": false, "description": "Task location address", "example": "237, okhla phase 3, delhi -110020", "enum": [] }, { "name": "tasks[].clientDetails.personName", "type": "string", "required": false, "description": "Either client or department Contact person name", "example": "Dinesh", "enum": [] }, { "name": "tasks[].clientDetails.emailId", "type": "string", "required": false, "description": "Either client or department contact person email id.", "example": "workmate@mapmyindia.com", "enum": [] }, { "name": "tasks[].clientDetails.mobileNo", "type": "string", "required": false, "description": "Either client or department contact contact mobile number", "example": 9348332321, "enum": [] }, { "name": "tasks[].activityDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.lat", "type": "number", "required": false, "description": "Latitude value of the check in location", "example": "28.612964", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.long", "type": "number", "required": false, "description": "Longitude value of the check in location", "example": 77.32823, "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.address", "type": "string", "required": false, "description": "Check in location address", "example": "236, oklha phase 3 , new delhi - 110020", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.time", "type": "number", "required": false, "description": "Check in time, in Epoch Timestamp", "example": "1700000000000", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.lat", "type": "number", "required": false, "description": "Latitude value of the check in location", "example": "28.612964", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.long", "type": "number", "required": false, "description": "Longitude value of the check in location", "example": 77.32823, "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.address", "type": "string", "required": false, "description": "Check in location address", "example": "236, oklha phase 3 , new delhi - 110020", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.time", "type": "number", "required": false, "description": "Check in time, in Epoch Timestamp", "example": "1700000000000", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.comments", "type": "string", "required": false, "description": "check out comments", "example": "Task is completed", "enum": [] } ], "example": { "tasks": [ { "id": 32, "name": "Document Collection from client", "description": "Collect documents like PAN Card, Passport and the application form.", "priority": 1, "taskListId": 23, "taskListName": 323, "ownerId": 23, "status": 2 } ] } }, { "status": "204", "description": "Content Not available for the selected period.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "userId does not belong to your account", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/tasks' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/tasks\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/tasks\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/tasks\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/tasks\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 55, "generationGroup": "workmate-get-tasks-c1e4e3bb58", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To create new Task - Identity: `api-operation:workmate-post-tasks-to-create-new-task` - Canonical: https://developer.mappls.com/api-reference/workmate-post-tasks-to-create-new-task - State model: stateful ```json { "slug": "workmate-post-tasks-to-create-new-task", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "POST", "path": "/tasks", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/tasks", "operationId": "createTask", "summary": "To create new Task", "description": "Create Task API allows you to assign a new Task to your users. Using this API, You can Assign a new task with a task summary, description, assigned to user, task owner, the priority of the task, task location", "tags": [ "Task Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] } ], "request": { "required": false, "contentTypes": [ "application/json" ], "fields": [ { "name": "name", "type": "string", "required": true, "description": "Name of the Task or Task Summary", "example": "Collect the cash from customer", "enum": [] }, { "name": "description", "type": "string", "required": false, "description": "Deatailed description for the Task", "example": "Collect the cash and give the invoice and update the System", "enum": [] }, { "name": "ownerId", "type": "string", "required": false, "description": "The user who creates the task. Unique id of the user", "example": 2121, "enum": [] }, { "name": "assigneeId", "type": "number", "required": true, "description": "Id of the user to whom this task is assinged. Unique id of the user.", "example": 3232, "enum": [] }, { "name": "clientId", "type": "number", "required": true, "description": "Unique id of the client. This is the place user will perform the task.", "example": "YOUR_CLIENT_ID", "enum": [] }, { "name": "prioirity", "type": "number", "required": false, "description": "priority of the Task. 0 - None, 1 - Low, 2 - Medium, 3- High.", "example": 1, "enum": [] }, { "name": "taskListId", "type": "string", "required": false, "description": "Unique Id number of the task list.", "example": 23, "enum": [] } ], "example": { "name": "Collect the cash from customer", "assigneeId": 3232, "clientId": 3222 } }, "responses": [ { "status": "201", "description": "Task Created", "fields": [ { "name": "id", "type": "number", "required": false, "description": "Unique Id of the Task.", "example": 12, "enum": [] } ], "example": { "id": 12 } }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request POST \\\n --url 'https://workmate.mapmyindia.com/apis/tasks' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"Collect the cash from customer\",\n \"assigneeId\": 3232,\n \"clientId\": 3222\n}'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/tasks\", {\n method: \"POST\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n \"name\": \"Collect the cash from customer\",\n \"assigneeId\": 3232,\n \"clientId\": 3222\n })\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\", \"Content-Type\": \"application/json\"}\nresponse = requests.request(\n \"POST\",\n \"https://workmate.mapmyindia.com/apis/tasks\",\n headers=headers,\n json={\n \"name\": \"Collect the cash from customer\",\n \"assigneeId\": 3232,\n \"clientId\": 3222\n },\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/tasks\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .header(\"Content-Type\", \"application/json\")\n .method(\"POST\", HttpRequest.BodyPublishers.ofString(\"\"\"\n{\n \"name\": \"Collect the cash from customer\",\n \"assigneeId\": 3232,\n \"clientId\": 3222\n}\n\"\"\"))\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Post, \"https://workmate.mapmyindia.com/apis/tasks\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nrequest.Content = new StringContent(\"\"\"\n{\n \"name\": \"Collect the cash from customer\",\n \"assigneeId\": 3232,\n \"clientId\": 3222\n}\n\"\"\", Encoding.UTF8, \"application/json\");\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "command", "evidenceScore": 16, "generationGroup": "workmate-post-tasks-4438d8708d", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get the task details for the given task id. - Identity: `api-operation:workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id` - Canonical: https://developer.mappls.com/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id - State model: stateful ```json { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/tasks/{taskId}", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/tasks/1", "operationId": "getTaskbyId", "summary": "To get the task details for the given task id.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "tags": [ "Task Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "Header for this API. Available values are v1.0.0, Default value is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "taskId", "in": "path", "required": true, "type": "number", "description": "Unique Id of the task.", "example": "1", "enum": [] }, { "name": "clientDetails", "in": "query", "required": false, "type": "boolean", "description": "To get client location details for the task.", "example": "true", "enum": [] }, { "name": "activityDetails", "in": "query", "required": false, "type": "boolean", "description": "To get Activity details against the task.", "example": "true", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "default response", "fields": [ { "name": "tasks", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].id", "type": "string", "required": false, "description": "Unique Id of the task", "example": 32, "enum": [] }, { "name": "tasks[].name", "type": "string", "required": false, "description": "Name of the task", "example": "Document Collection from client", "enum": [] }, { "name": "tasks[].description", "type": "string", "required": false, "description": "Detailed description of task.", "example": "Collect documents like PAN Card, Passport and the application form.", "enum": [] }, { "name": "tasks[].priority", "type": "number", "required": false, "description": "Task priority . 0 - None, 1- Low, 2 - Medium, 3 - High.", "example": 1, "enum": [] }, { "name": "tasks[].taskListId", "type": "string", "required": false, "description": "Unique Id number of the task list", "example": 23, "enum": [] }, { "name": "tasks[].taskListName", "type": "string", "required": false, "description": "Name of the Task list", "example": 323, "enum": [] }, { "name": "tasks[].ownerId", "type": "number", "required": false, "description": "Unique user Id of the Task owner. The user who created this task", "example": 23, "enum": [] }, { "name": "tasks[].status", "type": "string", "required": false, "description": "Indicates the current status of the task like 1- unassigned, 2- assigned, 3- read, 4- work in progress, 5- overdue, 6- completed, 7- completed early, 8- completed later, 9- manually closed.", "example": 2, "enum": [] }, { "name": "tasks[].creationDate", "type": "number", "required": false, "description": "Date in which the task is created. It is in EPOCH time.", "example": 1472668079, "enum": [] }, { "name": "tasks[].dueDate", "type": "number", "required": false, "description": "Due date of the task. Task should be completed on or before this date. It is in EPOCH time.", "example": 1472667900, "enum": [] }, { "name": "tasks[].assigneeId", "type": "number", "required": false, "description": "Unique id of the user who is going to perform this task.", "example": 148, "enum": [] }, { "name": "tasks[].clientId", "type": "number", "required": false, "description": "Unique Id of the client. The task should be perfomed at this locaton. It is a Task location.", "example": "YOUR_CLIENT_ID", "enum": [] }, { "name": "tasks[].updationDate", "type": "number", "required": false, "description": "Last activity time against this task.", "example": 1472742952, "enum": [] }, { "name": "tasks[].departmentId", "type": "number", "required": false, "description": "Unique ID of the Department where task need to be done.", "example": "1", "enum": [] }, { "name": "tasks[].checkinId", "type": "number", "required": false, "description": "Unique Id of the check in activity against this task", "example": 323, "enum": [] }, { "name": "tasks[].clientName", "type": "string", "required": false, "description": "Name of the client. The task should be performed at this client lcoation.", "example": "Cafe coffee day Indiranagar", "enum": [] }, { "name": "tasks[].departmentName", "type": "string", "required": false, "description": "Department Name of the client. The task should be perfomed at this client department lcoation.", "example": "Sales department", "enum": [] }, { "name": "tasks[].ownerName", "type": "string", "required": false, "description": "Name of the task owner.", "example": "sandeep kumar", "enum": [] }, { "name": "tasks[].asigneeName", "type": "string", "required": false, "description": "Name of the assinee. who is going to perform this task.", "example": "lok priya.", "enum": [] }, { "name": "tasks[].clientDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].clientDetails.lat", "type": "number", "required": false, "description": "Latitude value of the task location", "example": "28.612964", "enum": [] }, { "name": "tasks[].clientDetails.long", "type": "number", "required": false, "description": "Longitude value of the task location", "example": 77.392323, "enum": [] }, { "name": "tasks[].clientDetails.address", "type": "string", "required": false, "description": "Task location address", "example": "237, okhla phase 3, delhi -110020", "enum": [] }, { "name": "tasks[].clientDetails.personName", "type": "string", "required": false, "description": "Either client or department Contact person name", "example": "Dinesh", "enum": [] }, { "name": "tasks[].clientDetails.emailId", "type": "string", "required": false, "description": "Either client or department contact person email id.", "example": "workmate@mapmyindia.com", "enum": [] }, { "name": "tasks[].clientDetails.mobileNo", "type": "string", "required": false, "description": "Either client or department contact contact mobile number", "example": 9348332321, "enum": [] }, { "name": "tasks[].activityDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.lat", "type": "number", "required": false, "description": "Latitude value of the check in location", "example": "28.612964", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.long", "type": "number", "required": false, "description": "Longitude value of the check in location", "example": 77.32823, "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.address", "type": "string", "required": false, "description": "Check in location address", "example": "236, oklha phase 3 , new delhi - 110020", "enum": [] }, { "name": "tasks[].activityDetails.checkInDetails.time", "type": "number", "required": false, "description": "Check in time, in Epoch Timestamp", "example": "1700000000000", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.lat", "type": "number", "required": false, "description": "Latitude value of the check in location", "example": "28.612964", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.long", "type": "number", "required": false, "description": "Longitude value of the check in location", "example": 77.32823, "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.address", "type": "string", "required": false, "description": "Check in location address", "example": "236, oklha phase 3 , new delhi - 110020", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.time", "type": "number", "required": false, "description": "Check in time, in Epoch Timestamp", "example": "1700000000000", "enum": [] }, { "name": "tasks[].activityDetails.checkOutDetails.comments", "type": "string", "required": false, "description": "check out comments", "example": "Task is completed", "enum": [] } ], "example": { "tasks": [ { "id": 32, "name": "Document Collection from client", "description": "Collect documents like PAN Card, Passport and the application form.", "priority": 1, "taskListId": 23, "taskListName": 323, "ownerId": 23, "status": 2 } ] } }, { "status": "204", "description": "Content Not available for the selected Task Id.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/tasks/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/tasks/1\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/tasks/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/tasks/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/tasks/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 51, "generationGroup": "workmate-get-tasks-taskid-dffa1e0229", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To update the task description & status. - Identity: `api-operation:workmate-put-tasks-taskid-to-update-the-task-description-status` - Canonical: https://developer.mappls.com/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status - State model: stateful ```json { "slug": "workmate-put-tasks-taskid-to-update-the-task-description-status", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "PUT", "path": "/tasks/{taskId}", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/tasks/1", "operationId": "updateTask", "summary": "To update the task description & status.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "tags": [ "Task Management" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "Header for this API. Available values are v1.0.0, Default value is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "taskId", "in": "path", "required": true, "type": "number", "description": "Unique Id of the task.", "example": "1", "enum": [] }, { "name": "status", "in": "query", "required": false, "type": "number", "description": "To close the task manually send the value as 9.", "example": "1", "enum": [] }, { "name": "description", "in": "query", "required": false, "type": "string", "description": "Task description", "example": "example", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "Task updated successfully", "fields": [], "example": null }, { "status": "204", "description": "Invalid Task Id.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "Criteria is not met. Not able to update the status beacuse of current status.", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request PUT \\\n --url 'https://workmate.mapmyindia.com/apis/tasks/1' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/tasks/1\", {\n method: \"PUT\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"PUT\",\n \"https://workmate.mapmyindia.com/apis/tasks/1\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/tasks/1\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"PUT\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Put, \"https://workmate.mapmyindia.com/apis/tasks/1\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "transition", "evidenceScore": 13, "generationGroup": "workmate-put-tasks-taskid-085976cb20", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-operation · To get all the user details which belongs to your organization. - Identity: `api-operation:workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization` - Canonical: https://developer.mappls.com/api-reference/workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization - State model: stateful ```json { "slug": "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "family": "workmate", "familyName": "Workmate Workforce", "product": "Workmate", "stateModel": "stateful", "contractStatus": "legacy-source", "sourceId": "local-contenthub-dochub-mapmyindia-workmate-apis", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/User-Details.json", "sourceFingerprint": "46675d4ad523c600efb696a87e7aca9de0e5f629ab8906a31e40fd5d3dfdae3e", "specVersion": "3.0.1", "apiVersion": "1.0.0", "sourceGeneration": "v1-0-0", "method": "GET", "path": "/users", "baseUrl": "https://workmate.mapmyindia.com/apis/", "requestUrl": "https://workmate.mapmyindia.com/apis/users", "operationId": "getUsers", "summary": "To get all the user details which belongs to your organization.", "description": "Gives all the users details of your organization. Using this API, you will be able to identify the workmate user id, workplace location, employee Id and other important details related to a user profile. You can only get the list of users who belongs to your organization.", "tags": [ "User Details" ], "deprecated": false, "auth": { "mode": "oauth2-bearer", "schemes": [] }, "parameters": [ { "name": "apiVersion", "in": "header", "required": true, "type": "string", "description": "API version should be mentioned in the header along with bearer Token. Available version is v1.0.0, Default version is v1.0.0", "example": "v1.0.0", "enum": [] }, { "name": "workPlace", "in": "query", "required": false, "type": "boolean", "description": "Send true if you want to get the work place location details", "example": "true", "enum": [] }, { "name": "userId", "in": "query", "required": false, "type": "number", "description": "send the user Ids in comma separated format to get the list of selected user details. If it is not passed all the user details will be fetched.", "example": "3223,23", "enum": [] } ], "request": { "required": false, "contentTypes": [], "fields": [], "example": null }, "responses": [ { "status": "200", "description": "API call is succesful", "fields": [ { "name": "users", "type": "array", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "users[].id", "type": "integer", "required": false, "description": "Unqiue workmate Id of the user", "example": 232, "enum": [] }, { "name": "users[].emailId", "type": "string", "required": false, "description": "Unique email Id of the user. This will be used to login to workmate account.", "example": "vtsupport@mapmyindia.com", "enum": [] }, { "name": "users[].originId", "type": "integer", "required": false, "description": "Users workmate account id", "example": 32, "enum": [] }, { "name": "users[].name", "type": "string", "required": false, "description": "Name of the user.", "example": "kalaivanan", "enum": [] }, { "name": "users[].status", "type": "string", "required": false, "description": "It gives users active or inactive status . 1 - Active user, 0- Inactive user.", "example": 1, "enum": [] }, { "name": "users[].type", "type": "integer", "required": false, "description": "Three user type is there in workmate. 0 -admin, 1 -manager, 2 - field user", "example": 0, "enum": [] }, { "name": "users[].creationTime", "type": "integer", "required": false, "description": "Time at which user is being created over workmate. It is an Local EPCH time.", "example": "1700000000000", "enum": [] }, { "name": "users[].workplaceId", "type": "integer", "required": false, "description": "Unique Id of the Work place.", "example": "MMI000", "enum": [] }, { "name": "users[].costFactor", "type": "number", "required": false, "description": "per km travelled cost. It will be multiplyed against distance travelled by the user.", "example": 3.4, "enum": [] }, { "name": "users[].reportingToName", "type": "string", "required": false, "description": "Direct manager of the user.", "example": "Sanjay", "enum": [] }, { "name": "users[].reportingToId", "type": "string", "required": false, "description": "Manger's unique user Id", "example": 2323, "enum": [] }, { "name": "users[].employeeId", "type": "string", "required": false, "description": "Employee unquie ID based on the company record", "example": "CE003121", "enum": [] }, { "name": "users[].branchName", "type": "string", "required": false, "description": "Users branch name of the work place.", "example": "Bangalore", "enum": [] }, { "name": "users[].branchCode", "type": "string", "required": false, "description": "Users branch code of the work place.", "example": "CE12", "enum": [] }, { "name": "users[].workPlace", "type": "object", "required": false, "description": "", "example": "example", "enum": [] }, { "name": "users[].workPlace.lat", "type": "number", "required": false, "description": "Workmate place location latitude", "example": "28.612964", "enum": [] }, { "name": "users[].workPlace.long", "type": "number", "required": false, "description": "Workmate place location longitude.", "example": 78.3223, "enum": [] }, { "name": "users[].workPlace.name", "type": "string", "required": false, "description": "Work location name", "example": "Bangalore office", "enum": [] }, { "name": "users[].workPlace.address", "type": "string", "required": false, "description": "work place address", "example": "1134, Dr SK Karim Khan Road, HAL Stage 2, Indiranagar, Bengaluru, Karnataka. 0 m from MapmyIndia Bangalore pin-560008 (India)", "enum": [] } ], "example": { "users": [ { "id": 232, "emailId": "vtsupport@mapmyindia.com", "originId": 32, "name": "kalaivanan", "status": 1, "type": 0, "creationTime": 1458987749, "workplaceId": 32 } ] } }, { "status": "204", "description": "content not found. Check your input values.", "fields": [], "example": null }, { "status": "400", "description": "Bad Request - Invalid ID supplied or invalid data type.", "fields": [ { "name": "status", "type": "string", "required": false, "description": "Status Code Name", "example": 400, "enum": [] }, { "name": "message", "type": "string", "required": false, "description": "Describes the type of error based on the type of response code.", "example": "Missing parameter name.", "enum": [] } ], "example": { "status": 400, "message": "Missing parameter name." } }, { "status": "401", "description": "Unauthorized Request. Access to API is forbidden.", "fields": [], "example": null }, { "status": "403", "description": "User type is Field user. Only manager and admin type user have the access to this API", "fields": [], "example": null }, { "status": "404", "description": "Not Found - URL Not Found", "fields": [], "example": null }, { "status": "406", "description": "userId not belong to your account", "fields": [], "example": null } ], "samples": [ { "language": "bash", "label": "cURL", "code": "curl --request GET \\\n --url 'https://workmate.mapmyindia.com/apis/users' \\\n --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'" }, { "language": "javascript", "label": "JavaScript", "code": "const response = await fetch(\"https://workmate.mapmyindia.com/apis/users\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${process.env.MAPPLS_ACCESS_TOKEN}` }\n});\n\nif (!response.ok) throw new Error(`Mappls request failed: ${response.status}`);\nconst result = await response.json();" }, { "language": "python", "label": "Python", "code": "import os\nimport requests\n\nheaders = {\"Authorization\": f\"Bearer {os.environ['MAPPLS_ACCESS_TOKEN']}\"}\nresponse = requests.request(\n \"GET\",\n \"https://workmate.mapmyindia.com/apis/users\",\n headers=headers,\n timeout=15,\n)\nresponse.raise_for_status()\nresult = response.json()" }, { "language": "java", "label": "Java", "code": "var requestBuilder = HttpRequest.newBuilder()\n .uri(URI.create(\"https://workmate.mapmyindia.com/apis/users\"))\n .timeout(Duration.ofSeconds(15))\n .header(\"Authorization\", \"Bearer \" + System.getenv(\"MAPPLS_ACCESS_TOKEN\"))\n .method(\"GET\", HttpRequest.BodyPublishers.noBody())\n .build();\n\nvar response = HttpClient.newHttpClient()\n .send(requestBuilder, HttpResponse.BodyHandlers.ofString());" }, { "language": "csharp", "label": "C#", "code": "using var request = new HttpRequestMessage(HttpMethod.Get, \"https://workmate.mapmyindia.com/apis/users\");\nrequest.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", Environment.GetEnvironmentVariable(\"MAPPLS_ACCESS_TOKEN\"));\nusing var response = await httpClient.SendAsync(request);\nresponse.EnsureSuccessStatusCode();" } ], "journeyRole": "observe", "evidenceScore": 32, "generationGroup": "workmate-get-users-ecf2e35177", "generationCount": 1, "preferredGeneration": "v1-0-0", "isPreferredGeneration": true, "alternativeSlugs": [] } ``` ## api-generation · GET /alarm - Identity: `api-generation:intouch-get-alarm-10c842d182` - Canonical: https://developer.mappls.com/api-generations/intouch-get-alarm-10c842d182 ```json { "slug": "intouch-get-alarm-10c842d182", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "GET", "path": "/alarm", "title": "GET /alarm", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "summary": "This API will get all the alarm configurations for a user.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "query:alarmType", "query:deviceId", "query:id" ], "requiredParameterKeys": [], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].alarmType", "200:data[].creationTime", "200:data[].deviceId", "200:data[].duration", "200:data[].geofenceId", "200:data[].id", "200:data[].limit", "200:data[].severity", "200:data[].type", "200:data[].updationTime", "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "summary": "This API will get all the alarm configurations for a user.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "query:alarmType", "query:deviceId", "query:id" ], "requiredParameterKeys": [], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].alarmType", "200:data[].creationTime", "200:data[].deviceId", "200:data[].duration", "200:data[].geofenceId", "200:data[].id", "200:data[].limit", "200:data[].severity", "200:data[].type", "200:data[].updationTime", "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · POST /alarm - Identity: `api-generation:intouch-post-alarm-8579e8cb93` - Canonical: https://developer.mappls.com/api-generations/intouch-post-alarm-8579e8cb93 ```json { "slug": "intouch-post-alarm-8579e8cb93", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "POST", "path": "/alarm", "title": "POST /alarm", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-post-alarm-this-api-will-create-an-alarm", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "summary": "This API will create an alarm.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [], "requiredParameterKeys": [], "requestFields": [ "alarmType", "deviceId", "duration", "geofenceId", "limit", "severity", "type" ], "requiredRequestFields": [], "responseStatuses": [ "201", "203", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-post-alarm-this-api-will-create-an-alarm", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm", "summary": "This API will create an alarm.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [], "requiredParameterKeys": [], "requestFields": [ "alarmType", "deviceId", "duration", "geofenceId", "limit", "severity", "type" ], "requiredRequestFields": [], "responseStatuses": [ "201", "203", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-post-alarm-this-api-will-create-an-alarm", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · DELETE /alarm/{id} - Identity: `api-generation:intouch-delete-alarm-id-ca6df54f47` - Canonical: https://developer.mappls.com/api-generations/intouch-delete-alarm-id-ca6df54f47 ```json { "slug": "intouch-delete-alarm-id-ca6df54f47", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "DELETE", "path": "/alarm/{id}", "title": "DELETE /alarm/{id}", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-delete-alarm-id-deletes-an-alarm-config", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "summary": "Deletes An Alarm Config", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "204", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-delete-alarm-id-deletes-an-alarm-config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config", "summary": "Deletes An Alarm Config", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "204", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-delete-alarm-id-deletes-an-alarm-config", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · POST /alarm/{id} - Identity: `api-generation:intouch-post-alarm-id-352bd7eab8` - Canonical: https://developer.mappls.com/api-generations/intouch-post-alarm-id-352bd7eab8 ```json { "slug": "intouch-post-alarm-id-352bd7eab8", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "POST", "path": "/alarm/{id}", "title": "POST /alarm/{id}", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-post-alarm-id-updates-an-alarm-config", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "summary": "Updates An Alarm Config", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [ "deviceId", "duration", "geofenceId", "limit", "severity", "type" ], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "403", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-post-alarm-id-updates-an-alarm-config", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config", "summary": "Updates An Alarm Config", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [ "deviceId", "duration", "geofenceId", "limit", "severity", "type" ], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "403", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-post-alarm-id-updates-an-alarm-config", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /alarm/alarmLog/ - Identity: `api-generation:intouch-get-alarm-alarmlog-0de27f90fb` - Canonical: https://developer.mappls.com/api-generations/intouch-get-alarm-alarmlog-0de27f90fb ```json { "slug": "intouch-get-alarm-alarmlog-0de27f90fb", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "GET", "path": "/alarm/alarmLog/", "title": "GET /alarm/alarmLog/", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "summary": "Gets The List Of Alarm Config(s)", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "query:alarmType", "query:deviceId", "query:endTime", "query:startTime" ], "requiredParameterKeys": [ "query:endTime", "query:startTime" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].actualDuration", "200:data[].actualLimit", "200:data[].address", "200:data[].alarmType", "200:data[].data", "200:data[].deviceId", "200:data[].duration", "200:data[].geofenceId", "200:data[].latitude", "200:data[].limit", "200:data[].longitude", "200:data[].severity", "200:data[].timestamp", "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "summary": "Gets The List Of Alarm Config(s)", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "query:alarmType", "query:deviceId", "query:endTime", "query:startTime" ], "requiredParameterKeys": [ "query:endTime", "query:startTime" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].actualDuration", "200:data[].actualLimit", "200:data[].address", "200:data[].alarmType", "200:data[].data", "200:data[].deviceId", "200:data[].duration", "200:data[].geofenceId", "200:data[].latitude", "200:data[].limit", "200:data[].longitude", "200:data[].severity", "200:data[].timestamp", "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /geofence/ - Identity: `api-generation:intouch-get-geofence-0428994c0e` - Canonical: https://developer.mappls.com/api-generations/intouch-get-geofence-0428994c0e ```json { "slug": "intouch-get-geofence-0428994c0e", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "GET", "path": "/geofence/", "title": "GET /geofence/", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "summary": "Gets All The Configured Geofence(s)", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "query:ignoreGeometry" ], "requiredParameterKeys": [], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].buffer", "200:data[].creationTime", "200:data[].geometry", "200:data[].geometry.coordinates", "200:data[].geometry.type", "200:data[].id", "200:data[].name", "200:data[].type", "200:data[].updationTime", "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s", "summary": "Gets All The Configured Geofence(s)", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "query:ignoreGeometry" ], "requiredParameterKeys": [], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].buffer", "200:data[].creationTime", "200:data[].geometry", "200:data[].geometry.coordinates", "200:data[].geometry.type", "200:data[].id", "200:data[].name", "200:data[].type", "200:data[].updationTime", "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · POST /geofence/ - Identity: `api-generation:intouch-post-geofence-9930a2a5a4` - Canonical: https://developer.mappls.com/api-generations/intouch-post-geofence-9930a2a5a4 ```json { "slug": "intouch-post-geofence-9930a2a5a4", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "POST", "path": "/geofence/", "title": "POST /geofence/", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-post-geofence-create-a-new-geofence", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-post-geofence-create-a-new-geofence-v1-0-0", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence-v1-0-0", "summary": "Create A New Geofence", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [], "requiredParameterKeys": [], "requestFields": [ "buffer", "geometry", "name" ], "requiredRequestFields": [], "responseStatuses": [ "201", "203", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-post-geofence-create-a-new-geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence", "summary": "Create A New Geofence", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [], "requiredParameterKeys": [], "requestFields": [ "buffer", "geometry", "name" ], "requiredRequestFields": [], "responseStatuses": [ "201", "203", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-post-geofence-create-a-new-geofence-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-post-geofence-create-a-new-geofence", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · DELETE /geofence/{id} - Identity: `api-generation:intouch-delete-geofence-id-acd58f4735` - Canonical: https://developer.mappls.com/api-generations/intouch-delete-geofence-id-acd58f4735 ```json { "slug": "intouch-delete-geofence-id-acd58f4735", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "DELETE", "path": "/geofence/{id}", "title": "DELETE /geofence/{id}", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-delete-geofence-id-delete-a-geofence", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "summary": "Delete A Geofence.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-delete-geofence-id-delete-a-geofence", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence", "summary": "Delete A Geofence.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-delete-geofence-id-delete-a-geofence", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /geofence/{id} - Identity: `api-generation:intouch-get-geofence-id-9d8bafa2d5` - Canonical: https://developer.mappls.com/api-generations/intouch-get-geofence-id-9d8bafa2d5 ```json { "slug": "intouch-get-geofence-id-9d8bafa2d5", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "GET", "path": "/geofence/{id}", "title": "GET /geofence/{id}", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "summary": "Get A Single Or Multiple Geofence(s).", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id", "query:id", "query:ignoreGeometry" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].buffer", "200:data[].creationTime", "200:data[].geometry", "200:data[].geometry.coordinates", "200:data[].geometry.type", "200:data[].id", "200:data[].name", "200:data[].type", "200:data[].updationTime", "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "summary": "Get A Single Or Multiple Geofence(s).", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id", "query:id", "query:ignoreGeometry" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "203", "400", "401", "404" ], "responseFields": [ "200:data", "200:data[].buffer", "200:data[].creationTime", "200:data[].geometry", "200:data[].geometry.coordinates", "200:data[].geometry.type", "200:data[].id", "200:data[].name", "200:data[].type", "200:data[].updationTime", "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · POST /geofence/{id} - Identity: `api-generation:intouch-post-geofence-id-83a7719be5` - Canonical: https://developer.mappls.com/api-generations/intouch-post-geofence-id-83a7719be5 ```json { "slug": "intouch-post-geofence-id-83a7719be5", "family": "intouch", "familyName": "InTouch Telematics", "product": "InTouch", "stateModel": "stateful", "method": "POST", "path": "/geofence/{id}", "title": "POST /geofence/{id}", "preferredGeneration": "v2-0-0", "preferredSlug": "intouch-post-geofence-id-update-a-geofence", "variants": [ { "generation": "v1-0-0", "apiVersion": "1.0.0", "slug": "intouch-post-geofence-id-update-a-geofence-v1-0-0", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence-v1-0-0", "summary": "Update A Geofence.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [ "buffer", "geometry", "name" ], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": false }, { "generation": "v2-0-0", "apiVersion": "2.0.0", "slug": "intouch-post-geofence-id-update-a-geofence", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence", "summary": "Update A Geofence.", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "baseUrl": "https://intouch.mapmyindia.com/iot/api", "authMode": "bearer", "parameterKeys": [ "path:id" ], "requiredParameterKeys": [ "path:id" ], "requestFields": [ "buffer", "geometry", "name" ], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404" ], "responseFields": [ "400:error", "400:message", "400:status" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1-0-0", "fromSlug": "intouch-post-geofence-id-update-a-geofence-v1-0-0", "toGeneration": "v2-0-0", "toSlug": "intouch-post-geofence-id-update-a-geofence", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2-0-0; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /describeDataset - Identity: `api-generation:mgis-get-describedataset-855417da71` - Canonical: https://developer.mappls.com/api-generations/mgis-get-describedataset-855417da71 ```json { "slug": "mgis-get-describedataset-855417da71", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/describeDataset", "title": "GET /describeDataset", "preferredGeneration": "v2", "preferredSlug": "mgis-get-describedataset-fetches-the-attribute-names", "variants": [ { "generation": "v1", "apiVersion": "V1.0.0", "slug": "mgis-get-describedataset-fetches-the-attribute-names-v1", "href": "/api-reference/mgis-get-describedataset-fetches-the-attribute-names-v1", "summary": "fetches the attribute names.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/describe-dataset-api.yml", "sourceFingerprint": "c981431acc37f36caebfd2b0f9c66ad08ebedef3f93e0eba70375b935d27fadd", "baseUrl": "https://mgis-api.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:datasetNme" ], "requiredParameterKeys": [ "query:datasetNme" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "422", "500" ], "responseFields": [ "200:code", "200:propertyList", "200:propertyList[].ColumnName", "200:propertyList[].ColumnType", "400:auth", "400:code", "400:error", "400:message", "401:code", "401:error", "404:code", "404:error", "422:code", "422:error", "500:code", "500:error" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V2.0.0", "slug": "mgis-get-describedataset-fetches-the-attribute-names", "href": "/api-reference/mgis-get-describedataset-fetches-the-attribute-names", "summary": "fetches the attribute names.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/describe-dataset-api.yml", "sourceFingerprint": "ea4acadc9a13ed87bdc8f5b4a009cb6eebcc13efc93221a3103ac8f5ea70c9b6", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:dataStoreName", "query:datasetNme" ], "requiredParameterKeys": [ "query:datasetNme" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "500" ], "responseFields": [ "200:code", "200:data", "200:data.propertyList", "200:data.propertyList[].ColumnName", "200:data.propertyList[].ColumnType", "200:message", "200:success", "400:code", "400:message", "401:code", "401:message", "500:code", "500:message" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-describedataset-fetches-the-attribute-names-v1", "toGeneration": "v2", "toSlug": "mgis-get-describedataset-fetches-the-attribute-names", "addedParameters": [ "query:dataStoreName" ], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [ "404", "422" ], "addedResponseFields": [ "200:data", "200:data.propertyList", "200:data.propertyList[].ColumnName", "200:data.propertyList[].ColumnType", "200:message", "200:success", "401:message", "500:message" ], "removedResponseFields": [ "200:propertyList", "200:propertyList[].ColumnName", "200:propertyList[].ColumnType", "400:auth", "400:error", "401:error", "404:code", "404:error", "422:code", "422:error", "500:error" ], "authChanged": false, "baseUrlChanged": true, "breakingSignals": [ "Response status no longer declared: 404", "Response status no longer declared: 422", "Declared server URL changed" ], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /getGeometryType - Identity: `api-generation:mgis-get-getgeometrytype-97af5b353e` - Canonical: https://developer.mappls.com/api-generations/mgis-get-getgeometrytype-97af5b353e ```json { "slug": "mgis-get-getgeometrytype-97af5b353e", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/getGeometryType", "title": "GET /getGeometryType", "preferredGeneration": "v2", "preferredSlug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "variants": [ { "generation": "v1", "apiVersion": "V1.0.0", "slug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1", "href": "/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1", "summary": "Fetches Geometry type of datasetNme", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/get-geometry-type-api.yml", "sourceFingerprint": "baec95146c20c62ed13d99d44f62f336b8e09e2f2bd7bae23559048ffdbd4a3d", "baseUrl": "https://mgis-api.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:datasetNme" ], "requiredParameterKeys": [ "query:datasetNme" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "422", "500" ], "responseFields": [ "200:geometryType", "400:auth", "400:code", "400:error", "400:message", "401:code", "401:error", "404:code", "404:error", "422:code", "422:error", "500:code", "500:error" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V2.0.0", "slug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "href": "/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "summary": "Fetches Geometry type of datasetNme", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/get-geometry-type-api.yml", "sourceFingerprint": "4c85c54f75f91c3f3353aa5644b077a5c49aa91d6ed3a3d53cedf535fcfc7a54", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:datasetNme" ], "requiredParameterKeys": [ "query:datasetNme" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "200:code", "200:data", "200:message", "200:success", "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1", "toGeneration": "v2", "toSlug": "mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [ "422" ], "addedResponseFields": [ "200:code", "200:data", "200:message", "200:success", "401:message", "404:message", "500:message" ], "removedResponseFields": [ "200:geometryType", "401:error", "404:error", "422:code", "422:error", "500:error" ], "authChanged": false, "baseUrlChanged": true, "breakingSignals": [ "Response status no longer declared: 422", "Declared server URL changed" ], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /getLayersList - Identity: `api-generation:mgis-get-getlayerslist-7a2d5959c7` - Canonical: https://developer.mappls.com/api-generations/mgis-get-getlayerslist-7a2d5959c7 ```json { "slug": "mgis-get-getlayerslist-7a2d5959c7", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/getLayersList", "title": "GET /getLayersList", "preferredGeneration": "v2", "preferredSlug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "variants": [ { "generation": "v1", "apiVersion": "V1.0.0", "slug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1", "href": "/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1", "summary": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "34013a0683256113b49f4f53bf081248614e58651009f244030f2ff29bceb0d3", "baseUrl": "https://mgis-api.mappls.com/", "authMode": "bearer", "parameterKeys": [], "requiredParameterKeys": [], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "404", "500" ], "responseFields": [ "200:items[].geometrytype", "200:items[].layername", "400:code", "400:error", "404:code", "404:error", "500:code", "500:error" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V1.0.0", "slug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "href": "/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "summary": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "cc9f61d938cafd0f18558bd2ec18e73b5293bb526b53a74b2d6e6373f0d087bf", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [], "requiredParameterKeys": [], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "404", "500" ], "responseFields": [ "200:code", "200:data", "200:message", "200:success", "400:code", "400:error", "404:code", "404:error", "500:code", "500:error" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1", "toGeneration": "v2", "toSlug": "mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [ "200:code", "200:data", "200:message", "200:success" ], "removedResponseFields": [ "200:items[].geometrytype", "200:items[].layername" ], "authChanged": false, "baseUrlChanged": true, "breakingSignals": [ "Declared server URL changed" ], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /getLegendsImg - Identity: `api-generation:mgis-get-getlegendsimg-eed36ebbd0` - Canonical: https://developer.mappls.com/api-generations/mgis-get-getlegendsimg-eed36ebbd0 ```json { "slug": "mgis-get-getlegendsimg-eed36ebbd0", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/getLegendsImg", "title": "GET /getLegendsImg", "preferredGeneration": "v2", "preferredSlug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "variants": [ { "generation": "v1", "apiVersion": "V1.0.0", "slug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1", "href": "/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1", "summary": "Fetches the image of legends for the given dataset.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "34013a0683256113b49f4f53bf081248614e58651009f244030f2ff29bceb0d3", "baseUrl": "https://mgis-api.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:datasetNme", "query:linestrokecolor", "query:linestrokeopacity", "query:linestrokewidth", "query:pointfillcolor", "query:pointfillopacity", "query:pointsize", "query:polygonfillcolor", "query:polygonfillopacity", "query:stylename" ], "requiredParameterKeys": [ "query:datasetNme" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "500" ], "responseFields": [ "500:code", "500:error" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V1.0.0", "slug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "href": "/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "summary": "Fetches the image of legends for the given dataset.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/get-layer-list-legends-apis.yml", "sourceFingerprint": "cc9f61d938cafd0f18558bd2ec18e73b5293bb526b53a74b2d6e6373f0d087bf", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:datasetNme", "query:linestrokecolor", "query:linestrokeopacity", "query:linestrokewidth", "query:pointfillcolor", "query:pointfillopacity", "query:pointsize", "query:polygonfillcolor", "query:polygonfillopacity", "query:stylename" ], "requiredParameterKeys": [ "query:datasetNme" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "500" ], "responseFields": [ "500:code", "500:error" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1", "toGeneration": "v2", "toSlug": "mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": true, "breakingSignals": [ "Declared server URL changed" ], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /map/getFeatureInfo - Identity: `api-generation:mgis-get-map-getfeatureinfo-6dd132c52b` - Canonical: https://developer.mappls.com/api-generations/mgis-get-map-getfeatureinfo-6dd132c52b ```json { "slug": "mgis-get-map-getfeatureinfo-6dd132c52b", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/map/getFeatureInfo", "title": "GET /map/getFeatureInfo", "preferredGeneration": "v2", "preferredSlug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information", "variants": [ { "generation": "v1", "apiVersion": "V2.0.0", "slug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1", "href": "/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1", "summary": "Fetches the feature information.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/layer_visualization.yml", "sourceFingerprint": "8cfb02a3fcaa29b0fbe05896bfa2b311de8b9f97e897dbfddf54a338d452d8f2", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:bbox", "query:buffer", "query:cql_filter", "query:datasetNme", "query:height", "query:srs", "query:style", "query:transparent", "query:width", "query:x", "query:y" ], "requiredParameterKeys": [ "query:bbox", "query:datasetNme", "query:height", "query:width", "query:x", "query:y" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "200:code", "200:data", "200:data.featureInfo", "200:data.featureInfo.st_name", "200:message", "200:success", "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V2.0.0", "slug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information", "href": "/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information", "summary": "Fetches the feature information.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/layer_visualization.yml", "sourceFingerprint": "789212df7cef0c3c95f49b37b2ce29dd4e8cedfaa496a797b04008071fc8fa34", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:bbox", "query:buffer", "query:cql_filter", "query:datasetNme", "query:height", "query:srs", "query:style", "query:transparent", "query:width", "query:x", "query:y" ], "requiredParameterKeys": [ "query:bbox", "query:datasetNme", "query:height", "query:width", "query:x", "query:y" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "200:code", "200:data", "200:data.featureInfo", "200:data.featureInfo.st_name", "200:message", "200:success", "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1", "toGeneration": "v2", "toSlug": "mgis-get-map-getfeatureinfo-fetches-the-feature-information", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /map/getLayerJoin - Identity: `api-generation:mgis-get-map-getlayerjoin-9a1aac1c53` - Canonical: https://developer.mappls.com/api-generations/mgis-get-map-getlayerjoin-9a1aac1c53 ```json { "slug": "mgis-get-map-getlayerjoin-9a1aac1c53", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/map/getLayerJoin", "title": "GET /map/getLayerJoin", "preferredGeneration": "v2", "preferredSlug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "variants": [ { "generation": "v1", "apiVersion": "V2.0.0", "slug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1", "href": "/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1", "summary": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/layer_visualization.yml", "sourceFingerprint": "8cfb02a3fcaa29b0fbe05896bfa2b311de8b9f97e897dbfddf54a338d452d8f2", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:access_token", "query:bbox", "query:datasetRef", "query:datasetSource", "query:distance", "query:env", "query:geom", "query:height", "query:operator", "query:queryType", "query:refProperty", "query:sourceProperty", "query:srs", "query:style", "query:transparent", "query:userGeom", "query:width" ], "requiredParameterKeys": [ "query:access_token", "query:bbox", "query:datasetSource", "query:height", "query:operator", "query:queryType", "query:width" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V2.0.0", "slug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "href": "/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "summary": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/layer_visualization.yml", "sourceFingerprint": "789212df7cef0c3c95f49b37b2ce29dd4e8cedfaa496a797b04008071fc8fa34", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:access_token", "query:bbox", "query:datasetRef", "query:datasetSource", "query:distance", "query:env", "query:geom", "query:height", "query:operator", "query:queryType", "query:refProperty", "query:sourceProperty", "query:srs", "query:style", "query:transparent", "query:userGeom", "query:width" ], "requiredParameterKeys": [ "query:access_token", "query:bbox", "query:datasetSource", "query:height", "query:operator", "query:queryType", "query:width" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1", "toGeneration": "v2", "toSlug": "mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## api-generation · GET /map/getMap - Identity: `api-generation:mgis-get-map-getmap-ee5f026cd2` - Canonical: https://developer.mappls.com/api-generations/mgis-get-map-getmap-ee5f026cd2 ```json { "slug": "mgis-get-map-getmap-ee5f026cd2", "family": "mgis", "familyName": "mGIS Analytics", "product": "mGIS", "stateModel": "stateful", "method": "GET", "path": "/map/getMap", "title": "GET /map/getMap", "preferredGeneration": "v2", "preferredSlug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "variants": [ { "generation": "v1", "apiVersion": "V2.0.0", "slug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1", "href": "/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1", "summary": "Fetches the maptiles of the dataset name of a bounding box.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v1/custom/layer_visualization.yml", "sourceFingerprint": "8cfb02a3fcaa29b0fbe05896bfa2b311de8b9f97e897dbfddf54a338d452d8f2", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:access_token", "query:bbox", "query:comparisonFunction", "query:comparisonOperator", "query:comparisonValue", "query:cql_filter", "query:datasetNme", "query:env", "query:height", "query:queryType", "query:srs", "query:style", "query:transparent", "query:width" ], "requiredParameterKeys": [ "query:access_token", "query:bbox", "query:datasetNme", "query:height", "query:width" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": false }, { "generation": "v2", "apiVersion": "V2.0.0", "slug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "href": "/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "summary": "Fetches the maptiles of the dataset name of a bounding box.", "sourceFile": "mappls-developer-platform/data/corpus/public-api-contracts/mapmyindia-mgis-apis/docs/v2/custom/layer_visualization.yml", "sourceFingerprint": "789212df7cef0c3c95f49b37b2ce29dd4e8cedfaa496a797b04008071fc8fa34", "baseUrl": "https://mgis-apiv2.mappls.com/", "authMode": "bearer", "parameterKeys": [ "query:access_token", "query:bbox", "query:comparisonFunction", "query:comparisonOperator", "query:comparisonValue", "query:cql_filter", "query:datasetNme", "query:env", "query:height", "query:queryType", "query:srs", "query:style", "query:transparent", "query:width" ], "requiredParameterKeys": [ "query:access_token", "query:bbox", "query:datasetNme", "query:height", "query:width" ], "requestFields": [], "requiredRequestFields": [], "responseStatuses": [ "200", "400", "401", "404", "500" ], "responseFields": [ "400:auth", "400:code", "400:error", "400:message", "401:code", "401:message", "404:code", "404:message", "500:code", "500:message" ], "isPreferredGeneration": true } ], "transitions": [ { "fromGeneration": "v1", "fromSlug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1", "toGeneration": "v2", "toSlug": "mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "addedParameters": [], "removedParameters": [], "newlyRequiredParameters": [], "addedRequestFields": [], "removedRequestFields": [], "newlyRequiredRequestFields": [], "addedResponseStatuses": [], "removedResponseStatuses": [], "addedResponseFields": [], "removedResponseFields": [], "authChanged": false, "baseUrlChanged": false, "breakingSignals": [], "migrationChecklist": [ "Confirm the Mappls account is entitled to v2; source ordering is not availability proof.", "Run both retained contract generations against sanitized fixtures and compare application parsing.", "Update only declared parameters and request fields; do not infer undocumented aliases.", "Exercise authentication rejection, validation, rate-limit, timeout, and unknown-outcome handling.", "For state-changing operations, migrate behind an idempotent adapter and reconcile before retry.", "Retain the source fingerprints, acceptance evidence, rollback trigger, and previous adapter until approval." ] } ], "evidenceBoundary": "Preferred means the highest version-labelled generation retained in this source snapshot. It does not establish current provider support, compatibility, entitlement, regional availability, or a safe production migration." } ``` ## sdk-or-distribution · Mapmyindia Intouch Android SDK - Identity: `sdk-or-distribution:mapmyindia-intouch-android-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-intouch-android-sdk - State model: stateful ```json { "slug": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "repository": "mapmyindia-intouch-android-sdk", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateful", "summary": "A Mappls sdk for tracking telematics, workforce, gis analytics, widgets deep links, identity platform across Android.", "platforms": [ "Android" ], "languages": [ "Java", "Text", "Kotlin" ], "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "identity-platform" ], "authSignals": [ "oauth2" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project" ], "installEvidence": [ { "section": "Setup.", "statements": [ "We use your Client ID to identify your account details and assign all your user's devices under a single account.", "To get your Outh2 Rest API Client ID and Client Secret please login to MapmyIndia API Dashboard", "Please contact apisupport@mapmyindia.com to get InTouch SDK access to your Client ID", "After getting the access, you can start with the InTouchDemo app, or Integrate the InTouch SDK in your app." ] }, { "section": "Step 1: Setup a project", "statements": [ "1. Start Android Studio. 2. Create a new project as follows: - If you see the Welcome to Android Studio dialog, choose Start a new Android Studio project, available under 'Quick Start' on the right of the dialog. - Otherwise, click File in the Android Studio menu bar, click New-> New Project. - Select the form factors you need for your app. If you're not sure what you need, just select Phone and Tablet. - Select Add No Activity and click Next. 3. Enter your app name, package name, project location, language and minimum API version as prompted. Click Next. 4. Create a Basic Activity in the 'Add an activity to Mobile' dialog. Click Next. 5. Enter the activity name, layout name and title as prompted. Click Finish.", "Android Studio starts Gradle and builds your project. This may take a few seconds. For more information about creating a project in Android Studio, see the Android Studio documentation.", "The next few sections contain the code samples that you need to add to your activity's java file as well as its xml layout file for creating an app with MapmyIndia InTouch SDK for live tracking." ] }, { "section": "Step 3: Initialize InTouch SDK", "statements": [ "Initialization can be done either of the below mentioned method. Keep the same method accross your project." ] } ], "sourceSamples": [ { "language": "Java", "label": "Step 2. Add InTouch SDK", "code": "allprojects { \n repositories { \n \n maven { \n url 'https://maven.mapmyindia.com/repository/mapmyindia/' \n } \n } \n}" }, { "language": "Java", "label": "Step 2. Add InTouch SDK", "code": "implementation 'com.mapmyindia.sdk:intouch-sdk:0.9.4'" }, { "language": "Java", "label": "Add Java 8 Support to the project", "code": "compileOptions {\n sourceCompatibility 1.8\n targetCompatibility 1.8\n }" }, { "language": "Java", "label": "Add Java 8 Support to the project", "code": "Required Minimum sdk version\n minSdkVersion 18" }, { "language": "Kotlin", "label": "Kotlin", "code": "InTouch.initialize(, , , object : IAuthListener { \n override fun onSuccess() { \n //write your code here \n } \n\toverride fun onError(reason: String?, errorIdentifier: String?, errorDescription: String?) { \n // reason gives the error type. \n // errorIdentifier gives information about error code. \n // errorDescription gives a message for a particular error. \n } \n \n})" }, { "language": "Kotlin", "label": "Kotlin", "code": "InTouch.initialize(, , , , , object : IAuthListener { \n override fun onSuccess(Long entityId) { \n //write your code here \n } \n\toverride fun onError(reason: String?, errorIdentifier: String?, errorDescription: String?) { \n // reason gives the error type. \n // errorIdentifier gives information about error code. \n // errorDescription gives a message for a particular error. \n } \n \n})" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 29, "endpointCount": 15, "codeSampleCount": 10, "fingerprint": "5cfa92eb45ca42e58241721a86ef1c5655708eed1817d098acd8d2e45202e9aa" }, "source": { "id": "public-mapmyindia-intouch-android-sdk", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-android-sdk", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-android-sdk/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2024-04-18T11:30:50Z", "fingerprint": "5cfa92eb45ca42e58241721a86ef1c5655708eed1817d098acd8d2e45202e9aa", "freshness": "historical", "ageDays": 851 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-android-sdk", "name": "mapmyindia-intouch-android-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-android-sdk" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-intouch-android-sdk", "sourceGuide": "/reference/mapmyindia-intouch-android-sdk", "migrations": [ { "slug": "intouch-android", "title": "InTouch Android SDK lineage", "confidence": "direct-lineage", "href": "/migrate/intouch-android" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapmyIndia Vector Map Android SDK - Identity: `sdk-or-distribution:mapmyindia-maps-vectorsdk-android` - Canonical: https://developer.mappls.com/sdks/mapmyindia-maps-vectorsdk-android - State model: stateless ```json { "slug": "mapmyindia-maps-vectorsdk-android", "title": "MapmyIndia Vector Map Android SDK", "repository": "mapmyindia-maps-vectorSDK-android", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "MapmyIndia Vector Maps SDK for Native Android Development with REST API Kit", "platforms": [ "Android" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "authSignals": [ "api-key" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 12, "codeSampleCount": 0, "fingerprint": "ebbf7b3285901de88cbc9a9186189e01941649952363c0faf7992b0678712c13" }, "source": { "id": "public-mapmyindia-maps-vectorsdk-android", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-android", "readmeUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-android/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-05-05T04:35:55Z", "fingerprint": "ebbf7b3285901de88cbc9a9186189e01941649952363c0faf7992b0678712c13", "freshness": "historical", "ageDays": 1565 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-maps-vectorsdk-android", "name": "mapmyindia-maps-vectorSDK-android", "relativePath": "contenthub/dochub/mapmyindia-maps-vectorSDK-android" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-maps-vectorsdk-android", "sourceGuide": "/reference/mapmyindia-maps-vectorsdk-android", "migrations": [ { "slug": "android-map-lineage", "title": "Android vector map SDK lineage", "confidence": "direct-lineage", "href": "/migrate/android-map-lineage" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Android SDK - Identity: `sdk-or-distribution:mappls-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-android-sdk - State model: stateless ```json { "slug": "mappls-android-sdk", "title": "Mappls Android SDK", "repository": "mappls-android-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "A collection of Mappls's Map and others SDKs for Native android Development.", "platforms": [ "Android" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0" }, "source": { "id": "public-mappls-android-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-08T05:06:14Z", "fingerprint": "2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0", "freshness": "active", "ageDays": 40 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-android-sdk", "sourceGuide": "/reference/mappls-android-sdk", "migrations": [ { "slug": "android-map-lineage", "title": "Android vector map SDK lineage", "confidence": "direct-lineage", "href": "/migrate/android-map-lineage" } ], "exactQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "android-native-starter", "name": "Android lifecycle adapter starter", "platform": "Android", "downloadPath": "/downloads/starter-kits/android-native-starter.zip", "href": "/starter-kits/android-native-starter" } ] } } ``` ## sdk-or-distribution · Mappls Camera SDK - Identity: `sdk-or-distribution:mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/sdks/mappls-camera-sdk-android - State model: stateless ```json { "slug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "repository": "mappls-camera-sdk-android", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "A Mappls sdk for maps, search places, tracking telematics, workforce, widgets deep links, offline automotive, capture feedback across Android.", "platforms": [ "Android" ], "languages": [ "Kotlin", "Groovy" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "authSignals": [ "api-key" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [ { "section": "Add the dependency", "statements": [ "• Add below dependency in your app-level build.gradle" ] } ], "sourceSamples": [ { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "implementation(\"com.mappls.sdk:mappls-camera:1.0.0\")" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "implementation 'com.mappls.sdk:mappls-camera:1.0.0'" }, { "language": "Kotlin", "label": "Android — Interface: MapplsCameraCallback", "code": "interface MapplsCameraCallback {\n fun onCaptureCancelled(){}\n fun onImageCaptured(result: MapplsCameraResult)\n fun onVideoCaptured(result: MapplsCameraResult)\n fun onError(errorCode: Int, errorMessage: String)\n\n fun onCancel()\n fun onLocationUpdated(latitude: Double, longitude: Double, accuracyMetres: Float)\n fun permissionResultCallback(cameraGranted: Boolean, audioGranted:Boolean,locationGranted: Boolean){}\n fun onNearbyPINsLoaded(pins: List){}\n fun onCameraZoomChanged(newValue: Float){}\n}" }, { "language": "Kotlin", "label": "Android (MapplsCamera object)", "code": "MapplsCamera.getLastCapturedResult(): MapplsCameraResult?\nMapplsCamera.getLastLocation(): Location?\nMapplsCamera.getLastEloc(): String?\nMapplsCamera.getLastFormattedAddress(): String?" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 48, "endpointCount": 19, "codeSampleCount": 4, "fingerprint": "7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306" }, "source": { "id": "public-mappls-camera-sdk-android", "repositoryUrl": "https://github.com/mappls-api/mappls-camera-sdk-android", "readmeUrl": "https://github.com/mappls-api/mappls-camera-sdk-android/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-08T05:20:16Z", "fingerprint": "7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306", "freshness": "active", "ageDays": 70 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-camera-sdk-android", "sourceGuide": "/reference/mappls-camera-sdk-android", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Intouch Android SDK - Identity: `sdk-or-distribution:mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-android-sdk - State model: stateful ```json { "slug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK", "repository": "mappls-intouch-android-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateful", "summary": "A Mappls sdk for tracking telematics, workforce, gis analytics, widgets deep links, capture feedback across Android.", "platforms": [ "Android" ], "languages": [], "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 20, "codeSampleCount": 0, "fingerprint": "47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4" }, "source": { "id": "public-mappls-intouch-android-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-05-18T07:43:00Z", "fingerprint": "47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4", "freshness": "active", "ageDays": 91 }, "correspondence": { "matchQuality": "normalized", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-android-sdk", "name": "mapmyindia-intouch-android-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-android-sdk" } ] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-intouch-android-sdk", "sourceGuide": "/reference/mappls-intouch-android-sdk", "migrations": [ { "slug": "intouch-android", "title": "InTouch Android SDK lineage", "confidence": "direct-lineage", "href": "/migrate/intouch-android" }, { "slug": "workmate-workforce", "title": "Workmate and workforce journeys", "confidence": "selection-required", "href": "/migrate/workmate-workforce" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Location Capture SDK - Identity: `sdk-or-distribution:mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-location-capture-android-sdk - State model: hybrid ```json { "slug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "repository": "mappls-location-capture-android-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "hybrid", "summary": "A lightweight, on-demand location capture SDK for Android that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage. The SDK supports single-shot and subscribed location fetching without continuous tracking.", "platforms": [ "Android" ], "languages": [ "Kotlin", "Groovy", "Java" ], "productAreas": [ "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "capture-feedback" ], "authSignals": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain" ], "installEvidence": [ { "section": "Getting started", "statements": [ "A lightweight, on-demand location capture SDK for Android that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage. The SDK supports single-shot and subscribed location fetching without continuous tracking." ] }, { "section": "Adding Mappls Configuration file", "statements": [ "• Download Configuration files for your app (associated with Package Name and Signing Certificate SHA-256 ) - Add Configuration files ( .a.olf and .a.conf) into the module app-level root directory of your app - Add Mappls Service Plugin as a dependency in your project level build.gradle or build.gradle.kts" ] }, { "section": "Add the dependency", "statements": [ "• Add below dependency in your app-level build.gradle" ] } ], "sourceSamples": [ { "language": "Kotlin", "label": "Kotlin (settings.gradle.kts)", "code": "pluginManagement {\n repositories {\n maven(url = \"https://maven.mappls.com/repository/mappls/\")\n }\n }\n dependencyResolutionManagement {\n repositories {\n google()\n mavenCentral()\n maven(url = \"https://maven.mappls.com/repository/mappls/\")\n }\n }" }, { "language": "Groovy", "label": "Groovy (settings.gradle)", "code": "pluginManagement {\n repositories {\n maven {\n url 'https://maven.mappls.com/repository/mappls/'\n }\n }\n }\n dependencyResolutionManagement { \n repositories { \n google() \n mavenCentral() \n maven { \n url 'https://maven.mappls.com/repository/mappls/' \n } \n } \n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "buildscript {\n dependencies {\n classpath(\"com.mappls.services:mappls-services:1.0.0\")\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n }" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "buildscript {\n dependencies {\n classpath 'com.mappls.services:mappls-services:1.0.0'\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "plugins {\n id(\"com.android.application\")\n // Add the Mappls services Gradle plugin \n id(\"com.mappls.services.android\")\n }" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "plugins {\n id 'com.android.application'\n // Add the Mappls services Gradle plugin\n id 'com.mappls.services.android'\n }" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 26, "endpointCount": 18, "codeSampleCount": 11, "fingerprint": "b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7" }, "source": { "id": "public-mappls-location-capture-android-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-12-17T11:23:24Z", "fingerprint": "b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7", "freshness": "aging", "ageDays": 243 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-location-capture-android-sdk", "sourceGuide": "/reference/mappls-location-capture-android-sdk", "migrations": [ { "slug": "workmate-workforce", "title": "Workmate and workforce journeys", "confidence": "selection-required", "href": "/migrate/workmate-workforce" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Workmate SDK - Android - Identity: `sdk-or-distribution:mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-workmate-android-sdk - State model: stateful ```json { "slug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "repository": "mappls-workmate-android-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateful", "summary": "Native Android SDK for our Workforce Management & Automation Solution - Workmate", "platforms": [ "Android" ], "languages": [], "productAreas": [ "tracking-telematics", "workforce", "identity-platform" ], "authSignals": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 7, "endpointCount": 7, "codeSampleCount": 0, "fingerprint": "e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8" }, "source": { "id": "public-mappls-workmate-android-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-19T08:59:39Z", "fingerprint": "e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8", "freshness": "active", "ageDays": 59 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-workmate-android-sdk", "sourceGuide": "/reference/mappls-workmate-android-sdk", "migrations": [ { "slug": "workmate-workforce", "title": "Workmate and workforce journeys", "confidence": "selection-required", "href": "/migrate/workmate-workforce" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "android-native", "title": "Create a lifecycle-safe Android map", "platform": "Android", "href": "/quickstart/android-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapmyIndia REST APIs for Cordova/Ionic - Beta 1 - Identity: `sdk-or-distribution:mapmyindia-restapi-cordova-ionic-beta` - Canonical: https://developer.mappls.com/sdks/mapmyindia-restapi-cordova-ionic-beta - State model: stateless ```json { "slug": "mapmyindia-restapi-cordova-ionic-beta", "title": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "repository": "mapmyindia-restapi-cordova-ionic-beta", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1 Hybrid SDK", "platforms": [ "Cordova/Ionic" ], "languages": [ "JavaScript", "Text", "JSX" ], "productAreas": [ "search-places", "routes-navigation", "widgets-deep-links" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [ { "section": "Browser Installation", "statements": [ "| IONIC | CORDOVA | | ionic cordova platform add browser | cordova platform add browser |" ] } ], "sourceSamples": [ { "language": "JavaScript", "label": "git", "code": "> cordova plugin add https://github.com/mapmyindia/mapmyindia-restapi-cordova-ionic-beta.git\nor \n> cordova plugin add mapmyindia-restapi-cordova-ionic-beta" }, { "language": "JavaScript", "label": "Only if you are running cordova project in browser not for ionicframew", "code": "" }, { "language": "JavaScript", "label": "Only if you are running cordova project in browser not for ionicframew", "code": "> declare var mmi_rest;" }, { "language": "Jsx", "label": "Autosuggest", "code": "mmi_rest.atlas_auto(\n\n{\n\nclient_id: 'YOUR_CLIENT_ID',\n\nclient_secret: 'YOUR_CLIENT_SECRET',\n\nquery: 'agr'\n\n},SuccessCallback, Error Callback);" }, { "language": "JavaScript", "label": "Autosuggest", "code": "mmi_rest.atlas_auto({client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET',query: 'agr'},\n\nfunction(result)\n\n{\n\nconsole.log(result);\n\n},\n\nfunction(error)\n\n{\n\nconsole.log(error);\n\n});" }, { "language": "JavaScript", "label": "Geocode", "code": "mmi_rest.atlas_geocode(client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET',address: 'agra'}, Success Callback, Error Callback);" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 23, "endpointCount": 20, "codeSampleCount": 14, "fingerprint": "dbd1303d017e4f7332a7799990a5da60b6fd4bba6271c3323c858e732ff4d4ff" }, "source": { "id": "public-mapmyindia-restapi-cordova-ionic-beta", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-restapi-cordova-ionic-beta", "readmeUrl": "https://github.com/mappls-api/mapmyindia-restapi-cordova-ionic-beta/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2020-09-30T06:20:27Z", "fingerprint": "dbd1303d017e4f7332a7799990a5da60b6fd4bba6271c3323c858e732ff4d4ff", "freshness": "historical", "ageDays": 2147 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-restapi-cordova-ionic-beta", "name": "mapmyindia-restapi-cordova-ionic-beta", "relativePath": "contenthub/dochub/mapmyindia-restapi-cordova-ionic-beta" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-restapi-cordova-ionic-beta", "sourceGuide": "/reference/mapmyindia-restapi-cordova-ionic-beta", "migrations": [ { "slug": "cordova-ionic-exit", "title": "Cordova and Ionic: stabilize, then migrate by journey", "confidence": "selection-required", "href": "/migrate/cordova-ionic-exit" } ], "exactQuickstarts": [ { "slug": "cordova-maintenance", "title": "Stabilize a Cordova map before migration", "platform": "Cordova", "href": "/quickstart/cordova-maintenance" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "cordova-maintenance-starter", "name": "Cordova stabilization starter", "platform": "Cordova", "downloadPath": "/downloads/starter-kits/cordova-maintenance-starter.zip", "href": "/starter-kits/cordova-maintenance-starter" } ] } } ``` ## sdk-or-distribution · Flutter MapmyIndia GL - Identity: `sdk-or-distribution:flutter-mapmyindia-gl` - Canonical: https://developer.mappls.com/sdks/flutter-mapmyindia-gl - State model: stateless ```json { "slug": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "repository": "flutter-mapmyindia-gl", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "A Mappls sdk for maps, search places, routes navigation, tracking telematics, widgets deep links, offline automotive, capture feedback across Flutter.", "platforms": [ "Flutter" ], "languages": [ "Dart" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "A Flutter project with Android and iOS platform configuration", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "To work with MapmyIndia Map in flutter add this to your package's pubspec.yaml file: yaml dependencies: mapmyindiagl: ^0.3.1", "Now in your dart code you need to import this package: dart import 'package:mapmyindiagl/mapmyindiagl.dart';" ] } ], "sourceSamples": [ { "language": "Dart", "label": "Add Annotations using Geojson", "code": "List symbol = await controller.addSymbolsFromJson(geojson); \nList lines = await controller.addLinesFromJson(geojson); \nList fills = await controller.addFillsFromJson(geojson);" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 23, "endpointCount": 8, "codeSampleCount": 1, "fingerprint": "925a61dda2d31e0ceb80aac0208b0c87813b4af2aea20769bd8b6659f3c64b18" }, "source": { "id": "public-flutter-mapmyindia-gl", "repositoryUrl": "https://github.com/mappls-api/flutter-mapmyindia-gl", "readmeUrl": "https://github.com/mappls-api/flutter-mapmyindia-gl/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2022-09-30T08:39:02Z", "fingerprint": "925a61dda2d31e0ceb80aac0208b0c87813b4af2aea20769bd8b6659f3c64b18", "freshness": "historical", "ageDays": 1417 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-flutter-mapmyindia-gl", "name": "flutter-mapmyindia-gl", "relativePath": "contenthub/dochub/flutter-mapmyindia-gl" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/flutter-mapmyindia-gl", "sourceGuide": "/reference/flutter-mapmyindia-gl", "migrations": [ { "slug": "flutter-map-lineage", "title": "Flutter map plugin lineage", "confidence": "direct-lineage", "href": "/migrate/flutter-map-lineage" } ], "exactQuickstarts": [ { "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "platform": "Flutter", "href": "/quickstart/flutter-map" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "flutter-map-starter", "name": "Flutter place-selection starter", "platform": "Flutter", "downloadPath": "/downloads/starter-kits/flutter-map-starter.zip", "href": "/starter-kits/flutter-map-starter" } ] } } ``` ## sdk-or-distribution · Mappls Flutter SDK - Identity: `sdk-or-distribution:mappls-flutter-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-flutter-sdk - State model: stateless ```json { "slug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "repository": "mappls-flutter-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "This SDK is wrapper for Flutter on Native Map SDK to support on Android and iOS.", "platforms": [ "Flutter" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "prerequisites": [ "A Flutter project with Android and iOS platform configuration", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d" }, "source": { "id": "public-mappls-flutter-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-flutter-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-flutter-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T03:24:01Z", "fingerprint": "512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-flutter-sdk", "sourceGuide": "/reference/mappls-flutter-sdk", "migrations": [ { "slug": "cordova-ionic-exit", "title": "Cordova and Ionic: stabilize, then migrate by journey", "confidence": "selection-required", "href": "/migrate/cordova-ionic-exit" }, { "slug": "flutter-map-lineage", "title": "Flutter map plugin lineage", "confidence": "direct-lineage", "href": "/migrate/flutter-map-lineage" } ], "exactQuickstarts": [ { "slug": "flutter-map", "title": "Build a native-backed Flutter place picker", "platform": "Flutter", "href": "/quickstart/flutter-map" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "flutter-map-starter", "name": "Flutter place-selection starter", "platform": "Flutter", "downloadPath": "/downloads/starter-kits/flutter-map-starter.zip", "href": "/starter-kits/flutter-map-starter" } ] } } ``` ## sdk-or-distribution · [Custom Search Nearby Records](Custom-Search-Nearby-Records) - Identity: `sdk-or-distribution:mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-finder-ios-distribution - State model: stateless ```json { "slug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "repository": "mappls-nearby-finder-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "mappls-nearby-finder-ios-distribution", "platforms": [ "iOS" ], "languages": [ "Ruby", "Swift" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Dependencies", "statements": [ "MapplsAPICore and MapplsAPIKit are dependencies which will require to use this SDK." ] }, { "section": "Installation", "statements": [ "This library is available through Swift Package Manager." ] } ], "sourceSamples": [ { "language": "Ruby", "label": "Installation", "code": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git" }, { "language": "Swift", "label": "Usage", "code": "let locations = CLLocation(latitude: 28.00, longitude: 77.98)\nlet nearbyFinderSearchOptions = MapplsNearbyFinderOptions(recordType: \"\", refLocation: locations)\nlet nearbyFinderSearchManager = MapplsNearbyRecordFinderManager.shared\nnearbyFinderSearchManager.getSearchResults(nearbyFinderSearchOptions) { (response, error) in\n if let error = error {\n print(\"Error\")\n } else if let response = response, let records = response.records {\n print(\"Resonse: \\(records)\")\n } else {\n self.showAlertController(message: \"No Results\")\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderSortBy = UserDefaultsManager.nearbyFinderSortBy {\n let sortByType = MMISearchByType(nearbyFinderSortBy)\n if sortByType == .importance {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortby(sortBy: .importance)\n } else {\n if let nearbyFinderOrderBy = UserDefaultsManager.nearbyFinderOrderBy {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortByDistanceWithOrder(orderBy: MMISortByOrderType(rawValue: nearbyFinderOrderBy))\n }\n }\n }" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderFilterMapplsPin = UserDefaultsManager.nearbyFinderFilterMapplsPin {\n nearbyFinderSearchOptions.filters = [MapplsNearbyRecordFinderKeyValueFilter(filterKey: \"cop\", filterValues: [nearbyFinderFilterMapplsPin])]\n }" }, { "language": "Swift", "label": "Swift", "code": "let alongTheRouteOption = MapplsNearbyFinderAlongTheRouteOptions(path: routeGeometry, recordType: \"WFHORWFO\")\nalongTheRouteOption.geometryType = .polyline6\nlet _ = MapplsNearbyFinderAlongTheRouteManager.shared.getAlongTheRoute(alongTheRouteOption) { (response, error) in\n if let error = error {\n // Error to be handled. \n } else if response == nil {\n // error\n } else if let response = response {\n // Your Logic ...\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 20, "codeSampleCount": 5, "fingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc" }, "source": { "id": "public-mappls-nearby-finder-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-02-24T12:19:14Z", "fingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc", "freshness": "active", "ageDays": 174 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-nearby-finder-ios-distribution", "sourceGuide": "/reference/mappls-nearby-finder-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · [Custom Search Nearby Records](Custom-Search-Nearby-Records) - Identity: `sdk-or-distribution:mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-finder-ios-distribution-base - State model: stateless ```json { "slug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "repository": "mappls-nearby-finder-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Ruby", "Swift" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Dependencies", "statements": [ "MapplsAPICore and MapplsAPIKit are dependencies which will require to use this SDK." ] }, { "section": "Installation", "statements": [ "This library is available through Swift Package Manager." ] } ], "sourceSamples": [ { "language": "Ruby", "label": "Installation", "code": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git" }, { "language": "Swift", "label": "Usage", "code": "let locations = CLLocation(latitude: 28.00, longitude: 77.98)\nlet nearbyFinderSearchOptions = MapplsNearbyFinderOptions(recordType: \"\", refLocation: locations)\nlet nearbyFinderSearchManager = MapplsNearbyRecordFinderManager.shared\nnearbyFinderSearchManager.getSearchResults(nearbyFinderSearchOptions) { (response, error) in\n if let error = error {\n print(\"Error\")\n } else if let response = response, let records = response.records {\n print(\"Resonse: \\(records)\")\n } else {\n self.showAlertController(message: \"No Results\")\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderSortBy = UserDefaultsManager.nearbyFinderSortBy {\n let sortByType = MMISearchByType(nearbyFinderSortBy)\n if sortByType == .importance {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortby(sortBy: .importance)\n } else {\n if let nearbyFinderOrderBy = UserDefaultsManager.nearbyFinderOrderBy {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortByDistanceWithOrder(orderBy: MMISortByOrderType(rawValue: nearbyFinderOrderBy))\n }\n }\n }" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderFilterMapplsPin = UserDefaultsManager.nearbyFinderFilterMapplsPin {\n nearbyFinderSearchOptions.filters = [MapplsNearbyRecordFinderKeyValueFilter(filterKey: \"cop\", filterValues: [nearbyFinderFilterMapplsPin])]\n }" }, { "language": "Swift", "label": "Swift", "code": "let alongTheRouteOption = MapplsNearbyFinderAlongTheRouteOptions(path: routeGeometry, recordType: \"WFHORWFO\")\nalongTheRouteOption.geometryType = .polyline6\nlet _ = MapplsNearbyFinderAlongTheRouteManager.shared.getAlongTheRoute(alongTheRouteOption) { (response, error) in\n if let error = error {\n // Error to be handled. \n } else if response == nil {\n // error\n } else if let response = response {\n // Your Logic ...\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 20, "codeSampleCount": 5, "fingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc" }, "source": { "id": "public-mappls-nearby-finder-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-02-24T12:25:23Z", "fingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc", "freshness": "active", "ageDays": 174 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-nearby-finder-ios-distribution-base", "sourceGuide": "/reference/mappls-nearby-finder-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · [Mappls Intouch SDK]() - Identity: `sdk-or-distribution:mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-ios-sdk - State model: stateful ```json { "slug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK]()", "repository": "mappls-intouch-ios-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateful", "summary": "A Mappls sdk for tracking telematics, workforce, gis analytics, capture feedback across iOS.", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "capture-feedback" ], "authSignals": [ "oauth2" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 18, "codeSampleCount": 0, "fingerprint": "d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0" }, "source": { "id": "public-mappls-intouch-ios-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-23T13:28:47Z", "fingerprint": "d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0", "freshness": "active", "ageDays": 25 }, "correspondence": { "matchQuality": "normalized", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-ios-sdk", "name": "mapmyindia-intouch-ios-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-ios-sdk" } ] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-intouch-ios-sdk", "sourceGuide": "/reference/mappls-intouch-ios-sdk", "migrations": [ { "slug": "intouch-ios", "title": "InTouch iOS SDK lineage", "confidence": "direct-lineage", "href": "/migrate/intouch-ios" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · [Mappls Map SDK]() - Identity: `sdk-or-distribution:mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-map-ios-distribution - State model: stateless ```json { "slug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "repository": "mappls-map-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Map Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Text", "Swift", "Objective-C" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Mappls's Map SDK for iOS lets you easily add Mappls Map and web services to your own iOS app. Mappls's Map SDK for iOS supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls's Maps app for iOS. The SDK handles map tiles download and their display along with a bunch of controls and native gestures." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore, MapplsAPIKit. All dependent libraries will be automatically.", "• For iOS9 or later, make this change to your info.plist (Project target > info.plist > Add row and set keys NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription, NSLocationAlwaysUsageDescription). As follows", "Message should be appropriate, according to use of your application." ] } ], "sourceSamples": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 107, "endpointCount": 21, "codeSampleCount": 14, "fingerprint": "fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b" }, "source": { "id": "public-mappls-map-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-map-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-map-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-02T12:03:35Z", "fingerprint": "fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b", "freshness": "active", "ageDays": 46 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-map-ios-distribution", "sourceGuide": "/reference/mappls-map-ios-distribution", "migrations": [ { "slug": "ios-map-packages", "title": "iOS map and API package lineage", "confidence": "direct-lineage", "href": "/migrate/ios-map-packages" } ], "exactQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "ios-native-starter", "name": "iOS view-ownership starter", "platform": "iOS", "downloadPath": "/downloads/starter-kits/ios-native-starter.zip", "href": "/starter-kits/ios-native-starter" } ] } } ``` ## sdk-or-distribution · [Mappls Map SDK]() - Identity: `sdk-or-distribution:mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-map-ios-distribution-base - State model: stateless ```json { "slug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "repository": "mappls-map-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Map Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Text", "Swift", "Objective-C" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Mappls's Map SDK for iOS lets you easily add Mappls Map and web services to your own iOS app. Mappls's Map SDK for iOS supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls's Maps app for iOS. The SDK handles map tiles download and their display along with a bunch of controls and native gestures." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore, MapplsAPIKit. All dependent libraries will be automatically.", "• For iOS9 or later, make this change to your info.plist (Project target > info.plist > Add row and set keys NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription, NSLocationAlwaysUsageDescription). As follows", "Message should be appropriate, according to use of your application." ] } ], "sourceSamples": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 107, "endpointCount": 21, "codeSampleCount": 14, "fingerprint": "c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b" }, "source": { "id": "public-mappls-map-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-02T11:23:55Z", "fingerprint": "c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b", "freshness": "active", "ageDays": 46 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-map-ios-distribution-base", "sourceGuide": "/reference/mappls-map-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · [Mappls Map SDK]() - Identity: `sdk-or-distribution:mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-map-move-ios-distribution-base - State model: stateless ```json { "slug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "repository": "mappls-map-move-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "mappls-map-move-ios-distribution-base", "platforms": [ "iOS" ], "languages": [ "Text", "Swift", "Objective-C" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Mappls's Map SDK for iOS lets you easily add Mappls Map and web services to your own iOS app. Mappls's Map SDK for iOS supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls's Maps app for iOS. The SDK handles map tiles download and their display along with a bunch of controls and native gestures." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore, MapplsAPIKit. All dependent libraries will be automatically.", "• For iOS9 or later, make this change to your info.plist (Project target > info.plist > Add row and set keys NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription, NSLocationAlwaysUsageDescription). As follows", "Message should be appropriate, according to use of your application." ] } ], "sourceSamples": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 107, "endpointCount": 21, "codeSampleCount": 14, "fingerprint": "df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e" }, "source": { "id": "public-mappls-map-move-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-01T08:08:30Z", "fingerprint": "df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e", "freshness": "active", "ageDays": 47 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-map-move-ios-distribution-base", "sourceGuide": "/reference/mappls-map-move-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · [MapplsAPICore]() - Identity: `sdk-or-distribution:mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-api-core-ios-distribution - State model: stateless ```json { "slug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "repository": "mappls-api-core-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls API Core Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 8, "endpointCount": 18, "codeSampleCount": 0, "fingerprint": "32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734" }, "source": { "id": "public-mappls-api-core-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-30T05:11:46Z", "fingerprint": "32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734", "freshness": "active", "ageDays": 48 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-api-core-ios-distribution", "sourceGuide": "/reference/mappls-api-core-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · [MapplsAPIKit (REST API Kit for iOS)]() - Identity: `sdk-or-distribution:mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-api-kit-ios-distribution - State model: stateless ```json { "slug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "repository": "mappls-api-kit-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls API Kit Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Objective-C", "Swift", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "gis-analytics", "capture-feedback", "identity-platform" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore. All dependent libraries will be automatically." ] }, { "section": "Getting Started", "statements": [ "Mappls Map SDK for iOS lets you easily add Mappls Map and services to your own iOS app.It supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls Map app for iOS. The SDK handles Map Display along with a bunch of controls and native gestures." ] }, { "section": "API Usage and Requirements", "statements": [ "The allowed SDK hits are described on the plans page. Note that your usage is shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] } ], "sourceSamples": [ { "language": "Objectivec", "label": "Objective C", "code": "MapplsAutoSuggestManager * autoSuggestManager = [MapplsAutoSuggestManager sharedManager];\n// or\nMapplsAutoSuggestManager *autoSuggestManager = [[MapplsAutoSuggestManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsAutoSearchAtlasOptions * autoSuggestOptions = [[MapplsAutoSearchAtlasOptions alloc] initWithQuery:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\nautoSuggestOptions.location = [[CLLocation alloc] initWithLatitude:28.2323234 longitude:72.3434123];\nautoSuggestOptions.zoom = [[NSNumber alloc] initWithInt:5];\n[autoSuggestManager getAutoSuggestionResultsWithOptions:autoSuggestOptions completionHandler:^(MapplsLocationResults * _Nullable locationResults, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (locationResults) {\n MapplsAutoSuggestLocationResults * results = (MapplsAutoSuggestLocationResults *) locationResults;\n if(results && results.suggestions) {\n for (MapplsAtlasSuggestion * suggestion in results.suggestions) {\n NSLog(@\"Auto Suggest %@%@\", suggestion.latitude, suggestion.longitude);\n }\n }\n if(results && results.suggestedSearches) {\n for (MapplsSearchPrediction * suggestion in results.suggestedSearches) {\n NSLog(@\"Auto Suggest %@\", suggestion.identifier);\n }\n }\n } else {\n NSLog(@\"No Results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let autoSuggestManager = MapplsAutoSuggestManager.shared\n//Or\nlet autoSuggestManager = MapplsAutoSuggestManager(restKey:\nMapplsAccountManager.restAPIKey(), clientId:\nMapplsAccountManager.atlasClientId(), clientSecret:\nMapplsAccountManager.atlasClientSecret(), grantType:\nMapplsAccountManager.atlasGrantType())\n\nlet autoSearchAtlasOptions = MapplsAutoSearchAtlasOptions(query: \"mmi000\",\nwithRegion: .india)\nautoSearchAtlasOptions.location = CLLocation(latitude: 28.2323234, longitude: 72.3434123)\nautoSearchAtlasOptions.zoom = 5\nautoSuggestManager.getAutoSuggestionResults(autoSearchAtlasOptions) { (locationResults, error) in\n if let error = error {\n print(\"error: \\(error.localizedDescription)\")\n } else if let locationResults = locationResults as? MapplsAutoSuggestLocationResults {\n if let suggestions = locationResults.suggestions {\n for suggestion in suggestions {\n print(\"suggestion: \\(suggestion.placeName)\")\n }\n }\n if let suggestions = locationResults.suggestedSearches {\n for suggestion in suggestions {\n print(\"suggestedSearches: \\(suggestion.identifier)\")\n }\n }\n } else {\n print(\"No Results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsReverseGeocodeManager * reverseGeocodeManager = [MapplsReverseGeocodeManager sharedManager];\n//Or\nMapplsReverseGeocodeManager * reverseGeocodeManager = [[MapplsReverseGeocodeManager alloc] initWithClientId:MapplsAccountManager.clientId clientSecret:MapplsAccountManager.clientSecret grantType:nil host:nil scheme:nil];\n \nMapplsReverseGeocodeOptions *revOptions = [[MapplsReverseGeocodeOptions alloc] initWithCoordinate:CLLocationCoordinate2DMake(28.553291, 77.258876) withRegion:MapplsRegionTypeIndia];\n \n[reverseGeocodeManager reverseGeocodeWithOptions:revOptions completionHandler:^(NSArray * _Nullable placemarks, NSString * _Nullable attribution, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (placemarks.count > 0) {\n NSLog(@\"Reverse Geocode %@\",\n placemarks[0].formattedAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let reverseGeocodeManager = MapplsReverseGeocodeManager.shared\n//Or\nlet reverseGeocodeManager = MapplsReverseGeocodeManager(clientId: MapplsAccountManager.clientId(), clientSecret: MapplsAccountManager.clientSecret())\n \nlet revOptions = MapplsReverseGeocodeOptions(coordinate: CLLocationCoordinate2D(latitude: 28.553291, longitude: 77.258876), withRegion: .india)\nreverseGeocodeManager.reverseGeocode(revOptions) { (placemarks, attribution, error) in\n if let error = error {\n print(\"%@\", error)\n } else if let placemarks = placemarks, !placemarks.isEmpty {\n print(\"Reverse Geocode: \\(placemarks[0].formattedAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Request Parameters", "code": "let filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [String,String])" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsNearByManager * nearByManager = [MapplsNearByManager sharedManager];\n//Or\nMapplsNearByManager * nearByManager = [[MapplsNearByManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n \nNSString *refLocation = @\"28.550667, 77.268959\";\n \nMapplsNearbyAtlasOptions *nearByOptions = [[MapplsNearbyAtlasOptions alloc] initWithQuery:@\"EV Charging\" location:refLocation withRegion:MapplsRegionTypeIndia];\n \n[nearByManager getNearBySuggestionsWithOptions:nearByOptions completionHandler:^(MapplsNearbyResult * _Nullable result, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (result.suggestions.count > 0) {\n NSLog(@\"Nearby %@\", result.suggestions[0].placeAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 103, "endpointCount": 36, "codeSampleCount": 14, "fingerprint": "8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df" }, "source": { "id": "public-mappls-api-kit-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:04:09Z", "fingerprint": "8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-api-kit-ios-distribution", "sourceGuide": "/reference/mappls-api-kit-ios-distribution", "migrations": [ { "slug": "ios-map-packages", "title": "iOS map and API package lineage", "confidence": "direct-lineage", "href": "/migrate/ios-map-packages" } ], "exactQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "ios-native-starter", "name": "iOS view-ownership starter", "platform": "iOS", "downloadPath": "/downloads/starter-kits/ios-native-starter.zip", "href": "/starter-kits/ios-native-starter" } ] } } ``` ## sdk-or-distribution · [MapplsAPIKit (REST API Kit for iOS)]() - Identity: `sdk-or-distribution:mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-api-kit-ios-distribution-base - State model: stateless ```json { "slug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "repository": "mappls-api-kit-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls API Kit Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Objective-C", "Swift", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "capture-feedback", "identity-platform" ], "authSignals": [ "oauth2", "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore. All dependent libraries will be automatically." ] }, { "section": "Getting Started", "statements": [ "Mappls Map SDK for iOS lets you easily add Mappls Map and services to your own iOS app.It supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls Map app for iOS. The SDK handles Map Display along with a bunch of controls and native gestures." ] }, { "section": "API Usage and Requirements", "statements": [ "The allowed SDK hits are described on the plans page. Note that your usage is shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] } ], "sourceSamples": [ { "language": "Objectivec", "label": "Objective C", "code": "MapplsAutoSuggestManager * autoSuggestManager = [MapplsAutoSuggestManager sharedManager];\n// or\nMapplsAutoSuggestManager *autoSuggestManager = [[MapplsAutoSuggestManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsAutoSearchAtlasOptions * autoSuggestOptions = [[MapplsAutoSearchAtlasOptions alloc] initWithQuery:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\nautoSuggestOptions.location = [[CLLocation alloc] initWithLatitude:28.2323234 longitude:72.3434123];\nautoSuggestOptions.zoom = [[NSNumber alloc] initWithInt:5];\n[autoSuggestManager getAutoSuggestionResultsWithOptions:autoSuggestOptions completionHandler:^(MapplsLocationResults * _Nullable locationResults, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (locationResults) {\n MapplsAutoSuggestLocationResults * results = (MapplsAutoSuggestLocationResults *) locationResults;\n if(results && results.suggestions) {\n for (MapplsAtlasSuggestion * suggestion in results.suggestions) {\n NSLog(@\"Auto Suggest %@%@\", suggestion.latitude, suggestion.longitude);\n }\n }\n if(results && results.suggestedSearches) {\n for (MapplsSearchPrediction * suggestion in results.suggestedSearches) {\n NSLog(@\"Auto Suggest %@\", suggestion.identifier);\n }\n }\n } else {\n NSLog(@\"No Results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let autoSuggestManager = MapplsAutoSuggestManager.shared\n//Or\nlet autoSuggestManager = MapplsAutoSuggestManager(restKey:\nMapplsAccountManager.restAPIKey(), clientId:\nMapplsAccountManager.atlasClientId(), clientSecret:\nMapplsAccountManager.atlasClientSecret(), grantType:\nMapplsAccountManager.atlasGrantType())\n\nlet autoSearchAtlasOptions = MapplsAutoSearchAtlasOptions(query: \"mmi000\",\nwithRegion: .india)\nautoSearchAtlasOptions.location = CLLocation(latitude: 28.2323234, longitude: 72.3434123)\nautoSearchAtlasOptions.zoom = 5\nautoSuggestManager.getAutoSuggestionResults(autoSearchAtlasOptions) { (locationResults, error) in\n if let error = error {\n print(\"error: \\(error.localizedDescription)\")\n } else if let locationResults = locationResults as? MapplsAutoSuggestLocationResults {\n if let suggestions = locationResults.suggestions {\n for suggestion in suggestions {\n print(\"suggestion: \\(suggestion.placeName)\")\n }\n }\n if let suggestions = locationResults.suggestedSearches {\n for suggestion in suggestions {\n print(\"suggestedSearches: \\(suggestion.identifier)\")\n }\n }\n } else {\n print(\"No Results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsReverseGeocodeManager * reverseGeocodeManager = [MapplsReverseGeocodeManager sharedManager];\n//Or\nMapplsReverseGeocodeManager * reverseGeocodeManager = [[MapplsReverseGeocodeManager alloc] initWithClientId:MapplsAccountManager.clientId clientSecret:MapplsAccountManager.clientSecret grantType:nil host:nil scheme:nil];\n \nMapplsReverseGeocodeOptions *revOptions = [[MapplsReverseGeocodeOptions alloc] initWithCoordinate:CLLocationCoordinate2DMake(28.553291, 77.258876) withRegion:MapplsRegionTypeIndia];\n \n[reverseGeocodeManager reverseGeocodeWithOptions:revOptions completionHandler:^(NSArray * _Nullable placemarks, NSString * _Nullable attribution, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (placemarks.count > 0) {\n NSLog(@\"Reverse Geocode %@\",\n placemarks[0].formattedAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let reverseGeocodeManager = MapplsReverseGeocodeManager.shared\n//Or\nlet reverseGeocodeManager = MapplsReverseGeocodeManager(clientId: MapplsAccountManager.clientId(), clientSecret: MapplsAccountManager.clientSecret())\n \nlet revOptions = MapplsReverseGeocodeOptions(coordinate: CLLocationCoordinate2D(latitude: 28.553291, longitude: 77.258876), withRegion: .india)\nreverseGeocodeManager.reverseGeocode(revOptions) { (placemarks, attribution, error) in\n if let error = error {\n print(\"%@\", error)\n } else if let placemarks = placemarks, !placemarks.isEmpty {\n print(\"Reverse Geocode: \\(placemarks[0].formattedAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Request Parameters", "code": "let filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [String,String])" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsNearByManager * nearByManager = [MapplsNearByManager sharedManager];\n//Or\nMapplsNearByManager * nearByManager = [[MapplsNearByManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n \nNSString *refLocation = @\"28.550667, 77.268959\";\n \nMapplsNearbyAtlasOptions *nearByOptions = [[MapplsNearbyAtlasOptions alloc] initWithQuery:@\"EV Charging\" location:refLocation withRegion:MapplsRegionTypeIndia];\n \n[nearByManager getNearBySuggestionsWithOptions:nearByOptions completionHandler:^(MapplsNearbyResult * _Nullable result, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (result.suggestions.count > 0) {\n NSLog(@\"Nearby %@\", result.suggestions[0].placeAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 85, "endpointCount": 35, "codeSampleCount": 14, "fingerprint": "fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927" }, "source": { "id": "public-mappls-api-kit-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:05:02Z", "fingerprint": "fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-api-kit-ios-distribution-base", "sourceGuide": "/reference/mappls-api-kit-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapmyIndia Intouch iOS SDK - Identity: `sdk-or-distribution:mapmyindia-intouch-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-intouch-ios-sdk - State model: stateful ```json { "slug": "mapmyindia-intouch-ios-sdk", "title": "MapmyIndia Intouch iOS SDK", "repository": "mapmyindia-intouch-ios-sdk", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateful", "summary": "A Mappls sdk for maps, tracking telematics, workforce, gis analytics, identity platform across iOS.", "platforms": [ "iOS" ], "languages": [ "Text" ], "productAreas": [ "maps", "tracking-telematics", "workforce", "gis-analytics", "identity-platform" ], "authSignals": [ "oauth2" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project" ], "installEvidence": [ { "section": "Setup a Project", "statements": [ "This guide allows you to add a live location tracking to an iOS app.", "Xcode IDE recommended Xcode 11.0 only.", "Step 1. Download the IntouchDemo App.", "to download the IntouchDemo App Project. And then open this project.", "NOTE:- This is only applicable in Demo app", "Step 2. Set your Publishable key / Project Initiation" ] }, { "section": "Setup a project", "statements": [ "1. Open Xcode Project. 2. Create a new project as follows: - Create New Application - Select Single Application - Select Next", "3. Enter your app name, project location,Bundle Indentifier language(Swift) and minimum API version as prompted. Then click Next.", "After this Xcode will contain two files viewcontroller& Appdelegate, Setting , StartBeacon", "4. Create Setting and Start Beacon Screen Through Storyboard(Reference demo app for this.)", "5. Go to framework and libraries option in General Settings of the project click on embeded and sign-in.", "6. In capabilities go to background mode it should be enabled background fetch,& location updates." ] }, { "section": "Initialize InTouch SDK", "statements": [ "Initialize the SDK with your Publishable Key" ] } ], "sourceSamples": [ { "language": "Text", "label": "Setup a Project", "code": "Drag and Drop the SampleTest-Bridging.h file (which is provided in the project) to your Briding Header in Build Setting of the project." }, { "language": "Text", "label": "Add following compulsory lines to your applications for Upload app on ", "code": "Drag and drop Strip-frameworks.sh file in project to run script in build phase.\nFile path is ------ bash \"yourStripFIlePath/strip-frameworks.sh\"" }, { "language": "Text", "label": "Add following compulsory lines to your applications for Upload app on ", "code": "func application(_ application: UIApplication,performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {\nOpenLocate.shared.performFetchWithCompletionHandler(completionHandler)\n}" }, { "language": "Text", "label": "Add your Publisher key in client Id and Client Secret and add deviceNa", "code": "Intouch.shared.intouchInitilization(clientID: \"YOUR_CLIENTID\", ClientSecret: \"YOUR_CLIENTSECRET\", successResponse: { (Success) in print(Success) }) { (error) in print(error?.localizedDescription) } }" }, { "language": "Text", "label": "Create device", "code": "Import CoreLocation\nImport beaconframework\n\nSet delegate UNUserNotificationCenterDelegate private let locationManager = CLLocationManager()\n\noverride func viewDidLoad() {\nsuper.viewDidLoad()\nif Intouch().shared.isTrackingEnabled {\nonStartTracking()\n}\n\nlocationManager.delegate = self \n\nprivate func storedAuthorizationStatus() -> CLAuthorizationStatus {\nlet authorizationStatusRaw = Int32(UserDefaults.standard.integer(forKey: \"AuthorizationStatus\"))\nreturn CLAuthorizationStatus(rawValue: authorizationStatusRaw) ?? .authorizedAlways\n}\n\nfunc locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {\nswitch status {\ncase .denied:\nself.showAlert(status: \"Denied\", msg: \"The user explicitly denied the use of location service for this app or location service are currently disabled in Settings\")\nreturn\ncase .restricted :\nself.showAlert(status: \"Restricted\", msg: \"The user has not yet made a choice regarding whether this app can use location services.\")\nreturn\ndefault:\nreturn\n}\n}" }, { "language": "Text", "label": "Call the below method to track your app user's phone live location. Ma", "code": "Intouch().StartTracking()" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 12, "endpointCount": 5, "codeSampleCount": 8, "fingerprint": "c2030b086830474b9201bba6c6f017f24ebd07b5fee338a41cf1301793fdcc43" }, "source": { "id": "public-mapmyindia-intouch-ios-sdk", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-ios-sdk", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-ios-sdk/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2021-07-16T11:02:24Z", "fingerprint": "c2030b086830474b9201bba6c6f017f24ebd07b5fee338a41cf1301793fdcc43", "freshness": "historical", "ageDays": 1858 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-ios-sdk", "name": "mapmyindia-intouch-ios-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-ios-sdk" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-intouch-ios-sdk", "sourceGuide": "/reference/mapmyindia-intouch-ios-sdk", "migrations": [ { "slug": "intouch-ios", "title": "InTouch iOS SDK lineage", "confidence": "direct-lineage", "href": "/migrate/intouch-ios" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mapmyindia Maps VectorSDK IOS - Identity: `sdk-or-distribution:mapmyindia-maps-vectorsdk-ios` - Canonical: https://developer.mappls.com/sdks/mapmyindia-maps-vectorsdk-ios - State model: stateless ```json { "slug": "mapmyindia-maps-vectorsdk-ios", "title": "Mapmyindia Maps VectorSDK IOS", "repository": "mapmyindia-maps-vectorSDK-iOS", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "MapmyIndia Vector Maps SDK for Native iOS Development with REST API Kit", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "api-key" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 5, "endpointCount": 9, "codeSampleCount": 0, "fingerprint": "f00fa5fbfcc4732a0506756860bb5118a8b53e2066b3be6e832d46f796d535f5" }, "source": { "id": "public-mapmyindia-maps-vectorsdk-ios", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS", "readmeUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2023-11-30T12:45:22Z", "fingerprint": "f00fa5fbfcc4732a0506756860bb5118a8b53e2066b3be6e832d46f796d535f5", "freshness": "historical", "ageDays": 991 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-bm21-mapmyindia-maps-vectorsdk-ios", "name": "mapmyindia-maps-vectorSDK-iOS", "relativePath": "contenthub/bm21/mapmyindia-maps-vectorSDK-iOS" }, { "id": "local-contenthub-dochub-mapmyindia-maps-vectorsdk-ios", "name": "mapmyindia-maps-vectorSDK-iOS", "relativePath": "contenthub/dochub/mapmyindia-maps-vectorSDK-iOS" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-maps-vectorsdk-ios", "sourceGuide": "/reference/mapmyindia-maps-vectorsdk-ios", "migrations": [ { "slug": "ios-map-packages", "title": "iOS map and API package lineage", "confidence": "direct-lineage", "href": "/migrate/ios-map-packages" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Annotation Extension for iOS - Identity: `sdk-or-distribution:mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-annotation-extension-ios-distribution - State model: stateless ```json { "slug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "repository": "mappls-annotation-extension-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Annotation Extension Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] } ], "sourceSamples": [ { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(centerMapplsPin: \"MMI000\", radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circleAnnotationController.add(circle)\n}" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circleGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"circle-radius\\\": \\\"50\\\",\\\"circle-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"circle-blur\\\": \\\"0\\\",\\\"circle-opacity\\\": \\\"0.7\\\",\\\"circle-stroke-width\\\": \\\"5\\\",\\\"circle-stroke-color\\\": \\\"rgba(0, 255, 0, 1)\\\",\\\"circle-stroke-opacity\\\": \\\"0.6\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [174.70458984375,-39.588757276965445]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n circleAnnotationController.create(fromGeoJSON: circleGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription) \n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else { \n print(\"No result found\") \n }\n }\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n \n let lineCoordinates = [\n CLLocationCoordinate2D(latitude: 59, longitude: 18),\n CLLocationCoordinate2D(latitude: 60, longitude: 20)\n ]\n \n let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))\n line.color = .purple\n lineAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "let lineGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"line-join\\\": \\\"bevel\\\",\\\"line-opacity\\\": \\\"0.7\\\",\\\"line-color\\\":\\\"rgba(0, 255, 0, 1)\\\",\\\"line-width\\\": \\\"10\\\",\\\"line-gap-width\\\": \\\"1\\\",\\\"line-offset\\\": \\\"2\\\",\\\"line-blur\\\": \\\"0\\\"},\\\"geometry\\\": {\\\"type\\\": \\\"LineString\\\",\\\"coordinates\\\": [[168.5302734375,-46.377254205100265],[169.0576171875,-46.36209301204983],[169.65087890625,-46.13417004624325],[170.5078125,-45.782848351976746],[170.68359375,-45.213003555993964],[170.79345703124997,-44.840290651397986],[171.2109375,-44.16644466445859],[171.84814453125,-43.80281871904721],[172.59521484375,-43.309191099856854],[172.83691406249997,-42.81152174509788],[173.38623046875,-42.342305278572816]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n\n lineAnnotationController.create(fromGeoJSON: lineGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54" }, "source": { "id": "public-mappls-annotation-extension-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-11T07:32:21Z", "fingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54", "freshness": "aging", "ageDays": 432 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-annotation-extension-ios-distribution", "sourceGuide": "/reference/mappls-annotation-extension-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Annotation Extension for iOS - Identity: `sdk-or-distribution:mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-annotation-extension-ios-distribution-base - State model: stateless ```json { "slug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "repository": "mappls-annotation-extension-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] } ], "sourceSamples": [ { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(centerMapplsPin: \"MMI000\", radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circleAnnotationController.add(circle)\n}" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circleGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"circle-radius\\\": \\\"50\\\",\\\"circle-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"circle-blur\\\": \\\"0\\\",\\\"circle-opacity\\\": \\\"0.7\\\",\\\"circle-stroke-width\\\": \\\"5\\\",\\\"circle-stroke-color\\\": \\\"rgba(0, 255, 0, 1)\\\",\\\"circle-stroke-opacity\\\": \\\"0.6\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [174.70458984375,-39.588757276965445]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n circleAnnotationController.create(fromGeoJSON: circleGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription) \n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else { \n print(\"No result found\") \n }\n }\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n \n let lineCoordinates = [\n CLLocationCoordinate2D(latitude: 59, longitude: 18),\n CLLocationCoordinate2D(latitude: 60, longitude: 20)\n ]\n \n let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))\n line.color = .purple\n lineAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "let lineGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"line-join\\\": \\\"bevel\\\",\\\"line-opacity\\\": \\\"0.7\\\",\\\"line-color\\\":\\\"rgba(0, 255, 0, 1)\\\",\\\"line-width\\\": \\\"10\\\",\\\"line-gap-width\\\": \\\"1\\\",\\\"line-offset\\\": \\\"2\\\",\\\"line-blur\\\": \\\"0\\\"},\\\"geometry\\\": {\\\"type\\\": \\\"LineString\\\",\\\"coordinates\\\": [[168.5302734375,-46.377254205100265],[169.0576171875,-46.36209301204983],[169.65087890625,-46.13417004624325],[170.5078125,-45.782848351976746],[170.68359375,-45.213003555993964],[170.79345703124997,-44.840290651397986],[171.2109375,-44.16644466445859],[171.84814453125,-43.80281871904721],[172.59521484375,-43.309191099856854],[172.83691406249997,-42.81152174509788],[173.38623046875,-42.342305278572816]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n\n lineAnnotationController.create(fromGeoJSON: lineGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54" }, "source": { "id": "public-mappls-annotation-extension-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T06:30:06Z", "fingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-annotation-extension-ios-distribution-base", "sourceGuide": "/reference/mappls-annotation-extension-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Intouch IOS Distribution - Identity: `sdk-or-distribution:mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-ios-distribution - State model: stateful ```json { "slug": "mappls-intouch-ios-distribution", "title": "Mappls Intouch IOS Distribution", "repository": "mappls-intouch-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateful", "summary": "Mappls Intouch iOS Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "tracking-telematics" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": false, "readmeAvailable": false, "headingCount": 0, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c" }, "source": { "id": "public-mappls-intouch-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution", "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-05-20T06:43:25Z", "fingerprint": "9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c", "freshness": "aging", "ageDays": 454 }, "correspondence": { "matchQuality": "normalized", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-ios-sdk", "name": "mapmyindia-intouch-ios-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-ios-sdk" } ] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-intouch-ios-distribution", "sourceGuide": "/reference/mappls-intouch-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Intouch IOS Distribution Base - Identity: `sdk-or-distribution:mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-ios-distribution-base - State model: stateful ```json { "slug": "mappls-intouch-ios-distribution-base", "title": "Mappls Intouch IOS Distribution Base", "repository": "mappls-intouch-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateful", "summary": "A versioned iOS distribution package used to integrate tracking telematics into an application.", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "tracking-telematics" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": false, "readmeAvailable": false, "headingCount": 0, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" }, "source": { "id": "public-mappls-intouch-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution-base", "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-08-12T11:38:55Z", "fingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-intouch-ios-distribution-base", "sourceGuide": "/reference/mappls-intouch-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls iOS SDK - Identity: `sdk-or-distribution:mappls-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-ios-sdk - State model: stateless ```json { "slug": "mappls-ios-sdk", "title": "Mappls iOS SDK", "repository": "mappls-ios-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "A collection of Mappls's Map and others SDKs for Native iOS Development.", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "static-key-2025", "oauth2" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 6, "endpointCount": 22, "codeSampleCount": 0, "fingerprint": "3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce" }, "source": { "id": "public-mappls-ios-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-ios-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-ios-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T08:39:20Z", "fingerprint": "3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-ios-sdk", "sourceGuide": "/reference/mappls-ios-sdk", "migrations": [ { "slug": "ios-map-packages", "title": "iOS map and API package lineage", "confidence": "direct-lineage", "href": "/migrate/ios-map-packages" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls LMS IOS Distribution - Identity: `sdk-or-distribution:mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-lms-ios-distribution - State model: stateless ```json { "slug": "mappls-lms-ios-distribution", "title": "Mappls LMS IOS Distribution", "repository": "mappls-lms-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate Mappls capabilities into an application.", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "other" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": false, "headingCount": 0, "endpointCount": 2, "codeSampleCount": 0, "fingerprint": "a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9" }, "source": { "id": "public-mappls-lms-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution/blob/main/Package.swift", "defaultBranch": "main", "pushedAt": "2026-08-05T12:18:11Z", "fingerprint": "a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9", "freshness": "active", "ageDays": 12 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-lms-ios-distribution", "sourceGuide": "/reference/mappls-lms-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls LMS IOS Distribution Base - Identity: `sdk-or-distribution:mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-lms-ios-distribution-base - State model: stateless ```json { "slug": "mappls-lms-ios-distribution-base", "title": "Mappls LMS IOS Distribution Base", "repository": "mappls-lms-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate Mappls capabilities into an application.", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "other" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": false, "headingCount": 0, "endpointCount": 1, "codeSampleCount": 0, "fingerprint": "c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9" }, "source": { "id": "public-mappls-lms-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base/blob/main/Package.swift", "defaultBranch": "main", "pushedAt": "2026-08-05T12:16:54Z", "fingerprint": "c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9", "freshness": "active", "ageDays": 12 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-lms-ios-distribution-base", "sourceGuide": "/reference/mappls-lms-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Location Capture IOS SDK - Identity: `sdk-or-distribution:mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-location-capture-ios-sdk - State model: hybrid ```json { "slug": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK", "repository": "mappls-location-capture-ios-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "hybrid", "summary": "A Mappls sdk for capture feedback across iOS.", "platforms": [ "iOS" ], "languages": [], "productAreas": [ "capture-feedback" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": false, "readmeAvailable": false, "headingCount": 0, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" }, "source": { "id": "public-mappls-location-capture-ios-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-location-capture-ios-sdk", "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-12-19T11:57:47Z", "fingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", "freshness": "aging", "ageDays": 241 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-location-capture-ios-sdk", "sourceGuide": "/reference/mappls-location-capture-ios-sdk", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Location Capture SDK (iOS) - Identity: `sdk-or-distribution:mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-location-capture-sdk-ios-distribution - State model: hybrid ```json { "slug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "repository": "mappls-location-capture-sdk-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "A versioned iOS distribution package used to integrate tracking telematics, workforce, capture feedback into an application.", "platforms": [ "iOS" ], "languages": [ "XML", "Swift" ], "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "A lightweight, on-demand location capture SDK for iOS that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage.", "The SDK supports single-shot and subscribed location fetching without continuous tracking." ] }, { "section": "SDK Configuration (Optional)", "statements": [ "After initialization, configuration can be customized if allowed by server policy:" ] } ], "sourceSamples": [ { "language": "Text", "label": "Using Swift Package Manager (SPM)", "code": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution.git" }, { "language": "XML", "label": "Permissions (Required)", "code": "NSLocationWhenInUseUsageDescription\nLocation is required to capture your current position." }, { "language": "Swift", "label": "Initialization (Required)", "code": "LocationServiceProviderManager.shared.initialize() { result in\n switch result {\n case .success:\n print(\"SDK Initialized successfully\")\n case .failure(let error):\n print(\"Initialization failed:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "SDK Configuration (Optional)", "code": "try LocationServiceProviderManager.shared.configure(\n retryMode: .single, // .single or .subscribe\n timeout: 60, // seconds\n accuracy: 15, // meters\n distance: 0, // meters\n maxPacketSize: 5 // applicable for subscribe mode\n)" }, { "language": "Swift", "label": "1. Single-Shot Location Fetch", "code": "LocationServiceProviderManager.shared.getOneTimeLocation { result in\n switch result {\n case .success(let event):\n print(\"\"\"\n Location:\n lat=\\(event.latitude),\n lng=\\(event.longitude),\n accuracy=\\(event.horizontalAccuracy),\n acceptable=\\(event.isAccpectable),\n mock=\\(event.isMockLocation)\n \"\"\")\n case .failure(let error):\n print(\"Error:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "2. Subscribed Location Fetch (Limited)", "code": "try LocationServiceProviderManager.shared.configure(\n retryMode: .subscribe,\n maxPacketSize: 5\n)\n\nLocationServiceProviderManager.shared.subscribeLocationUpdate { result in\n switch result {\n case .success(let event):\n print(\"Location update:\", event)\n case .failure(let error):\n print(\"Stopped:\", error.localizedDescription)\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 20, "endpointCount": 1, "codeSampleCount": 8, "fingerprint": "aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9" }, "source": { "id": "public-mappls-location-capture-sdk-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-02-05T13:00:29Z", "fingerprint": "aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9", "freshness": "aging", "ageDays": 193 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-location-capture-sdk-ios-distribution", "sourceGuide": "/reference/mappls-location-capture-sdk-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Nearby Search Widget for iOS - Identity: `sdk-or-distribution:mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-ui-ios-distribution - State model: stateless ```json { "slug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "repository": "mappls-nearby-ui-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Nearby UI Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMap - MapplsUIWidgets" ] } ], "sourceSamples": [ { "language": "Swift", "label": "MapplsNearbyCategoriesViewController", "code": "let nearbyUI = MapplsNearbyCategoriesViewController()\nself.navigationController?.pushViewController(nearbyUI, animated: false)" }, { "language": "Swift", "label": "Properties of MapplsNearbyCategoriesViewController", "code": "var nearbyCategories = [MapplsNearbyCategories]()\n\n let selectedImage = UIImage(named: \"placePickerMarker\")?.withRenderingMode(.alwaysTemplate)\n let categoriesImage = UIImage(named: \"Coffee\")\n\n let coffeeCategory = MapplsNearbyCategories(title: \"Coffee\", selectedBackgroundColor: selectedColor, unselectedBackgroundColor: .white, selectedImage: selectedImage ?? UIImage(), unselectedImage: selectedImage ?? UIImage(), unselectedTextColor: .black, selectedTextColor: .white, isSelected: true, categoryKeywords: [\"FODCOF\"], mapNearbyCategoryIcon: categoriesImage)\n\n nearbyCategories.append(coffeeCategory)\n\n nearbyUI.nearbyCategories = nearbyCategories" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method which will be called when the user click next button in `MapplsNearbyCategoriesViewController` class\n /// - Parameters:\n /// - refLocation: It is location selected from place picker or your current location or location provided by used as refLocation.\n /// - selectedCategories: It is the array of `MapplsNearbyCategories` items selected from the categories\n /// - error: This will show an error message in case of any failure in `MapplsNearbyCategoriesViewController` class on next button clicked.\n \n func didNextButtonClicked(refLocation: String?, selectedCategories: [MapplsNearbyCategories]?, error: String? )" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby icon is taped on the map. It will return a nearby response for the taped icon.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbyIcon(place: MapplsAtlasSuggestion)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby result in ListView is tapped. It will return a nearby response for the tapped item.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbySuggestionFromTable(place: MapplsAtlasSuggestion)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 24, "codeSampleCount": 5, "fingerprint": "139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f" }, "source": { "id": "public-mappls-nearby-ui-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-09T09:20:10Z", "fingerprint": "139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f", "freshness": "aging", "ageDays": 434 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-nearby-ui-ios-distribution", "sourceGuide": "/reference/mappls-nearby-ui-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Nearby Search Widget for iOS - Identity: `sdk-or-distribution:mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-ui-ios-distribution-base - State model: stateless ```json { "slug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "repository": "mappls-nearby-ui-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library requires the following dependencies:", "• MapplsAPICore - MapplsAPIKit - MapplsLMS - MapplsMap - MapplsUIWidgets", "Please ensure these packages are added to your project." ] } ], "sourceSamples": [ { "language": "Swift", "label": "MapplsNearbyCategoriesViewController", "code": "let nearbyUI = MapplsNearbyCategoriesViewController()\nself.navigationController?.pushViewController(nearbyUI, animated: false)" }, { "language": "Swift", "label": "Properties of MapplsNearbyCategoriesViewController", "code": "var nearbyCategories = [MapplsNearbyCategories]()\n\n let selectedImage = UIImage(named: \"placePickerMarker\")?.withRenderingMode(.alwaysTemplate)\n let categoriesImage = UIImage(named: \"Coffee\")\n\n let coffeeCategory = MapplsNearbyCategories(title: \"Coffee\", selectedBackgroundColor: selectedColor, unselectedBackgroundColor: .white, selectedImage: selectedImage ?? UIImage(), unselectedImage: selectedImage ?? UIImage(), unselectedTextColor: .black, selectedTextColor: .white, isSelected: true, categoryKeywords: [\"FODCOF\"], mapNearbyCategoryIcon: categoriesImage)\n\n nearbyCategories.append(coffeeCategory)\n\n nearbyUI.nearbyCategories = nearbyCategories" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method which will be called when the user click next button in `MapplsNearbyCategoriesViewController` class\n /// - Parameters:\n /// - refLocation: It is location selected from place picker or your current location or location provided by used as refLocation.\n /// - selectedCategories: It is the array of `MapplsNearbyCategories` items selected from the categories\n /// - error: This will show an error message in case of any failure in `MapplsNearbyCategoriesViewController` class on next button clicked.\n \n func didNextButtonClicked(refLocation: String?, selectedCategories: [MapplsNearbyCategories]?, error: String? )" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby icon is taped on the map. It will return a nearby response for the taped icon.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbyIcon(place: MapplsAtlasSuggestion)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby result in ListView is tapped. It will return a nearby response for the tapped item.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbySuggestionFromTable(place: MapplsAtlasSuggestion)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 25, "codeSampleCount": 5, "fingerprint": "97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347" }, "source": { "id": "public-mappls-nearby-ui-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-14T10:23:13Z", "fingerprint": "97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347", "freshness": "aging", "ageDays": 368 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-nearby-ui-ios-distribution-base", "sourceGuide": "/reference/mappls-nearby-ui-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsCamera SDK for iOS - Identity: `sdk-or-distribution:mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-camera-ios-distribution - State model: stateless ```json { "slug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "repository": "mappls-camera-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, offline automotive, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "authSignals": [ "api-key", "signed-request" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using Swift Package Manager.", "Below are list of dependencies which are required to run this SDK: - MapplsAPICore - Authorization and Authentcation - MapplsAPIKit - Core API functionality - MapplsMap - Map display and location services" ] }, { "section": "Requirements", "statements": [ "• iOS: 13.0 or higher - Xcode: 14.0 or higher - Mappls API Keys: You must have a valid Mappls API key to use the location and mapping features" ] }, { "section": "Option 2: Configuration Presets", "statements": [ "Pre-built configurations for common use cases:", "| Method | Description | Use Case | | basic() | Default settings | Quick start | | photoOnly() | Photo mode only | Image documentation | | videoOnly() | Video mode only | Video surveys | | highAccuracy() | Requires GPS ≤10m | Precision mapping | | fieldSurvey() | All metadata + grid | Field work | | qrScanner() | QR code mode | Asset tracking | | highQuality() | 4K, max quality | Professional use | | minimalUI() | Hidden controls | Embedded use | | privacyFocused() | Minimal metadata | Privacy apps |" ] }, { "section": "Configuration API Reference", "statements": [ "MapplsCameraViewController provides a wide range of properties to customize the capture experience." ] }, { "section": "General Configuration", "statements": [ "| Property | Type | Default | Description | | minimumAccuracyMetres | Float | 50.0 | Minimum GPS accuracy required to allow capture | | blockCaptureOnPoorAccuracy | Bool | false | If true, prevents capture when accuracy is worse than threshold | | saveToDeviceGallery | Bool | true | Automatically save captured media to the iOS Photo Library | | enablePinchToZoom | Bool | true | Enable or disable the pinch-to-zoom gesture | | maxZoomFactor | Float | 8.0 | Maximum zoom level allowed |" ] } ], "sourceSamples": [ { "language": "Text", "label": "Swift Package Manager", "code": "https://github.com/mappls-api/mappls-camera-ios-distribution.git" }, { "language": "Swift", "label": "1. Import the SDK", "code": "import MapplsCamera" }, { "language": "Swift", "label": "2. Initialize and Present", "code": "let cameraVC = MapplsCameraViewController()\ncameraVC.cameraDelegate = self\ncameraVC.modalPresentationStyle = .fullScreen\nself.present(cameraVC, animated: true)" }, { "language": "Swift", "label": "3. Implement the Delegate", "code": "extension YourViewController: MapplsCameraDelegate {\n func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {\n print(\"Captured image at: \\(result.filePath)\")\n print(\"Location: \\(result.latitude), \\(result.longitude)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {\n print(\"Recorded video at: \\(result.filePath)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {\n // Handle real-time location updates\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {\n // Handle nearby places/PINs\n }\n\n\n}" }, { "language": "Swift", "label": "Option 1: Use Sample Library", "code": "import MapplsCamera\nimport MapplsCameraSample\n\n// Use the sample view controller\nlet sampleVC = SampleCameraViewController()\npresent(sampleVC, animated: true)\n\n// Or use configuration presets\nlet cameraVC = CameraConfigurations.photoOnly()\ncameraVC.cameraDelegate = self\npresent(cameraVC, animated: true)" }, { "language": "Swift", "label": "Error Handling", "code": "func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n switch error {\n case .cameraPermissionDenied:\n // Handle no camera access\n case .locationPermissionDenied:\n // Handle no location access\n case .poorAccuracy:\n // GPS accuracy was below minimumAccuracyMetres threshold\n default:\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 33, "endpointCount": 23, "codeSampleCount": 6, "fingerprint": "5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50" }, "source": { "id": "public-mappls-camera-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:06:25Z", "fingerprint": "5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-camera-ios-distribution", "sourceGuide": "/reference/mappls-camera-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsCamera SDK for iOS - Identity: `sdk-or-distribution:mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/sdks/mappls-camera-sdk-ios - State model: stateless ```json { "slug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "repository": "mappls-camera-sdk-ios", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "A Mappls sdk for maps, search places, tracking telematics, offline automotive, capture feedback, identity platform across iOS.", "platforms": [ "iOS" ], "languages": [ "Swift" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "authSignals": [ "api-key", "signed-request" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [ { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using Swift Package Manager.", "Below are list of dependencies which are required to run this SDK: - MapplsAPICore - Authorization and Authentcation - MapplsAPIKit - Core API functionality - MapplsMap - Map display and location services" ] }, { "section": "Requirements", "statements": [ "• iOS: 13.0 or higher - Xcode: 14.0 or higher - Mappls API Keys: You must have a valid Mappls API key to use the location and mapping features" ] }, { "section": "Option 2: Configuration Presets", "statements": [ "Pre-built configurations for common use cases:", "| Method | Description | Use Case | | basic() | Default settings | Quick start | | photoOnly() | Photo mode only | Image documentation | | videoOnly() | Video mode only | Video surveys | | highAccuracy() | Requires GPS ≤10m | Precision mapping | | fieldSurvey() | All metadata + grid | Field work | | qrScanner() | QR code mode | Asset tracking | | highQuality() | 4K, max quality | Professional use | | minimalUI() | Hidden controls | Embedded use | | privacyFocused() | Minimal metadata | Privacy apps |" ] }, { "section": "Configuration API Reference", "statements": [ "MapplsCameraViewController provides a wide range of properties to customize the capture experience." ] }, { "section": "General Configuration", "statements": [ "| Property | Type | Default | Description | | minimumAccuracyMetres | Float | 50.0 | Minimum GPS accuracy required to allow capture | | blockCaptureOnPoorAccuracy | Bool | false | If true, prevents capture when accuracy is worse than threshold | | saveToDeviceGallery | Bool | true | Automatically save captured media to the iOS Photo Library | | enablePinchToZoom | Bool | true | Enable or disable the pinch-to-zoom gesture | | maxZoomFactor | Float | 8.0 | Maximum zoom level allowed |" ] } ], "sourceSamples": [ { "language": "Text", "label": "Swift Package Manager", "code": "https://github.com/mappls-api/mappls-camera-ios-distribution.git" }, { "language": "Swift", "label": "1. Import the SDK", "code": "import MapplsCamera" }, { "language": "Swift", "label": "2. Initialize and Present", "code": "let cameraVC = MapplsCameraViewController()\ncameraVC.cameraDelegate = self\ncameraVC.modalPresentationStyle = .fullScreen\nself.present(cameraVC, animated: true)" }, { "language": "Swift", "label": "3. Implement the Delegate", "code": "extension YourViewController: MapplsCameraDelegate {\n func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {\n print(\"Captured image at: \\(result.filePath)\")\n print(\"Location: \\(result.latitude), \\(result.longitude)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {\n print(\"Recorded video at: \\(result.filePath)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {\n // Handle real-time location updates\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {\n // Handle nearby places/PINs\n }\n\n\n}" }, { "language": "Swift", "label": "Option 1: Use Sample Library", "code": "import MapplsCamera\nimport MapplsCameraSample\n\n// Use the sample view controller\nlet sampleVC = SampleCameraViewController()\npresent(sampleVC, animated: true)\n\n// Or use configuration presets\nlet cameraVC = CameraConfigurations.photoOnly()\ncameraVC.cameraDelegate = self\npresent(cameraVC, animated: true)" }, { "language": "Swift", "label": "Error Handling", "code": "func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n switch error {\n case .cameraPermissionDenied:\n // Handle no camera access\n case .locationPermissionDenied:\n // Handle no location access\n case .poorAccuracy:\n // GPS accuracy was below minimumAccuracyMetres threshold\n default:\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n}" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 33, "endpointCount": 23, "codeSampleCount": 6, "fingerprint": "be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302" }, "source": { "id": "public-mappls-camera-sdk-ios", "repositoryUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios", "readmeUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:07:18Z", "fingerprint": "be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-camera-sdk-ios", "sourceGuide": "/reference/mappls-camera-sdk-ios", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsDirectionUI for iOS - Identity: `sdk-or-distribution:mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-direction-ui-ios-distribution - State model: hybrid ```json { "slug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "repository": "mappls-direction-ui-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "Mappls Direction UI Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Objective-C", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps - MapplsUIWidgets" ] }, { "section": "Configuration", "statements": [ "Here are the properties use to configure MapplsDirectionViewController route.", "##### Profile Identifier It is instance of enum DirectionsProfileIdentifier which can accepts values driving, walking, biking, trucking. By default its value is driving.", "##### Resource Identifier It is instance of enum DirectionsResourceIdentifier which can accepts values routeAdv, routeETA. By default its value is routeAdv.", "Note: To use RouteETA ‘resourceIdentifier’ should be routeETA and ‘profileIdentifier’ should be driving. In response of RouteETA a unique identifier to that request will be received which can be get using parameter routeIdentifier of object Route.", "##### AttributeOptions AttributeOptions for the route. Any combination of AttributeOptions can be specified. By default, no attribute options are specified.", "##### IncludesAlternativeRoutes A Boolean value indicating whether alternative routes should be included in the response. The default value of this property is true." ] } ], "sourceSamples": [ { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "let directionVC = MapplsDirectionViewController(for: [MapplsDirectionLocation]())\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "var locationModels = [MapplsDirectionLocation]()\nlet source = MapplsDirectionLocation(location: \"77.2639,28.5354\", displayName: \"Govindpuri\", displayAddress: \"\", locationType: .suggestion)\n \nlet viaPoint = MapplsDirectionLocation(location: \"12269L\", displayName: \"Sitamarhi\", displayAddress: \"\", locationType: .suggestion)\n \nlet destination = MapplsDirectionLocation(location: \"1T182A\", displayName: \"Majorganj\", displayAddress: \"\", locationType: .suggestion)\n \nself.locationModels.append(source)\nself.locationModels.append(viaPoint)\nself.locationModels.append(destination)\nlet directionVC = MapplsDirectionViewController(for: self.locationModels)\ndirectionVC.profileIdentifier = .driving\ndirectionVC.attributationOptions = [.congestionLevel]\ndirectionVC.resourceIdentifier = .routeETA\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "MapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]init];\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];\n\nOR\n\nMapplsDirectionLocation* source = [[MapplsDirectionLocation alloc] initWithLocation:@\"78.00,28.00\" displayName:@\"haridwar\" displayAddress:@\"\" locationType:0];\nMapplsDirectionLocation* destination = [[MapplsDirectionLocation alloc] initWithLocation:@\"1T182A\" displayName:@\"Majorganj\" displayAddress:@\"\" locationType:1];\n\nNSArray* locations = [[NSArray alloc] initWithObjects:current,destination, nil];\n\nMapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]initFor:locations style:nil];\n\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowDrivingModeSelector = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowRouteReportSummary = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowTollCostEstimation = false" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 19, "codeSampleCount": 14, "fingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878" }, "source": { "id": "public-mappls-direction-ui-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-09T10:37:21Z", "fingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878", "freshness": "aging", "ageDays": 434 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-direction-ui-ios-distribution", "sourceGuide": "/reference/mappls-direction-ui-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsDirectionUI for iOS - Identity: `sdk-or-distribution:mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-direction-ui-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "repository": "mappls-direction-ui-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Objective-C", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps - MapplsUIWidgets" ] }, { "section": "Configuration", "statements": [ "Here are the properties use to configure MapplsDirectionViewController route.", "##### Profile Identifier It is instance of enum DirectionsProfileIdentifier which can accepts values driving, walking, biking, trucking. By default its value is driving.", "##### Resource Identifier It is instance of enum DirectionsResourceIdentifier which can accepts values routeAdv, routeETA. By default its value is routeAdv.", "Note: To use RouteETA ‘resourceIdentifier’ should be routeETA and ‘profileIdentifier’ should be driving. In response of RouteETA a unique identifier to that request will be received which can be get using parameter routeIdentifier of object Route.", "##### AttributeOptions AttributeOptions for the route. Any combination of AttributeOptions can be specified. By default, no attribute options are specified.", "##### IncludesAlternativeRoutes A Boolean value indicating whether alternative routes should be included in the response. The default value of this property is true." ] } ], "sourceSamples": [ { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "let directionVC = MapplsDirectionViewController(for: [MapplsDirectionLocation]())\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "var locationModels = [MapplsDirectionLocation]()\nlet source = MapplsDirectionLocation(location: \"77.2639,28.5354\", displayName: \"Govindpuri\", displayAddress: \"\", locationType: .suggestion)\n \nlet viaPoint = MapplsDirectionLocation(location: \"12269L\", displayName: \"Sitamarhi\", displayAddress: \"\", locationType: .suggestion)\n \nlet destination = MapplsDirectionLocation(location: \"1T182A\", displayName: \"Majorganj\", displayAddress: \"\", locationType: .suggestion)\n \nself.locationModels.append(source)\nself.locationModels.append(viaPoint)\nself.locationModels.append(destination)\nlet directionVC = MapplsDirectionViewController(for: self.locationModels)\ndirectionVC.profileIdentifier = .driving\ndirectionVC.attributationOptions = [.congestionLevel]\ndirectionVC.resourceIdentifier = .routeETA\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "MapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]init];\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];\n\nOR\n\nMapplsDirectionLocation* source = [[MapplsDirectionLocation alloc] initWithLocation:@\"78.00,28.00\" displayName:@\"haridwar\" displayAddress:@\"\" locationType:0];\nMapplsDirectionLocation* destination = [[MapplsDirectionLocation alloc] initWithLocation:@\"1T182A\" displayName:@\"Majorganj\" displayAddress:@\"\" locationType:1];\n\nNSArray* locations = [[NSArray alloc] initWithObjects:current,destination, nil];\n\nMapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]initFor:locations style:nil];\n\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowDrivingModeSelector = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowRouteReportSummary = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowTollCostEstimation = false" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 19, "codeSampleCount": 14, "fingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878" }, "source": { "id": "public-mappls-direction-ui-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-14T10:28:33Z", "fingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878", "freshness": "aging", "ageDays": 368 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-direction-ui-ios-distribution-base", "sourceGuide": "/reference/mappls-direction-ui-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsDrivingRangePlugin for iOS - Identity: `sdk-or-distribution:mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-drivingrange-plugin-ios-distribution - State model: stateless ```json { "slug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "repository": "mappls-drivingrange-plugin-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Driving Range Plugin Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPIKit - MapplsMap" ] } ], "sourceSamples": [ { "language": "Swift", "label": "MapplsDrivingRangePlugin", "code": "var drivingRangePlugin = MapplsDrivingRange(mapView: self.mapView)\n\nself.drivingRangePlugin.delegate = self // optional" }, { "language": "Swift", "label": "Get And Plot Driving Range", "code": "let location = CLLocation(latitude: 28.551060, longitude: 77.268989)\n \nlet contours = [MapplsDrivingRangeContours(value: 2)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .distance, contours: contours)\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "Clear Driving Range", "code": "drivingRangePlugin.clearDrivingRangeFromMap()" }, { "language": "Swift", "label": "Update Driving Range", "code": "let location = CLLocation(latitude: 28.612972, longitude: 77.233529)\n \nlet contours = [MapplsDrivingRangeContour(value: 15)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .time, contours: contours)\n \nlet speedInfo = MapplsDrivingRangeOptimalSpeed()\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo, speedTypeInfo: speedInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "code": "optional func drivingRange(_ plugin: MapplsDrivingRange, didFailToGetAndPlotDrivingRange error: Error)" }, { "language": "Text", "label": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "code": "@objc optional func drivingRangeDidSuccessToGetAndPlotDrivingRange(_ plugin: MapplsDrivingRange)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 18, "codeSampleCount": 6, "fingerprint": "ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3" }, "source": { "id": "public-mappls-drivingrange-plugin-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T12:01:43Z", "fingerprint": "ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3", "freshness": "aging", "ageDays": 433 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-drivingrange-plugin-ios-distribution", "sourceGuide": "/reference/mappls-drivingrange-plugin-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsDrivingRangePlugin for iOS - Identity: `sdk-or-distribution:mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-drivingrange-plugin-ios-distribution-base - State model: stateless ```json { "slug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS", "repository": "mappls-drivingrange-plugin-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library requires the following dependencies:", "• MapplsAPICore - MapplsAPIKit - MapplsMap", "Please ensure these packages are added to your project." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPIKit - MapplsMap" ] } ], "sourceSamples": [ { "language": "Swift", "label": "MapplsDrivingRangePlugin", "code": "var drivingRangePlugin = MapplsDrivingRange(mapView: self.mapView)\n\nself.drivingRangePlugin.delegate = self // optional" }, { "language": "Swift", "label": "Get And Plot Driving Range", "code": "let location = CLLocation(latitude: 28.551060, longitude: 77.268989)\n \nlet contours = [MapplsDrivingRangeContours(value: 2)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .distance, contours: contours)\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "Clear Driving Range", "code": "drivingRangePlugin.clearDrivingRangeFromMap()" }, { "language": "Swift", "label": "Update Driving Range", "code": "let location = CLLocation(latitude: 28.612972, longitude: 77.233529)\n \nlet contours = [MapplsDrivingRangeContour(value: 15)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .time, contours: contours)\n \nlet speedInfo = MapplsDrivingRangeOptimalSpeed()\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo, speedTypeInfo: speedInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "code": "optional func drivingRange(_ plugin: MapplsDrivingRange, didFailToGetAndPlotDrivingRange error: Error)" }, { "language": "Text", "label": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "code": "@objc optional func drivingRangeDidSuccessToGetAndPlotDrivingRange(_ plugin: MapplsDrivingRange)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 19, "endpointCount": 21, "codeSampleCount": 6, "fingerprint": "d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9" }, "source": { "id": "public-mappls-drivingrange-plugin-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T10:35:11Z", "fingerprint": "d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-drivingrange-plugin-ios-distribution-base", "sourceGuide": "/reference/mappls-drivingrange-plugin-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsFeedbackKit for iOS - Identity: `sdk-or-distribution:mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-kit-ios-distribution - State model: hybrid ```json { "slug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "repository": "mappls-feedback-kit-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "Mappls Feedback Kit Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Get Report Categories", "code": "MapplsFeedBackKitManager.shared.getReportCategories { (reportCategories, error) in\n if let error = error {\n print(error.localizedDescription)\n self.dismiss(animated: true, completion: nil)\n } else {\n let categories = reportCategories ?? [ParentCategories]()\n if categories.count > 0 {\n self.allReportCategories = categories\n print(self.allReportCategories.first?.id)\n self.currentStep = 1\n } else {\n print(\"No report categories found\")\n self.dismiss(animated: true, completion: nil)\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "let saveOptions = MapplsSaveUserDataOptions(location: \"MMI000\", parentCategory: parentCategory.id ?? 0, childCategory: childCategory.id ?? 0, description: \"This is descriptions\", subChildCategory: self.selectedSubChildCategories?.id, accuracy: 3)\n\nMapplsSaveUserDataAPIManager.shared.saveUserData(saveOptions, { (isSucess, error) in\n\n if let error = error {\n print(error.localizedDescription)\n } else if isSucess {\n print(\"feedback submited successfully\")\n self.dismiss(animated: true, completion: nil)\n } else {\n print(\"No results\")\n }\n})" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackSubmit), name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackFailed), name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchSuccess), name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchFailed), name: .reportCategoriesFetchFailedNotification, object: nil)" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.removeObserver(self, name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchFailedNotification, object: nil)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 12, "endpointCount": 19, "codeSampleCount": 4, "fingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db" }, "source": { "id": "public-mappls-feedback-kit-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T09:43:26Z", "fingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db", "freshness": "aging", "ageDays": 433 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-feedback-kit-ios-distribution", "sourceGuide": "/reference/mappls-feedback-kit-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsFeedbackKit for iOS - Identity: `sdk-or-distribution:mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-kit-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "repository": "mappls-feedback-kit-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "A versioned iOS distribution package used to integrate search places, tracking telematics, widgets deep links, offline automotive, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Get Report Categories", "code": "MapplsFeedBackKitManager.shared.getReportCategories { (reportCategories, error) in\n if let error = error {\n print(error.localizedDescription)\n self.dismiss(animated: true, completion: nil)\n } else {\n let categories = reportCategories ?? [ParentCategories]()\n if categories.count > 0 {\n self.allReportCategories = categories\n print(self.allReportCategories.first?.id)\n self.currentStep = 1\n } else {\n print(\"No report categories found\")\n self.dismiss(animated: true, completion: nil)\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "let saveOptions = MapplsSaveUserDataOptions(location: \"MMI000\", parentCategory: parentCategory.id ?? 0, childCategory: childCategory.id ?? 0, description: \"This is descriptions\", subChildCategory: self.selectedSubChildCategories?.id, accuracy: 3)\n\nMapplsSaveUserDataAPIManager.shared.saveUserData(saveOptions, { (isSucess, error) in\n\n if let error = error {\n print(error.localizedDescription)\n } else if isSucess {\n print(\"feedback submited successfully\")\n self.dismiss(animated: true, completion: nil)\n } else {\n print(\"No results\")\n }\n})" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackSubmit), name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackFailed), name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchSuccess), name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchFailed), name: .reportCategoriesFetchFailedNotification, object: nil)" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.removeObserver(self, name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchFailedNotification, object: nil)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 12, "endpointCount": 19, "codeSampleCount": 4, "fingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db" }, "source": { "id": "public-mappls-feedback-kit-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T07:56:22Z", "fingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-feedback-kit-ios-distribution-base", "sourceGuide": "/reference/mappls-feedback-kit-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsFeedbackUIKit for iOS - Identity: `sdk-or-distribution:mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-uikit-ios-distribution - State model: hybrid ```json { "slug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "repository": "mappls-feedback-uikit-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "Mappls Feedback UI Kit Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Present Navigation Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .night)\n\nself.present(navVC, animated: true, completion: nil)" }, { "language": "Swift", "label": "Push Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .auto)\n navVC.modalPresentationStyle = .fullScreen\nself.navigationController?.pushViewController(navVC, animated: true)" }, { "language": "Swift", "label": "Theme", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude), theme: MapplsFeedbackTheme.auto)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 19, "codeSampleCount": 3, "fingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688" }, "source": { "id": "public-mappls-feedback-uikit-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T10:19:46Z", "fingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688", "freshness": "aging", "ageDays": 433 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-feedback-uikit-ios-distribution", "sourceGuide": "/reference/mappls-feedback-uikit-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsFeedbackUIKit for iOS - Identity: `sdk-or-distribution:mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-uikit-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS", "repository": "mappls-feedback-uikit-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Present Navigation Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .night)\n\nself.present(navVC, animated: true, completion: nil)" }, { "language": "Swift", "label": "Push Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .auto)\n navVC.modalPresentationStyle = .fullScreen\nself.navigationController?.pushViewController(navVC, animated: true)" }, { "language": "Swift", "label": "Theme", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude), theme: MapplsFeedbackTheme.auto)" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 19, "codeSampleCount": 3, "fingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688" }, "source": { "id": "public-mappls-feedback-uikit-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T07:40:43Z", "fingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-feedback-uikit-ios-distribution-base", "sourceGuide": "/reference/mappls-feedback-uikit-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsGeoanalytics Plugin for iOS - Identity: `sdk-or-distribution:mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-geoanalytics-ios-distribution - State model: stateless ```json { "slug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "repository": "mappls-geoanalytics-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Geoanalytics Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] } ], "sourceSamples": [ { "language": "Swift", "label": "Initialization MapplsGeoanalyticsPlugin", "code": "var geoanalyticsPlugin : MapplsGeoanalyticsPlugin = MapplsGeoanalyticsPlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 1 - Get GeoAnalytics layers", "code": "let apperenceState = GeoanalyticsLayerAppearance()\napperenceState.fillColor = \"42a5f4\"\napperenceState.fillOpacity = \"0.5\"\napperenceState.labelColor = \"000000\"\napperenceState.labelSize = \"10\"\napperenceState.strokeColor = \"000000\"\napperenceState.strokeWidth = \"0\"\n \nlet geoboundArray = [MapplsGeoanalyticsGeobound(geobound: \"HARYANA\", appearance: apperenceState), MapplsGeoanalyticsGeobound(geobound: \"UTTAR PRADESH\", appearance: apperenceState),MapplsGeoanalyticsGeobound(geobound: \"KERALA\", appearance: apperenceState)]\n \nlet layerRequestState = MapplsGeoanalyticsLayerRequest(geoboundType: \"stt_nme\", geobound: geoboundArray, propertyName: [\"stt_nme\",\"stt_id\",\"t_p\"], layerType: .state)\n\nlayerRequestState.attribute = \"t_p\";\nlayerRequestState.query = \">0\";\nlayerRequestState.transparent = true;" }, { "language": "Swift", "label": "Step 2 - Adding GeoAnalytics layer on Map", "code": "self.geoanalyticsPlugin.showGeoanalyticsLayer(layerRequestState)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.removeGeoanalyticsLayer(layerRequestState))" }, { "language": "Swift", "label": "Other Methods Available:", "code": "func didGetFeatureInfoResponse(_ featureInfoResponse:GeoanalyticsGetFeatureInfoResponse) {\n print(featureInfoResponse.features)\n}" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.shouldShowPopupForGeoanalyticsLayer = true" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 24, "endpointCount": 24, "codeSampleCount": 9, "fingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a" }, "source": { "id": "public-mappls-geoanalytics-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-11T12:19:50Z", "fingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a", "freshness": "aging", "ageDays": 432 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-geoanalytics-ios-distribution", "sourceGuide": "/reference/mappls-geoanalytics-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsGeoanalytics Plugin for iOS - Identity: `sdk-or-distribution:mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-geoanalytics-ios-distribution-base - State model: stateless ```json { "slug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "repository": "mappls-geoanalytics-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Geoanalytics Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] } ], "sourceSamples": [ { "language": "Swift", "label": "Initialization MapplsGeoanalyticsPlugin", "code": "var geoanalyticsPlugin : MapplsGeoanalyticsPlugin = MapplsGeoanalyticsPlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 1 - Get GeoAnalytics layers", "code": "let apperenceState = GeoanalyticsLayerAppearance()\napperenceState.fillColor = \"42a5f4\"\napperenceState.fillOpacity = \"0.5\"\napperenceState.labelColor = \"000000\"\napperenceState.labelSize = \"10\"\napperenceState.strokeColor = \"000000\"\napperenceState.strokeWidth = \"0\"\n \nlet geoboundArray = [MapplsGeoanalyticsGeobound(geobound: \"HARYANA\", appearance: apperenceState), MapplsGeoanalyticsGeobound(geobound: \"UTTAR PRADESH\", appearance: apperenceState),MapplsGeoanalyticsGeobound(geobound: \"KERALA\", appearance: apperenceState)]\n \nlet layerRequestState = MapplsGeoanalyticsLayerRequest(geoboundType: \"stt_nme\", geobound: geoboundArray, propertyName: [\"stt_nme\",\"stt_id\",\"t_p\"], layerType: .state)\n\nlayerRequestState.attribute = \"t_p\";\nlayerRequestState.query = \">0\";\nlayerRequestState.transparent = true;" }, { "language": "Swift", "label": "Step 2 - Adding GeoAnalytics layer on Map", "code": "self.geoanalyticsPlugin.showGeoanalyticsLayer(layerRequestState)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.removeGeoanalyticsLayer(layerRequestState))" }, { "language": "Swift", "label": "Other Methods Available:", "code": "func didGetFeatureInfoResponse(_ featureInfoResponse:GeoanalyticsGetFeatureInfoResponse) {\n print(featureInfoResponse.features)\n}" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.shouldShowPopupForGeoanalyticsLayer = true" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 24, "endpointCount": 24, "codeSampleCount": 9, "fingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a" }, "source": { "id": "public-mappls-geoanalytics-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T06:18:16Z", "fingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-geoanalytics-ios-distribution-base", "sourceGuide": "/reference/mappls-geoanalytics-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsGeofenceUI Plugin for iOS - Identity: `sdk-or-distribution:mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-geofence-ui-ios-distribution - State model: hybrid ```json { "slug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS", "repository": "mappls-geofence-ui-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "Mappls Geofence UI Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Anyone can integrate the Mappls Geofence Plugin by following simple steps.Please note that this Plugin for iOS supports iOS SDK 9.0 and above.", "To integrate Geofence SDK, it is important to pass an object of MapplsMapView which is part of Mappls's MapplsMap SDK." ] }, { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "import MapplsMap\nimport MapplsGeofenceUI\nvar geofenceView: MapplsGeofenceView!\n override func viewDidLoad() {\n super.viewDidLoad()\n // If you're on a background thread and want to execute code on the main thread, you need to call async()\n DispatchQueue.main.async {\nlet geofenceInstance: MapplsGeofenceView = {\ngeofenceView = MapplsGeofenceView.init(geofenceframe: self.view.bounds)\ngeofenceView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n return geofenceView\n}()\ngeofenceInstance.delegate = self\nself.view.addSubview(geofenceInstance)\n}\n}" }, { "language": "Text", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "geofenceInstance.delegate = self" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.setMode(mode: .circle)" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultSliderForCircle = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultModePanel = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDefaultImage = UIImage(named: \"\")" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc" }, "source": { "id": "public-mappls-geofence-ui-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T10:55:54Z", "fingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc", "freshness": "aging", "ageDays": 433 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-geofence-ui-ios-distribution", "sourceGuide": "/reference/mappls-geofence-ui-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsGeofenceUI Plugin for iOS - Identity: `sdk-or-distribution:mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-geofence-ui-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS", "repository": "mappls-geofence-ui-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Anyone can integrate the Mappls Geofence Plugin by following simple steps.Please note that this Plugin for iOS supports iOS SDK 9.0 and above.", "To integrate Geofence SDK, it is important to pass an object of MapplsMapView which is part of Mappls's MapplsMap SDK." ] }, { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "import MapplsMap\nimport MapplsGeofenceUI\nvar geofenceView: MapplsGeofenceView!\n override func viewDidLoad() {\n super.viewDidLoad()\n // If you're on a background thread and want to execute code on the main thread, you need to call async()\n DispatchQueue.main.async {\nlet geofenceInstance: MapplsGeofenceView = {\ngeofenceView = MapplsGeofenceView.init(geofenceframe: self.view.bounds)\ngeofenceView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n return geofenceView\n}()\ngeofenceInstance.delegate = self\nself.view.addSubview(geofenceInstance)\n}\n}" }, { "language": "Text", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "geofenceInstance.delegate = self" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.setMode(mode: .circle)" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultSliderForCircle = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultModePanel = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDefaultImage = UIImage(named: \"\")" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc" }, "source": { "id": "public-mappls-geofence-ui-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T07:26:09Z", "fingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-geofence-ui-ios-distribution-base", "sourceGuide": "/reference/mappls-geofence-ui-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsRasterCatalogue Plugin for iOS - Identity: `sdk-or-distribution:mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-raster-catalogue-ios-distribution - State model: stateless ```json { "slug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "repository": "mappls-raster-catalogue-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "Mappls Raster Catalogue Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] } ], "sourceSamples": [ { "language": "Swift", "label": "Initialization MapplsRasterCatalogue Plugin", "code": "var rasterCataloguePlugin : MapplsRasterCataloguePlugin = MapplsRasterCataloguePlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 2 - Adding RasterCatalogue layer on Map", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\nself.rasterCataloguePlugin.addRasterCatalogueLayer(request)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\ngeoanalyticsPlugin.removeRasterCatalogueLayer(layerRequestState))" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 23, "codeSampleCount": 3, "fingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a" }, "source": { "id": "public-mappls-raster-catalogue-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-11T09:32:44Z", "fingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a", "freshness": "aging", "ageDays": 432 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-raster-catalogue-ios-distribution", "sourceGuide": "/reference/mappls-raster-catalogue-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsRasterCatalogue Plugin for iOS - Identity: `sdk-or-distribution:mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-raster-catalogue-ios-distribution-base - State model: stateless ```json { "slug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "repository": "mappls-raster-catalogue-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "stateless", "summary": "A versioned iOS distribution package used to integrate maps, tracking telematics, gis analytics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] } ], "sourceSamples": [ { "language": "Swift", "label": "Initialization MapplsRasterCatalogue Plugin", "code": "var rasterCataloguePlugin : MapplsRasterCataloguePlugin = MapplsRasterCataloguePlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 2 - Adding RasterCatalogue layer on Map", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\nself.rasterCataloguePlugin.addRasterCatalogueLayer(request)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\ngeoanalyticsPlugin.removeRasterCatalogueLayer(layerRequestState))" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 23, "codeSampleCount": 3, "fingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a" }, "source": { "id": "public-mappls-raster-catalogue-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T09:01:22Z", "fingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a", "freshness": "aging", "ageDays": 370 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-raster-catalogue-ios-distribution-base", "sourceGuide": "/reference/mappls-raster-catalogue-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsUIWidgets - UI Components SDK for iOS - Identity: `sdk-or-distribution:mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-ui-widget-ios-distribution - State model: hybrid ```json { "slug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "repository": "mappls-ui-widget-ios-distribution", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "Mappls UI Widget Native for iOS distributed via the SPM (Swift Package Manager).", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMap - MapplsUIWidgets" ] }, { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore, MapplsAPIKit, MapplsMap. All dependent libraries will be automatically." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Add a full-screen control", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n override func viewDidLoad() {\n makeButton()\n }\n\n // Present the Autocomplete view controller when the button is pressed.\n @objc func autocompleteClicked(_ sender: UIButton) {\n let autocompleteController = MapplsAutocompleteViewController(theme: .auto)\n autocompleteController.delegate = self\n\n // Specify a filter.\n let filter = MapplsAutocompleteFilter()\n autocompleteController.autocompleteFilter = filter\n\n // Display the autocomplete view controller.\n present(autocompleteController, animated: true, completion: nil)\n }\n\n // Add a button to the view.\n func makeButton() {\n let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35))\n btnLaunchAc.backgroundColor = .blue\n btnLaunchAc.setTitle(\"Launch autocomplete\", for: .normal)\n btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside)\n self.view.addSubview(btnLaunchAc)\n }\n\n}\n\nextension ViewController: MapplsAutocompleteViewControllerDelegate {\n\n // Handle the user's selection.\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n dismiss(animated: true, completion: nil)\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n \n func didRequestForAutoSearchOptions(options: MapplsAutoSearchAtlasOptions) -> MapplsAutoSearchAtlasOptions {\n return options\n }\n \n func didRequestForTextSearchOptions(options: MapplsTextSearchAtlasOptions) -> MapplsTextSearchAtlasOptions {\n return options\n }\n\n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // User canceled the operation.\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n dismiss(animated: true, completion: nil)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIWrapper: UIViewControllerRepresentable {\n ...\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Environment(\\.presentationMode) var presentationMode\n\n func makeUIViewController(context: UIViewControllerRepresentableContext) -> MapplsAutocompleteViewController {\n let autocompleteViewController = MapplsAutocompleteViewController() \n autocompleteViewController.delegate = context.coordinator\n return autocompleteViewController\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func updateUIViewController(_ uiViewController: MapplsAutocompleteViewController, context: UIViewControllerRepresentableContext) {\n\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Binding var placeSuggestion: MapplsAtlasSuggestion?" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIView: View {\n @Binding var placeSuggestion: MapplsAtlasSuggestion?\n \n var body: some View {\n MapplsAutocompleteViewControllerSwiftUIWrapper(placeSuggestion: $placeSuggestion)\n .navigationBarHidden(true)\n }\n }" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 30, "endpointCount": 29, "codeSampleCount": 14, "fingerprint": "fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349" }, "source": { "id": "public-mappls-ui-widget-ios-distribution", "repositoryUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-04-01T12:41:15Z", "fingerprint": "fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349", "freshness": "active", "ageDays": 138 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-ui-widget-ios-distribution", "sourceGuide": "/reference/mappls-ui-widget-ios-distribution", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapplsUIWidgets - UI Components SDK for iOS - Identity: `sdk-or-distribution:mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-ui-widget-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "repository": "mappls-ui-widget-ios-distribution-base", "surface": "binary-distribution", "maturity": "distribution", "readiness": "entitlement-and-compatibility-review", "stateModel": "hybrid", "summary": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "platforms": [ "iOS" ], "languages": [ "Swift", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Dependencies", "statements": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMap" ] }, { "section": "Installation", "statements": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "section": "Dependencies", "statements": [ "This library depends upon MapplsAPICore, MapplsAPIKit, MapplsMap. All dependent libraries will be automatically." ] } ], "sourceSamples": [ { "language": "Swift", "label": "Add a full-screen control", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n override func viewDidLoad() {\n makeButton()\n }\n\n // Present the Autocomplete view controller when the button is pressed.\n @objc func autocompleteClicked(_ sender: UIButton) {\n let autocompleteController = MapplsAutocompleteViewController(theme: .auto)\n autocompleteController.delegate = self\n\n // Specify a filter.\n let filter = MapplsAutocompleteFilter()\n autocompleteController.autocompleteFilter = filter\n\n // Display the autocomplete view controller.\n present(autocompleteController, animated: true, completion: nil)\n }\n\n // Add a button to the view.\n func makeButton() {\n let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35))\n btnLaunchAc.backgroundColor = .blue\n btnLaunchAc.setTitle(\"Launch autocomplete\", for: .normal)\n btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside)\n self.view.addSubview(btnLaunchAc)\n }\n\n}\n\nextension ViewController: MapplsAutocompleteViewControllerDelegate {\n\n // Handle the user's selection.\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n dismiss(animated: true, completion: nil)\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n \n func didRequestForAutoSearchOptions(options: MapplsAutoSearchAtlasOptions) -> MapplsAutoSearchAtlasOptions {\n return options\n }\n \n func didRequestForTextSearchOptions(options: MapplsTextSearchAtlasOptions) -> MapplsTextSearchAtlasOptions {\n return options\n }\n\n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // User canceled the operation.\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n dismiss(animated: true, completion: nil)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIWrapper: UIViewControllerRepresentable {\n ...\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Environment(\\.presentationMode) var presentationMode\n\n func makeUIViewController(context: UIViewControllerRepresentableContext) -> MapplsAutocompleteViewController {\n let autocompleteViewController = MapplsAutocompleteViewController() \n autocompleteViewController.delegate = context.coordinator\n return autocompleteViewController\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func updateUIViewController(_ uiViewController: MapplsAutocompleteViewController, context: UIViewControllerRepresentableContext) {\n\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Binding var placeSuggestion: MapplsAtlasSuggestion?" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIView: View {\n @Binding var placeSuggestion: MapplsAtlasSuggestion?\n \n var body: some View {\n MapplsAutocompleteViewControllerSwiftUIWrapper(placeSuggestion: $placeSuggestion)\n .navigationBarHidden(true)\n }\n }" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 30, "endpointCount": 28, "codeSampleCount": 14, "fingerprint": "e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22" }, "source": { "id": "public-mappls-ui-widget-ios-distribution-base", "repositoryUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-27T11:37:42Z", "fingerprint": "e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22", "freshness": "active", "ageDays": 21 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "compatibility-review", "action": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-ui-widget-ios-distribution-base", "sourceGuide": "/reference/mappls-ui-widget-ios-distribution-base", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "ios-native", "title": "Create a lifecycle-safe iOS map", "platform": "iOS", "href": "/quickstart/ios-native" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mapmyindia Intouch React Native SDK - Identity: `sdk-or-distribution:mapmyindia-intouch-react-native-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-intouch-react-native-sdk - State model: stateful ```json { "slug": "mapmyindia-intouch-react-native-sdk", "title": "Mapmyindia Intouch React Native SDK", "repository": "mapmyindia-intouch-react-native-sdk", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateful", "summary": "A Mappls sdk for tracking telematics, workforce, gis analytics, identity platform across React Native.", "platforms": [ "React Native" ], "languages": [ "Groovy", "Text", "JavaScript" ], "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "identity-platform" ], "authSignals": [ "oauth2" ], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project" ], "installEvidence": [ { "section": "Setup", "statements": [ "We use your Client ID to identify your account details and assign all your user's devices under a single account.", "To get your Outh2 Rest API Client ID and Client Secret please login to MapmyIndia API Dashboard", "Please contact apisupport@mapmyindia.com to get InTouch SDK access to your Client ID", "After getting the access, you can start with the InTouchDemo app, or Integrate the InTouch SDK in your app." ] }, { "section": "Getting started", "statements": [ "Install the below mentioned library in your project.", "npm install mapmyindia-intouch-react-native-sdk --save", "• If using React-native<0.60 react-native link mapmyindia-intouch-react-native-sdk" ] }, { "section": "Installation", "statements": [ "For Android and Ios add the below mentioned lines" ] }, { "section": "Step 3: Initialize Intouch SDK", "statements": [ "Initialize the SDK with your Client ID and Client Secret and device name.Device name helps to identify the user on Portal." ] } ], "sourceSamples": [ { "language": "Groovy", "label": "Android", "code": "allprojects {\n repositories {\n mavenLocal()\n maven {\n// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n url(\"$rootDir/../node_modules/react-native/android\")\n }\n maven {\n // Android JSC is installed from npm\n url(\"$rootDir/../node_modules/jsc-android/dist\")\n }\n\n \n+ maven { url 'https://maven.mapmyindia.com/repository/mapmyindia/'}\n\n google()\n jcenter()\n maven { url 'https://www.jitpack.io' }\n\n }\n\n}" }, { "language": "Groovy", "label": "Android", "code": "defaultConfig {\n\napplicationId \"com.intouch_react_native_sample\"\n\nminSdkVersion rootProject.ext.minSdkVersion\n\ntargetSdkVersion rootProject.ext.targetSdkVersion\n\nversionCode 1\n\nversionName \"1.0\"\n\n+ multiDexEnabled true\n\n}" }, { "language": "JavaScript", "label": "Step 1: Import Intouch SDK", "code": "import MapmyIndiaIntouch from 'mapmyindia-intouch-react-native-sdk';" }, { "language": "JavaScript", "label": "Step 2. Check if Intouch SDK is already initialized", "code": "const status = await MapmyIndiaIntouch.isInitialized();" }, { "language": "JavaScript", "label": "Step 3: Initialize Intouch SDK", "code": "MapmyIndiaIntouch.initialize(deviceName,clientId,clientSecret)\n .then(entityId => {\n console.log(entityId);\n }).catch(err=>{\n console.log(err.message)\n });" }, { "language": "JavaScript", "label": "Step 4: Check if Intouch SDK is already running", "code": "const status = await MapmyIndiaIntouch.isRunning()" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 27, "endpointCount": 17, "codeSampleCount": 10, "fingerprint": "5308f84765ed33f994e7e78369adc761b1bbbb8b5fe6678f28705b9200d8ff2c" }, "source": { "id": "public-mapmyindia-intouch-react-native-sdk", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-react-native-sdk", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-react-native-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-11-21T06:19:08Z", "fingerprint": "5308f84765ed33f994e7e78369adc761b1bbbb8b5fe6678f28705b9200d8ff2c", "freshness": "aging", "ageDays": 634 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-react-native-sdk", "name": "mapmyindia-intouch-react-native-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-react-native-sdk" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-intouch-react-native-sdk", "sourceGuide": "/reference/mapmyindia-intouch-react-native-sdk", "migrations": [ { "slug": "intouch-react-native", "title": "InTouch React Native bridge lineage", "confidence": "direct-lineage", "href": "/migrate/intouch-react-native" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "platform": "React Native", "href": "/quickstart/react-native-map" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mapmyindia REST API SDK for React Native - beta - Identity: `sdk-or-distribution:mapmyindia-restapi-react-native-beta` - Canonical: https://developer.mappls.com/sdks/mapmyindia-restapi-react-native-beta - State model: stateless ```json { "slug": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "repository": "mapmyindia-restapi-react-native-beta", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "A Mappls sdk for maps, search places, routes navigation, gis analytics, identity platform across React Native.", "platforms": [ "React Native" ], "languages": [ "JavaScript", "Text" ], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "identity-platform" ], "authSignals": [ "oauth2", "api-key", "licensed-entitlement" ], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "installEvidence": [ { "section": "Getting started", "statements": [ "$ npm install mapmyindia-restapi-react-native-beta --save", "If you are using React-Native < 0.60.0 then you have to follow additional steps which are below" ] }, { "section": "Mostly automatic installation", "statements": [ "$ react-native link mapmyindia-restapi-react-native-beta" ] }, { "section": "Place Detail with Sub Template based Configuration", "statements": [ "The API is highly configurable to configuration enables to provide the required set of attributes to the user on the basis of assigned sub templates. The default configuration with available with basic pay-as-you-go rates is that of General Details subtemplate." ] } ], "sourceSamples": [ { "language": "Text", "label": "Android", "code": "include ':mapmyindia-restapi-react-native-beta'\n\nproject(':mapmyindia-restapi-react-native-beta').projectDir = new File(rootProject.projectDir, '../node_modules/mapmyindia-restapi-react-native-beta/android')" }, { "language": "Text", "label": "Android", "code": "compile project(':mapmyindia-restapi-react-native-beta')" }, { "language": "JavaScript", "label": "Usage", "code": "import Mapmyindia from 'mapmyindia-restapi-react-native-beta';" }, { "language": "JavaScript", "label": "Methods", "code": "Mapmyindia.setRestApiKey('YOUR_CREDENTIAL');\n\nMapmyindia.setClientId('YOUR_CREDENTIAL');\n\nMapmyindia.setClientSecret('YOUR_CREDENTIAL');" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.place_details({eLoc: 'MMI000'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.atlas_auto({query: 'agr'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 39, "endpointCount": 17, "codeSampleCount": 14, "fingerprint": "88351f5dd3543307cc34f7f99746a315b6c2cadb2984b17ae2207e7c295cf020" }, "source": { "id": "public-mapmyindia-restapi-react-native-beta", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-restapi-react-native-beta", "readmeUrl": "https://github.com/mappls-api/mapmyindia-restapi-react-native-beta/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2021-04-15T12:32:27Z", "fingerprint": "88351f5dd3543307cc34f7f99746a315b6c2cadb2984b17ae2207e7c295cf020", "freshness": "historical", "ageDays": 1950 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-restapi-react-native-beta", "name": "mapmyindia-restapi-react-native-beta", "relativePath": "contenthub/dochub/mapmyindia-restapi-react-native-beta" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-restapi-react-native-beta", "sourceGuide": "/reference/mapmyindia-restapi-react-native-beta", "migrations": [ { "slug": "react-native-maps", "title": "React Native maps and REST wrappers", "confidence": "direct-lineage", "href": "/migrate/react-native-maps" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "platform": "React Native", "href": "/quickstart/react-native-map" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Intouch React Native SDK - Identity: `sdk-or-distribution:mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-react-native-intouch-sdk - State model: stateful ```json { "slug": "mappls-react-native-intouch-sdk", "title": "Mappls Intouch React Native SDK", "repository": "mappls-react-native-intouch-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateful", "summary": "This SDK is wrapper for ReactNative on Native SDKs (IntouchCore, IntouchAPI) to support on Android and iOS.", "platforms": [ "React Native" ], "languages": [], "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "authSignals": [], "prerequisites": [ "A React Native project with both native build environments" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 19, "codeSampleCount": 0, "fingerprint": "cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69" }, "source": { "id": "public-mappls-react-native-intouch-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-05-19T12:12:31Z", "fingerprint": "cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69", "freshness": "active", "ageDays": 90 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-react-native-intouch-sdk", "sourceGuide": "/reference/mappls-react-native-intouch-sdk", "migrations": [ { "slug": "intouch-react-native", "title": "InTouch React Native bridge lineage", "confidence": "direct-lineage", "href": "/migrate/intouch-react-native" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "platform": "React Native", "href": "/quickstart/react-native-map" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls React Native SDK - Identity: `sdk-or-distribution:mappls-react-native-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-react-native-sdk - State model: stateless ```json { "slug": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "repository": "mappls-react-native-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "A Mappls sdk for maps, search places, routes navigation, tracking telematics, gis analytics, widgets deep links, capture feedback, identity platform across React Native.", "platforms": [ "React Native" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4" }, "source": { "id": "public-mappls-react-native-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-react-native-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-react-native-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T08:56:55Z", "fingerprint": "2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4", "freshness": "active", "ageDays": 13 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-react-native-sdk", "sourceGuide": "/reference/mappls-react-native-sdk", "migrations": [ { "slug": "cordova-ionic-exit", "title": "Cordova and Ionic: stabilize, then migrate by journey", "confidence": "selection-required", "href": "/migrate/cordova-ionic-exit" }, { "slug": "react-native-maps", "title": "React Native maps and REST wrappers", "confidence": "direct-lineage", "href": "/migrate/react-native-maps" } ], "exactQuickstarts": [ { "slug": "react-native-map", "title": "Bridge one map feature across Android and iOS", "platform": "React Native", "href": "/quickstart/react-native-map" } ], "adjacentPlatformQuickstarts": [], "starterKits": [ { "slug": "react-native-map-starter", "name": "React Native bridge-contract starter", "platform": "React Native", "downloadPath": "/downloads/starter-kits/react-native-map-starter.zip", "href": "/starter-kits/react-native-map-starter" } ] } } ``` ## sdk-or-distribution · Mapmyindia Places N Directions Web SDK - Identity: `sdk-or-distribution:mapmyindia-places-n-directions-web-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-places-n-directions-web-sdk - State model: stateless ```json { "slug": "mapmyindia-places-n-directions-web-sdk", "title": "Mapmyindia Places N Directions Web SDK", "repository": "mapmyindia-places-n-directions-web-sdk", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "MapmyIndia Places and Directions Library for Web SDKs provided by MapmyIndia. This library is compatible with both our Web SDKs - Vector Maps & our legacy Raster Maps.", "platforms": [ "Web" ], "languages": [], "productAreas": [ "other" ], "authSignals": [], "prerequisites": [ "A browser application and an allowed development origin" ], "installEvidence": [], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 1, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "e0e524cc3bae1b1f7ce99e2b2047d548c03a23525fcd5eb900a339dbbfe71836" }, "source": { "id": "public-mapmyindia-places-n-directions-web-sdk", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-places-n-directions-web-sdk", "readmeUrl": "https://github.com/mappls-api/mapmyindia-places-n-directions-web-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2023-11-30T12:50:12Z", "fingerprint": "e0e524cc3bae1b1f7ce99e2b2047d548c03a23525fcd5eb900a339dbbfe71836", "freshness": "historical", "ageDays": 991 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-places-n-directions-web-sdk", "name": "mapmyindia-places-n-directions-web-sdk", "relativePath": "contenthub/dochub/mapmyindia-places-n-directions-web-sdk" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-places-n-directions-web-sdk", "sourceGuide": "/reference/mapmyindia-places-n-directions-web-sdk", "migrations": [ { "slug": "web-maps-and-plugins", "title": "Web maps and plugins: legacy scripts to a governed browser boundary", "confidence": "adjacent-evidence", "href": "/migrate/web-maps-and-plugins" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "web-map", "title": "Render one accessible web map", "platform": "Web", "href": "/quickstart/web-map" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mapmyindia Vector Maps JS Web SDK - Identity: `sdk-or-distribution:mapmyindia-vector-maps-js-web-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-vector-maps-js-web-sdk - State model: stateless ```json { "slug": "mapmyindia-vector-maps-js-web-sdk", "title": "Mapmyindia Vector Maps JS Web SDK", "repository": "mapmyindia-vector-maps-js-web-SDK", "surface": "source-sdk", "maturity": "deprecated", "readiness": "do-not-start", "stateModel": "stateless", "summary": "MapmyIndia's Latest Vector Maps Web SDK for rendering beautifully interactive, fluid maps that are powered by browser based WebGL.", "platforms": [ "Web" ], "languages": [ "HTML", "Text", "JavaScript" ], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links" ], "authSignals": [ "api-key" ], "prerequisites": [ "A browser application and an allowed development origin", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Now that you’re all caught up with the features let’s get down right to them and look at how can you integrate our Interactive Map to your Website from scratch." ] } ], "sourceSamples": [ { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "
;" }, { "language": "JavaScript", "label": "Adding the Map Script to your web page", "code": "map = new Mappls.Map('map', {center:{lat:28.612964,lng:77.229463} });" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "\n \n Hello, World\n \n \n \n \n \n \n
\n \n \n " }, { "language": "JavaScript", "label": "Method to add marker on map", "code": "var marker = new Mappls.Marker({\n map: map,\n position: {\"lat\": 28.519467,\"lng\":77.223150}\n\t});" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 31, "endpointCount": 56, "codeSampleCount": 14, "fingerprint": "717e4087b4ad49db7f6cefc0f98d65108c00dbc1e70cc692d750e190c9831e76" }, "source": { "id": "public-mapmyindia-vector-maps-js-web-sdk", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK", "readmeUrl": "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2023-11-30T12:43:38Z", "fingerprint": "717e4087b4ad49db7f6cefc0f98d65108c00dbc1e70cc692d750e190c9831e76", "freshness": "historical", "ageDays": 991 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-vector-maps-js-web-sdk", "name": "mapmyindia-vector-maps-js-web-SDK", "relativePath": "contenthub/dochub/mapmyindia-vector-maps-js-web-SDK" } ] }, "compatibility": { "releaseRisk": "retire", "action": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-vector-maps-js-web-sdk", "sourceGuide": "/reference/mapmyindia-vector-maps-js-web-sdk", "migrations": [ { "slug": "web-maps-and-plugins", "title": "Web maps and plugins: legacy scripts to a governed browser boundary", "confidence": "adjacent-evidence", "href": "/migrate/web-maps-and-plugins" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "web-map", "title": "Render one accessible web map", "platform": "Web", "href": "/quickstart/web-map" } ], "starterKits": [] } } ``` ## sdk-or-distribution · Mappls Insight Embeddable Visualizations - Identity: `sdk-or-distribution:mappls-insight-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-insight-sdk - State model: stateless ```json { "slug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "repository": "mappls-insight-sdk", "surface": "source-sdk", "maturity": "current", "readiness": "source-ready-after-validation", "stateModel": "stateless", "summary": "Mappls advanced analytics engine: Insight transforms raw data into impactful visualizations and interactive dashboards, easily shared and embedded.", "platforms": [ "Web" ], "languages": [ "HTML" ], "productAreas": [ "gis-analytics", "offline-automotive", "capture-feedback", "identity-platform" ], "authSignals": [ "oauth2" ], "prerequisites": [ "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project" ], "installEvidence": [], "sourceSamples": [ { "language": "HTML", "label": "Sample code for Insight Dashboard", "code": "\n\n\n\n\n

Insight Iframes

\n

You can use the iframe to embed your created dashboards:

\n\n \n\n\n\n" } ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 20, "codeSampleCount": 1, "fingerprint": "0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898" }, "source": { "id": "public-mappls-insight-sdk", "repositoryUrl": "https://github.com/mappls-api/mappls-insight-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-insight-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-05-03T10:20:13Z", "fingerprint": "0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898", "freshness": "historical", "ageDays": 836 }, "correspondence": { "matchQuality": "unmatched", "localCandidates": [] }, "compatibility": { "releaseRisk": "standard-review", "action": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mappls-insight-sdk", "sourceGuide": "/reference/mappls-insight-sdk", "migrations": [], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "web-map", "title": "Render one accessible web map", "platform": "Web", "href": "/quickstart/web-map" } ], "starterKits": [] } } ``` ## sdk-or-distribution · MapmyIndia Interactive Map JS API ! - Identity: `sdk-or-distribution:mapmyindia-interactive-map-js-api` - Canonical: https://developer.mappls.com/sdks/mapmyindia-interactive-map-js-api - State model: stateless ```json { "slug": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "repository": "mapmyindia-interactive-map-js-api", "surface": "source-sdk", "maturity": "legacy", "readiness": "migration-required", "stateModel": "stateless", "summary": "Integrate Map APIs to visualize maps, accurate directions, geo-coding and traffic flow", "platforms": [ "Web", "REST" ], "languages": [], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links" ], "authSignals": [ "api-key" ], "prerequisites": [ "A browser application and an allowed development origin", "A trusted backend or API client capable of HTTPS requests", "A Mappls project key restricted to the intended app, domain, or backend" ], "installEvidence": [ { "section": "Getting Started", "statements": [ "Now that you’re all caught up with the features let’s get down right to them and look at how can you integrate our Interactive Map to your Website from scratch." ] } ], "sourceSamples": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 20, "endpointCount": 39, "codeSampleCount": 0, "fingerprint": "d41c7d998fba044ff84206f64e197928707ef64fd2e005dd1076828836c1fe93" }, "source": { "id": "public-mapmyindia-interactive-map-js-api", "repositoryUrl": "https://github.com/mappls-api/mapmyindia-interactive-map-js-api", "readmeUrl": "https://github.com/mappls-api/mapmyindia-interactive-map-js-api/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-02-11T11:57:22Z", "fingerprint": "d41c7d998fba044ff84206f64e197928707ef64fd2e005dd1076828836c1fe93", "freshness": "historical", "ageDays": 1648 }, "correspondence": { "matchQuality": "exact", "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-interactive-map-js-api", "name": "mapmyindia-interactive-map-js-api", "relativePath": "contenthub/dochub/mapmyindia-interactive-map-js-api" } ] }, "compatibility": { "releaseRisk": "migration-required", "action": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "evidenceBoundary": "Repository content, activity, code fragments, and local correspondence are discovery evidence only. They do not establish a supported package coordinate, binary identity, current version, account entitlement, runtime pairing, production compatibility, or approval.", "productionChecks": [ "Confirm the exact package or artifact identifier and version with the owning Mappls product team; a repository name is not a package contract.", "Verify platform toolchain, operating-system, architecture, host-application, and transitive-dependency compatibility from a clean build.", "Bind only the documented credential class and restriction to its intended client or trusted-server runtime; never commit or log a secret.", "Verify account entitlement, region, quota, endpoint generation, data rights, and applicable commercial terms independently.", "Exercise initialization, ready, denied, empty, offline, timeout, cancellation, background/resume, and teardown paths.", "Pin dependency and native artifact integrity evidence; retain source fingerprint, selected version, lockfile, build provenance, and approving owner.", "For stateful or hybrid behavior, persist application state outside the SDK and prove idempotency, reconciliation, audit, privacy, and recovery.", "Release by a bounded cohort with observable rollback; repository activity or a successful fixture is never production compatibility evidence." ] }, "links": { "detail": "/sdks/mapmyindia-interactive-map-js-api", "sourceGuide": "/reference/mapmyindia-interactive-map-js-api", "migrations": [ { "slug": "web-maps-and-plugins", "title": "Web maps and plugins: legacy scripts to a governed browser boundary", "confidence": "adjacent-evidence", "href": "/migrate/web-maps-and-plugins" } ], "exactQuickstarts": [], "adjacentPlatformQuickstarts": [ { "slug": "rest-api", "title": "Your first trusted Mappls request", "platform": "REST", "href": "/quickstart/rest-api" }, { "slug": "web-map", "title": "Render one accessible web map", "platform": "Web", "href": "/quickstart/web-map" } ], "starterKits": [] } } ``` ## source-reference · Mappls API Organization Guide - Identity: `source-reference:github` - Canonical: https://developer.mappls.com/reference/github - State model: stateless ```json { "slug": "github", "sourceId": "public-github", "name": ".github", "title": "Mappls API Organization Guide", "summary": "is a ✨special ✨ repository that you can use to add README.md to your public organization profile, visible to anyone.", "kind": "Guide", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps" ], "platforms": [ "Unspecified" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/.github", "sourceDocumentUrl": "https://github.com/mappls-api/.github/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/.github/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:01:58Z", "localCandidates": [], "prerequisites": [], "sections": [ { "title": "Overview", "level": 1, "paragraphs": [ "This is a ✨special ✨ repository that you can use to add README.md to your public organization profile, visible to anyone." ] }, { "title": "Low code APIs to get started with maps and location", "level": 2, "paragraphs": [ "Trusted by developers all over - from budding startups and traditional enterprises to government organisations and global big tech" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://about.mappls.com/images/client_logo/amazon-a.svg)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://about.mappls.com/images/client_logo/mcdonalds-01.svg)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://about.mappls.com/images" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 3, "endpointCount": 8, "codeSampleCount": 0, "fingerprint": "862c91224d2b3e3fd8d3bed84fed9497c507bdfb33c46136c065828715f3345f" } } ``` ## source-reference · Flutter MapmyIndia GL - Identity: `source-reference:flutter-mapmyindia-gl` - Canonical: https://developer.mappls.com/reference/flutter-mapmyindia-gl - State model: stateless ```json { "slug": "flutter-mapmyindia-gl", "sourceId": "public-flutter-mapmyindia-gl", "name": "flutter-mapmyindia-gl", "title": "Flutter MapmyIndia GL", "summary": "A Mappls sdk for maps, search places, routes navigation, tracking telematics, widgets deep links, offline automotive, capture feedback across Flutter.", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "platforms": [ "Flutter" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Dart" ], "repositoryUrl": "https://github.com/mappls-api/flutter-mapmyindia-gl", "sourceDocumentUrl": "https://github.com/mappls-api/flutter-mapmyindia-gl/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/flutter-mapmyindia-gl/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2022-09-30T08:39:02Z", "localCandidates": [ "contenthub/dochub/flutter-mapmyindia-gl" ], "prerequisites": [ "A Flutter project with Android and iOS platform configuration", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Flutter MapmyIndia GL", "level": 1, "paragraphs": [ "This Flutter plugin allows to show embedded interactive MapmyIndia maps inside a Flutter widget. For the Android and iOS integration. This project only supports a subset of the API exposed by these libraries." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "To work with MapmyIndia Map in flutter add this to your package's pubspec.yaml file: yaml dependencies: mapmyindiagl: ^0.3.1", "Now in your dart code you need to import this package: dart import 'package:mapmyindiagl/mapmyindiagl.dart';" ] }, { "title": "Adding MapmyIndia Keys", "level": 2, "paragraphs": [ "You must provide your keys through the MapmyIndiaAccountManager class:", "dart MapmyIndiaAccountManager.setMapSDKKey(MAPSDKKEY); MapmyIndiaAccountManager.setRestAPIKey(RESTAPIKEY); MapmyIndiaAccountManager.setAtlasClientId(ATLASCLIENTID); MapmyIndiaAccountManager.setAtlasClientSecret(ATLASCLIENTSECRET);" ] }, { "title": "Add MapmyIndia Map to your application", "level": 2, "paragraphs": [ "Add MapmyIndiaMap widget dart MapmyIndiaMap( initialCameraPosition: CameraPosition( target: LatLng(25.321684, 82.987289), zoom: 14.0, ), onMapCreated: (map) => { mapController = map, }, )," ] }, { "title": "Map Interactions", "level": 2, "paragraphs": [ "The MapmyIndia Maps Flutter SDK allows you to define interactions that you can activate on the map to enable gestures and click events. The following interactions are supported –" ] }, { "title": "Zoom Controls", "level": 3, "paragraphs": [ "The map supports the familiar two-finger pinch and zooms to change zoom level as well as double tap to zoom in. Set zoom to 4 for country level display and 18 for house number display. In this SDK the camera position plays an important role", "And following operations can be performed using the CameraPosition" ] }, { "title": "Target", "level": 4, "paragraphs": [ "The target is single latitude and longitude coordinate that the camera centers it on. Changing the camera's target will move the camera to the inputted coordinates. The target is a LatLng object. The target coordinate is always at the center of the viewport." ] }, { "title": "Tilt", "level": 4, "paragraphs": [ "Tilt is the camera's angle from the nadir (directly facing the Earth) and uses unit degrees. The camera's minimum (default) tilt is 0 degrees, and the maximum tilt is 60. Tilt levels use six decimal point of precision, which enables you to restrict/set/lock a map's bearing with extreme precision.", "The map camera tilt can also adjust by placing two fingertips on the map and moving both fingers up and down in parallel at the same time or" ] }, { "title": "Bearing", "level": 4, "paragraphs": [ "Bearing represents the direction that the camera is pointing in and measured in degrees clockwise from north.", "The camera's default bearing is 0 degrees (i.e. \"true north\") causing the map compass to hide until the camera bearing becomes a non-zero value. Bearing levels use six decimal point precision, which enables you to restrict/set/lock a map's bearing with extreme precision. In addition to programmatically adjusting the camera bearing, the user can place two fingertips on the map and rotate their fingers." ] }, { "title": "Zoom", "level": 4, "paragraphs": [ "Zoom controls scale of the map and consumes any value between 0 and 22. At zoom level 0, viewport shows continents and other world features. A middle value of 11 will show city level details.At a higher zoom level, map will begin to show buildings and points of interest. Camera can zoom in following ways:", "• Pinch motion two fingers to zoom in and out. - Quickly tap twice on the map with a single finger to zoom in. - Quickly tap twice on the map with a single finger and hold your finger down on the screen after the second tap. - Then slide the finger up to zoom out and down to zoom out.", "##### Sdk allows various method to Move, ease,animate Camera to a particular location : dart mapController.moveCamera(CameraUpdate.newLatLngZoom(LatLng(22.553147478403194, 77.23388671875), 14)); mapController.easeCamera(CameraUpdate.newLatLngZoom(LatLng(28.704268, 77.103045), 14)); mapController.animateCamera(CameraUpdate.newLatLngZoom(LatLng(28.698791, 77.121243), 14));" ] }, { "title": "Map Click/Long click", "level": 3, "paragraphs": [ "If you want to respond to a user tapping on a point on the map, you can use a onMapClick callback.", "It sets a callback that's invoked when the user clicks on the map: dart MapmyIndiaMap( initialCameraPosition: kInitialPosition, onMapClick: (point, latlng) =>{ print(latlng.toString()) }, )", "##### Sets a callback that's invoked when the user long clicks on the map view. dart MapmyIndiaMap( initialCameraPosition: kInitialPosition, onMapLongClick: (point, latlng) =>{ print(latlng.toString()) }, )" ] }, { "title": "Add a Marker", "level": 3, "paragraphs": [ "Add marker on the map by following these steps: dart Symbol symbol = await controller.addSymbol(SymbolOptions(geometry: LatLng(25.321684, 82.987289)));" ] }, { "title": "Customize a marker", "level": 3, "paragraphs": [ "dart /// Adds an asset image to the currently displayed style Future addImageFromAsset(String name, String assetName) async { final ByteData bytes = await rootBundle.load(assetName); final Uint8List list = bytes.buffer.asUint8List(); return controller.addImage(name, list); }", "await addImageFromAsset(\"icon\", \"assets/symbols/custom-icon.png\"); Symbol symbol = await controller.addSymbol(SymbolOptions(geometry: LatLng(25.321684, 82.987289), iconImage: \"icon\"));" ] }, { "title": "Remove a Marker", "level": 3, "paragraphs": [ "To remove a marker from map dart controller.removeSymbol(symbol);" ] }, { "title": "Add a Polyline", "level": 3, "paragraphs": [ "Draw a polyline on Map dart Line line = await controller.addLine(LineOptions(geometry: latlng, lineColor: \"#3bb2d0\", lineWidth: 4));" ] }, { "title": "Remove a Polyline", "level": 3, "paragraphs": [ "To remove polyline from Map dart controller.removeLine(line);" ] }, { "title": "Add a Polygon", "level": 3, "paragraphs": [ "This feature is available from version v0.2.0", "Draw a polygon on the map: dart Fill fill = await controller.addFill(FillOptions(geometry: latlng, fillColor: \"#3bb2d0\"));" ] }, { "title": "Remove a Polygon", "level": 3, "paragraphs": [ "dart controller.removeFill(fill);" ] }, { "title": "Add Annotations using Geojson", "level": 2, "paragraphs": [ "This feature is available from v0.2.2" ] }, { "title": "Show User location", "level": 2, "paragraphs": [ "onUserLocationUpdated is available from v0.2.0", "To show user current location on the map dart MapmyIndiaMap( initialCameraPosition: kInitialPosition, myLocationEnabled: true, myLocationTrackingMode: MyLocationTrackingMode.NONECOMPASS, onUserLocationUpdated: (location) => { print(\"Position: ${location.position.toString()}, Speed: ${location.speed}, Altitude: ${location.altitude}\") }, )" ] }, { "title": "IMPORTANT", "level": 2, "paragraphs": [ "To read further, please refer to documentation available here: https://github.com/mappls-api/flutter-mapmyindia-gl/wiki", "Email us at apisupport@mapmyindia.com", "Ask a question under the mapmyindia-api", "Need support? contact us!", "Read about the latest updates & customer stories", "© Copyright 2021. CE Info Systems Pvt. Ltd. All Rights Reserved. | Terms & Conditions." ] } ], "snippets": [ { "language": "Dart", "label": "Add Annotations using Geojson", "code": "List symbol = await controller.addSymbolsFromJson(geojson); \nList lines = await controller.addLinesFromJson(geojson); \nList fills = await controller.addFillsFromJson(geojson);" } ], "endpointEvidence": [ "https://github.com/mappls-api/flutter-mapmyindia-gl/wiki](https://github.com/mappls-api/flutter-mapmyindia-gl/wiki", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 23, "endpointCount": 8, "codeSampleCount": 1, "fingerprint": "925a61dda2d31e0ceb80aac0208b0c87813b4af2aea20769bd8b6659f3c64b18" } } ``` ## source-reference · Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web - Identity: `source-reference:mapmyindia-angular-sample-websdk-rest` - Canonical: https://developer.mappls.com/reference/mapmyindia-angular-sample-websdk-rest - State model: stateless ```json { "slug": "mapmyindia-angular-sample-websdk-rest", "sourceId": "public-mapmyindia-angular-sample-websdk-rest", "name": "mapmyindia-angular-sample-webSDK-REST", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "summary": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "kind": "Sample", "maturity": "sample", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "identity-platform" ], "platforms": [ "Web", "REST" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "JSON", "JavaScript", "HTML", "CSS" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-angular-sample-webSDK-REST", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-angular-sample-webSDK-REST/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-angular-sample-webSDK-REST/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2020-02-07T06:28:14Z", "localCandidates": [ "contenthub/dochub/mapmyindia-angular-sample-webSDK-REST" ], "prerequisites": [ "A browser application and an allowed development origin", "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan, Myanmar and Bangladesh", "You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "Pre-requisites & Assumptions", "level": 2, "paragraphs": [ "1. Supported frameworks: Angular 6 & above (this sample is written in Angular 6) 2. CORS to be ENABLED: You need to ask API Support to enable CORS for your credentials. 3. This sample is provided as a reference only and users can adjust and enhance it to suit their requirements such as for upgraded Angular versions." ] }, { "title": "7. For showing response using button, write given code in app.component.html.", "level": 3, "paragraphs": [ "Using the above code, results are shown in alert & console" ] }, { "title": "9. Run the Project", "level": 3, "paragraphs": [ "Command: npm start" ] }, { "title": "10. Write index.html file", "level": 3, "paragraphs": [ "That's it Folks !!!", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!", "Blog Read about the latest updates & customer stories" ] } ], "snippets": [ { "language": "JSON", "label": "2. Create file name of proxy.conf.json in your project and put given c", "code": "{\n \"/api/*\": \n {\n \"target\": \"https://outpost.mapmyindia.com\",\n \"secure\": false,\n \"logLevel\": \"debug\"\n }\n}" }, { "language": "JSON", "label": "3. Then add line \"proxyConfig\": \"proxy.conf.json\" in angular.json file", "code": "\"serve\": {\n \"builder\": \"@angular-devkit/build-angular:dev-server\",\n \"options\": {\n \"browserTarget\": \"DemoApp:build\",\n \"proxyConfig\": \"proxy.conf.json\"\n },\n \"configurations\":{\n \"production\": {\n \"browserTarget\": \"DemoApp:build:production\"\n }\n }\n}" }, { "language": "JSON", "label": "4. Then replace the line \"start\":\"\" to \"start\": \"ng serve --port 4200 ", "code": "\"scripts\": {\n \"ng\": \"ng\",\n \"start\": \"ng serve --port 4200 --proxy-config proxy.conf.json\",\n \"build\": \"ng build\",\n \"test\": \"ng test\",\n \"lint\": \"ng lint\",\n \"e2e\": \"ng e2e\"\n }" }, { "language": "JavaScript", "label": "5. Create service page and put the given code:-", "code": "import { Injectable } from \"@angular/core\";\n import { HttpClient } from '@angular/common/http';\n import { Observable } from \"rxjs\";\n @Injectable({\n providedIn: 'root'\n })\n export class DemoService {\n constructor(private httpClient: HttpClient) {\n }\n private grantType: string = \"client_credentials\";\n private clientId: string = \"\";\n private clientSecret: string = \"\";\n private securityURL: string = \"https://outpost.mapmyindia.com/api/security/v3.0.5/oauth/token?grant_type=\" + this.grantType + \"&client_id=\"YOUR_CLIENT_ID\"&client_secret=\" + this.clientSecret;\n private autoSuggestURL: string = \"https://atlas.mapmyindia.com/api/places/search/json?query=agra&location=28.5454,77.455454&bridge&explain&username=REDACTED\";\n private nearbyURL: string = \"https://atlas.mapmyindia.com/api/places/nearby/json?explain&richData&username=REDACTED&refLocation=28.467470,77.077518&keywords=FINATM\";" }, { "language": "JavaScript", "label": "Generating Token using ClientId & ClientSecret", "code": "getToken() {\n let promise = new Promise((resolve, reject) => {\n let apiURL = this.securityURL;\n this.httpClient.post(apiURL, null)\n .toPromise()\n .then(\n res => { // Success\n resolve(res);\n }\n );\n });\n return promise;\n }" }, { "language": "JavaScript", "label": "OAuth Autosuggest using token", "code": "autoSuggest(token: string) {\n const _url = this.autoSuggestURL+\"&access_token=\"+token;\n const promise = new Promise((resolve, reject) => {\n this.httpClient.get(_url)\n .toPromise()\n .then(\n res => { // Success\n // console.log(res);\n resolve(res);\n }\n );\n });\n return promise;\n }" }, { "language": "JavaScript", "label": "OAuth Nearby using token", "code": "nearby(token: string) {\n const _url = this.nearbyURL+\"&access_token=\"+token;\n const promise = new Promise((resolve, reject) => {\n this.httpClient.get(_url)\n .toPromise()\n .then(\n res => { // Success\n resolve(res);\n }\n );\n });\n return promise;\n }" }, { "language": "JavaScript", "label": "OAuth Geocode API using token", "code": "geocode(token: string) {\n const _url = this.geocodeURL+\"&access_token=\"+token;\n const promise = new Promise((resolve, reject) => {\n this.httpClient.get(_url)\n .toPromise()\n .then(\n res => { // Success\n resolve(res);\n }\n );\n });\n return promise;\n }" }, { "language": "JavaScript", "label": "OAuth TextSearch API using token", "code": "textsearch(token: string) {\n const _url = this.textsearchURL+\"&access_token=\"+token;\n const promise = new Promise((resolve, reject) => {\n this.httpClient.get(_url)\n .toPromise()\n .then(\n res => { // Success\n resolve(res);\n }\n );\n });\n return promise;\n }" }, { "language": "JavaScript", "label": "6. Call OAuth API (AutoSuggest, Nearby, Geocode, TextSearch), write gi", "code": "import { Component, OnInit } from '@angular/core';\n import { DemoService } from './app.service';\n declare var MapmyIndia: any; // Declaring Mapmyindia\n declare var L: any; // Declaring L\n @Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n })\n export class AppComponent implements OnInit {\n title = 'DemoApp';\n public map : any; // Initializing Map Variable\n constructor(private demoService: DemoService) {\n }\n private token: string;\n ngOnInit(): void {\n // Creating Map\n this.map = new MapmyIndia.Map('map',\n {\n center: [28.04, 78.2],\n zoom: 12\n });\n\n this.demoService.getToken().then((data) => {\n this.token = data['access_token'];\n });\n }\n auto() {\n this.demoService.autoSuggest(this.token).then((data) => {\n console.log(data);\n });\n }\n nearby() {\n this.demoService.nearby(this.token).then((data) => {\n console.log(data);\n });\n }\n geocode(){\n this.demoService.geocode(this.token).then((data) => {\n console.log(data);\n });\n }\n textsearch(){\n this.demoService.textsearch(this.token).then((data) => {\n console.log(data);\n });\n }\n }" }, { "language": "HTML", "label": "7. For showing response using button, write given code in app.componen", "code": "
\n

\n Welcome to {{ title }}!\n

\n

//div for map\n
\n

REST API

\n \n \n \n \n
" }, { "language": "CSS", "label": "8. Giving height & width to the Map", "code": "#map{\n height: 70vh;\n width: 100%;\n }" }, { "language": "HTML", "label": "10. Write index.html file", "code": "" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://outpost.mapmyindia.com/api/security/v3.0.5/oauth/token?grant_type=", "https://atlas.mapmyindia.com/api/places/search/json?query=agra&location=28.5454,77.455454&bridge&explain&username=balmukand", "https://atlas.mapmyindia.com/api/places/nearby/json?explain&richData&username=balmukand&refLocation=28.467470,77.077518&keywords=FINATM", "https://apis.mapmyindia.com/advancedmaps/v1/", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 12, "codeSampleCount": 13, "fingerprint": "4280593e3c2f3278656e1952146c78619241768e765947d176479fae11506990" } } ``` ## source-reference · Transaction Definitions - Identity: `source-reference:mapmyindia-api-addendums` - Canonical: https://developer.mappls.com/reference/mapmyindia-api-addendums - State model: stateless ```json { "slug": "mapmyindia-api-addendums", "sourceId": "public-mapmyindia-api-addendums", "name": "mapmyindia-api-addendums", "title": "Transaction Definitions", "summary": "This repository has the useful addendum like updated transaction definitions, category codes for Nearby Places Search, Branding Guidelines and other useful info for using MapmyIndia SDKs & APIs", "kind": "Guide", "maturity": "legacy", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback" ], "platforms": [ "Unspecified" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-api-addendums", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-api-addendums/blob/main/transaction-definitions.md", "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-05-16T04:53:13Z", "localCandidates": [ "contenthub/dochub/mapmyindia-api-addendums" ], "prerequisites": [], "sections": [ { "title": "Transaction Definitions", "level": 1, "paragraphs": [ "| Serial | APIs / SDKs | Transaction Definition | | 1 | Interactive Map JS Web SDK/API (also applicable to Cordova/ReactJS based packages) | One transaction is one load of the SDK (SDK Initialization) in any web app. Events such as Panning, zooming in/out, adding markers, polyline, ploygons on Map is NOT considered as a transaction, unless they result in fresh tiles being downloaded from the server. In case where fresh tiles are requested from server, for every 10 tiles so refreshed an additional transaction is incurred. Actions such as zoom may not necessarily cause tiles being fetched anew from server; since browser's JS engines are capable of limited 1 amount of browser-cache based rendering. 1 Deliberate caching of map tiles is not permitted. When a page is refereshed/reloaded, it results in the map SDK loaded afresh and hence incurs additional transaction in accordance with above. |", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Support Need support? contact us!", "[](http://www.mapmyindia.com/blog/)[](https://github.com/MapmyIndia)", "[](https://twitter.com/MapmyIndia)[](https://www.linkedin.com/company/mapmyindia)[](https://www.youtube.com/user/MapmyIndia/)" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mappls-web-maps-js", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-maps-geocoding-rest-api-example", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-maps-reverse-geocoding-rest-api-example", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-routing-api", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-distance-matrix-api", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-maps-auto-suggest-api-example", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-maps-near-by-api-example", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-maps-place-details-api-example", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-traveled-route-api", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-poi-along-the-route-api", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-snapToRoad-api", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-address-analytics-api", "https://github.com/mappls-api/mappls-rest-apis/tree/main/mappls-route-optimization-api", "https://github.com/mappls-api/mappls-android-sdk", "https://github.com/mappls-api/mappls-ios-sdk" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": false, "headingCount": 1, "endpointCount": 32, "codeSampleCount": 0, "fingerprint": "ebad8a29c9471bb640639fc011db95459e2867d20dcd30a6375eb3129cc03ba8" } } ``` ## source-reference · MapmyIndia Geo-Analytics APIs ! - Identity: `source-reference:mapmyindia-geoanalytics-api-web` - Canonical: https://developer.mappls.com/reference/mapmyindia-geoanalytics-api-web - State model: stateless ```json { "slug": "mapmyindia-geoanalytics-api-web", "sourceId": "public-mapmyindia-geoanalytics-api-web", "name": "mapmyindia-geoanalytics-api-web", "title": "MapmyIndia Geo-Analytics APIs !", "summary": "MapmyIndia GeoAnalytics APIs - MapmyIndia’s Data served through convenient and easy to use web APIs", "kind": "REST API", "maturity": "legacy", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "gis-analytics" ], "platforms": [ "Web" ], "authSignals": [ "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-geoanalytics-api-web", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-geoanalytics-api-web/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-geoanalytics-api-web/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2020-02-24T09:58:50Z", "localCandidates": [ "contenthub/dochub/mapmyindia-geoanalytics-api-web" ], "prerequisites": [ "A browser application and an allowed development origin", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "MapmyIndia Geo-Analytics APIs !", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Geo-Analytics APIs For Web Applications", "Powered with India's most comprehensive and robust mapping functionalities.", "You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "MOVE UP INDIA", "level": 2, "paragraphs": [ "Presenting MapmyIndia GeoAnalytics APIs, using India's most powerful and granular map data down to the building level. We are more economical and precise than any other maps available in the market." ] }, { "title": "GEO-ANALYTICS API", "level": 2, "paragraphs": [ "MapmyIndia’s best-in-class, comprehensive & accurate data served through convenient and easy to use web APIs with multiple data attributes such as demographic data attributes. Aligned with MapmyIndia Map data, these APIs utilize our vast geo-informatics experience to provide customers a enhanced leverage over competition using query-enabled Geo-Analytics APIs to perform geo-visualizations for your business analysis problems. Empower your web with the most granular location-based demographics and socio-economic profiling for various geographies." ] }, { "title": "Introduction", "level": 3, "paragraphs": [ "Geo-Analytics API is an API set that gives the users the power for selection, visualization, queries, styling and analytics on the data which is archived in MapmyIndia’s pan-India database and overlay on MapmyIndia’s Maps service for web application.", "The API set also has the capability to integrate with client data as overlays.", "The APIs are OGC compliant and currently the following frameworks or libraries are supported by Geo-Analytics APIs for displaying map data on any web app." ] }, { "title": "MapmyIndia Interactive Map JS powered libraries", "level": 2, "paragraphs": [ "Click here to see the documentation." ] }, { "title": "Usage", "level": 3, "paragraphs": [ "Through the use of various methods offered by said libraries, clients can lay-out the complex and rich Map data set offered by MapmyIndia in the simplest way to geo-visualize their data and perform business analytics using location variable.", "The various APIs offered through GeoAnalytics platform of MapmyIndia (but not limited to) are: 1. State as a layer. 2. City as a layer. 3. District as a layer 4. Subdistrict as a layer. ...", "All of these layers come with the additional styling and control options such as: - label attributes (toggle ON/Off, colors, size) - fill layer with color - size of any point data. - border attributes (color, width) - opacity control. ..." ] }, { "title": "Rich Attributes - Seamless linkage to Geographical Layers", "level": 3, "paragraphs": [ "In addition to these layers and above defined basic functions, comes the power to query the said layers on the basis of multiple attributes like demographics, awareness etc. (PREMIUM FEATURE). e.g. One can show only those states pan India whose \"population\" is greater than the client defined value." ] }, { "title": "Available Attributes", "level": 4, "paragraphs": [ "1. Demographics attributes like - Population related attributes like total male population in an administrative geometrical layer (e.g. in a district) - Literacy attributes in a layer (e.g. female literates in a town) - and many more ... 2. Amenities / Socio-Economic attributes like - Mobile Phone coverage availability in a layer. (e.g. in a ward) - Power supply for commercial use availability in a layer. (e.g. in a village) - and many more ... 3. Awareness / Penetration attributes like - ATM availability in a layer (e.g. in a village) - Household having four wheeler in a layer (e.g. in a block) - and many more ..." ] }, { "title": "Why GeoAnalytics APIs?", "level": 2, "paragraphs": [ "• Reduced dependence on raw vector data, which directly reduces the vast amount of time spent in processing data updates. - To make the visualization and analytics lightning fast by providing a standardized DaaS (data-as-a-service) approach to fetching rich geographical data-sets - no need to fetch data directly from custom databases - geoAnalytics APIs are following industry standard (OGC) of serving data to end user for geospatial information and analytics.", "For more details, please visit our website.", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/MapmyIndia/mapmyindia-geoanalytics-api-web/blob/master/geoAnalytics-Mapmyindia-JS.md).", "https://www.mapmyindia.com/geo-analytics-services/).", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont", "https://stackedit.io/" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 11, "codeSampleCount": 0, "fingerprint": "8b1425c222c239cb4ffee5c1e6d0701d74ef02b0e32b827876f909b3b9bfc6ea" } } ``` ## source-reference · MapmyIndia Interactive Map JS API ! - Identity: `source-reference:mapmyindia-interactive-map-js-api` - Canonical: https://developer.mappls.com/reference/mapmyindia-interactive-map-js-api - State model: stateless ```json { "slug": "mapmyindia-interactive-map-js-api", "sourceId": "public-mapmyindia-interactive-map-js-api", "name": "mapmyindia-interactive-map-js-api", "title": "MapmyIndia Interactive Map JS API !", "summary": "Integrate Map APIs to visualize maps, accurate directions, geo-coding and traffic flow", "kind": "SDK", "maturity": "legacy", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links" ], "platforms": [ "Web", "REST" ], "authSignals": [ "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-interactive-map-js-api", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-interactive-map-js-api/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-interactive-map-js-api/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-02-11T11:57:22Z", "localCandidates": [ "contenthub/dochub/mapmyindia-interactive-map-js-api" ], "prerequisites": [ "A browser application and an allowed development origin", "A trusted backend or API client capable of HTTPS requests", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "MapmyIndia Interactive Map JS API !", "level": 1, "paragraphs": [ "Full documentation available here: https://www.mapmyindia.com/api/advanced-maps/doc/interactive-map-api.", "You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "The Interactive Maps JavaScript API based on Leaflet JS helps render and display map tiles while customizing the map's look and feel on mobile or web browser. Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps i.e. easy to use & high on performance. It is a collection of classes and functions that can be used to implement a host of map features.", "• Zoom: Pan-able map of India with 14 zoom levels, 18 being the highest (most detailed) and 4 being the lowest (country level) map display. - Overlays: The map is the key for any sort of transit and understanding this, we at MapmyIndia provide quick default overlays to reduce the boiler plate code for your code base. - Map Markers (Pushpins): Point to any location using default pushpin behaviours and provide it your own style to make it look more tailored for your application. Note: Have a look at the Plug-ins section to find out what makes it cooler. - Info Windows (Pop-ups): On a Map Clicking is a native behaviour understanding this, we provide out of the box info windows such that if a pushpin is clicked an info window pops up open and you can show your content related to that location there. You can style it to make it behave as required for your UI to be magnificent. - Polylines: Co", "Please Note: MapmyIndia may extend and enhance functionality for its interactive map API in future, which will be clearly documented in this section, and which will be available through the MapmyIndia.Map class and MapmyIndia. set of classes generally." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Now that you’re all caught up with the features let’s get down right to them and look at how can you integrate our Interactive Map to your Website from scratch." ] }, { "title": "Initializing The Map", "level": 3, "paragraphs": [ "The easiest way to start loading maps in a web page is with a “Hello World” sample code, you can download or view a working “Hello World” sample from the links for adding your first marker below." ] }, { "title": "Adding Your First Marker", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "The easiest way to start loading maps in a web page is with a “Hello World” sample code, you can download or view a working “Hello World” sample from the links above.", "The true hello world in case of a map scenario is plotting a pushpin that says hello world on click. So, to add a marker to the map, simply add the line of code below to the JavaScript:", "Please Note: -Once you initialize a MapmyIndia Map, you can access all Leaflet functionalities through the, 'L' and passing it the 'map' variable to initialize the leaflet into - MapmyIndia Map. More documentation on Leaflet and plugins are available at leafletjs.org. All Leaflet functionality will work with MapmyIndia Interactive Map API. - The code shown will display a map centred on New Delhi, India. You need to obtain an API key by signing up for API usage to view a demo or use the sample code." ] }, { "title": "Knowing Properties And Functions", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "You can interact with properties of the Map we provide to suite your case scenarios and add additional customizability to your Map layer and the features it may have to offer on the flipside, functions are a quick go to in case of an event." ] }, { "title": "Using Events", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "Events are basically Call-backs provided by UI elements or your own custom code base that tell you that something needs to be done. For more information on events and the list of all the events supported you can have a quick look at our full documentation or the events supported by leaflet in the leaflet documentations and we support all features and functions provided by leaflet.", "For a detailed implementation of events and them interacting with the properties and functions have a look at the sample code or a demo or even download a sample code from the links above.", "Now that you’re all started up, next we’ll have a look at things from a more functionality point of view." ] }, { "title": "Overlays and Controls", "level": 2, "paragraphs": [ "We’ve got you up to speed with all the basics you might be needing to implement your own Interactive Map leveraging MapmyIndia’s Interactive Map API. Now let’s look at what all can you add on to your interactive map to make it tailor made for your use cases." ] }, { "title": "Markers", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "Markers are effortless way of pointing to a location, so getting right to it, you can go ahead and add markers that we provide out of the box but just in case you want to add your own, we’ve got that covered for you as well. There are 3 main categories of markers that you can add namely, - Stock Marker: The one you get out of the box using our interactive maps API and you can select from a lot of choices. - Custom Marker: Just in case you want to provide your own markers, we’ve handled that for you as well. - HTML Marker: In case you don’t want to add in an image you can use HTML to create a marker and then plot it on the map as well.", "Now, that you have a basic understanding of Markers, Functions and Events let’s talk about Info Windows or Pop-Ups." ] }, { "title": "Info Windows", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "Info Windows are a convenient way of showing data about a marker or in simple words what that marker stands for. The Native behaviour of a user to know about any marker is to try and click on it to know what it’s all about and showing an info window would be the way to go about it:", "Please Note: MapmyIndia interactive map supports a default info window that you can leverage but we want you to have an option to customize your info window to fit in with your UI and you can do so in the CSS.", "For a quick sample or a demo you can follow up with the links on top.", "You can declare an info window in your CSS and write up a quick function to generate data in that info window and on marker click event simple open that info window.", "Info windows are just a small part of what we can use show our data in a map scenario we deal with more routes than textual data. Let’s have a look at polylines that help us to better represent the route data." ] }, { "title": "Polylines", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "Polylines are a way of showing movement or transit on a map. We at MapmyIndia understand the ways you can leverage the features offered by a map and one among them is a Polyline.", "Polylines are continuous lines consisting of one or more line segments (preferably a geopath). To add a polyline, initialize map as shown in the previous sections and then create a data set. What is a data set? The Data set is the collection of points (latitude and longitude) over which you want the polyline to be drawn.", "In real case scenarios, you’ll need to get the data set on the fly or from a service and then you can leverage the events and functions we’ve learnt about to plot the polyline. You also might need to beautify your polyline or add transitions for your UI to look marvellous. Look at the plug-ins section to see about the plug-ins we offer to make your UI stand out.", "The polyline is just the beginning, but sometimes you’ll need to mark a territory to properly showcase your information. In such cases a polyline might not be the perfect fit but Polygons and Circles may be the apt choice." ] }, { "title": "Polygons", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "Polygons are a way of showing a territory. In cases where you want to showcase data over an area, polygons are your best pick. You can use them to show Geozones as well.", "It’s very like generating a polyline, the basic steps remain the same, create a Data set, generate a polygon and add it to the map.", "Now that we’ve covered polygons let’s have a look at Circles which provide another way of showcasing territory." ] }, { "title": "Circles", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "Circles are way of marking a territory without too much interaction by the user. A circle only has two important values:", "• The Centre point of the circle (in this case it’ll be a latitude with a longitude). - The Radius of the circle.", "With the two values, you can easily define a quick area of interest on a map.", "And that’s all that’s there to it. You have all the basics you need to get started and fiddle around with things to make your own implementation leveraging MapmyIndia’s Interactive Maps API.", "These are just the basics of all but to enhance your experience you might just not want the basics. Let’s have a look at some of the plug-ins we offer to make your users feel amazing and that in turn benefits you." ] }, { "title": "Plug-Ins", "level": 2, "paragraphs": [ "Now that we’ve handled all the basics along with some controls and overlays you can use to better use the map, we would like to show you how can you extend functionalities of these controls and overlays to make your user experience rich.", "Plug-Ins are the best way to extend functionality. You can add custom behaviours for controls or make them interact with other components to achieve desired output." ] }, { "title": "Adding A Plug-In", "level": 3, "paragraphs": [ "To add any plug in to your project you necessarily need to add a reference to the CSS and the JS files. For each plug-in, the number of these files may vary depending upon the functionality the plug-in provides." ] }, { "title": "Basic Cluster", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "The MapmyIndia basic cluster provides basic implementation of the leaflet’s cluster functionality.", "For a detailed code snippet and explanation please refer to the code sample or the live demo from the links above.", "Please Note: There is a performance criteria attached to this plug-in. If you have less than 25K (25 thousand) markers and a light weight plug-in this will be an ideal pick but just in case there is a possibility that you’ll have more than 25K markers we would advise go for the MapmyIndia’s Advanced Cluster instead. That can handle enormous amount of data and that too with impressive performance." ] }, { "title": "Advanced Cluster", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "In the previous section, we looked at a basic cluster implementation. The advantage of it is that is light weight but on the flipside, it’s a very basic implementation and does not provide much customizability and it can’t handle large data sets. To overcome the above, we’ve got Advanced Cluster. Also based on the leaflet implementation, the MapmyIndia Advanced cluster can handle large data sets with impressive performance. Alongside this, the advanced cluster also provides some cool tweaks that can suit your use case scenarios.", "Please Note: For a more detailed code snippet follow the links provided above to see the sample code or see a live demo." ] }, { "title": "Decorated Polyline", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "In the previous section, we looked at clusters and their implementations. There will be cases where in you would want to get more of your polylines. For such a case scenario, we provide Decorated Polyline." ] }, { "title": "KML Overlay", "level": 3, "paragraphs": [ "JSFIDDLE | LIVE DEMO", "KML: Keyhole Markup Language is a file format used to display geographic data on maps. Using this plugin, you can overlay KML data over MapmyIndia Maps for web." ] }, { "title": "Important Notes to remember", "level": 4, "paragraphs": [ "1. Only KML data supported. 2. KML file must have absolute path or raw KML string (in variable or in textbox) 3. All internal URL's path must be absolute. (for icon path etc) 4. File must not be password protected. 5. File must be CORS enabled. 6. File must follow KML standard strictly.", "Please Note: For a more detailed code snippet follow the links provided above to see the sample code or see a live demo.", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api/advanced-maps/doc/interactive-map-api](https://www.mapmyindia.com/api/advanced-maps/doc/interactive-map-api).", "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://jsfiddle.net/mapmyindia_map/w1ny7ogb", "https://www.mapmyindia.com/api/advanced-maps/doc/sample/mapmyindia-maps-api-hello-world-example", "https://jsfiddle.net/mapmyindia_map/tLpa0gfz", "https://www.mapmyindia.com/api/advanced-maps/doc/sample/mapmyindia-maps-api-properties-and-events-example", "https://www.mapmyindia.com/api/advanced-maps/doc/interactive-map-api", "https://jsfiddle.net/mapmyindia_map/2z9968pv/", "https://www.mapmyindia.com/api/advanced-maps/doc/sample/mapmyindia-maps-api-marker-example", "https://jsfiddle.net/mapmyindia_map/6gz1nshs", "https://www.mapmyindia.com/api/advanced-maps/doc/sample/mapmyindia-maps-api-info-window-example", "https://jsfiddle.net/mapmyindia_map/zgpnajwr", "https://www.mapmyindia.com/api/advanced-maps/doc/sample/mapmyindia-maps-api-polyline-example", "https://jsfiddle.net/mapmyindia_map/8d3vhkz6/", "https://www.mapmyindia.com/api/advanced-maps/doc/sample/mapmyindia-maps-api-polygon-example", "https://jsfiddle.net/mapmyindia_map/egfebq0j/11/" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 20, "endpointCount": 39, "codeSampleCount": 0, "fingerprint": "d41c7d998fba044ff84206f64e197928707ef64fd2e005dd1076828836c1fe93" } } ``` ## source-reference · Mapmyindia Intouch Android SDK - Identity: `source-reference:mapmyindia-intouch-android-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-android-sdk - State model: stateful ```json { "slug": "mapmyindia-intouch-android-sdk", "sourceId": "public-mapmyindia-intouch-android-sdk", "name": "mapmyindia-intouch-android-sdk", "title": "Mapmyindia Intouch Android SDK", "summary": "A Mappls sdk for tracking telematics, workforce, gis analytics, widgets deep links, identity platform across Android.", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "identity-platform" ], "platforms": [ "Android" ], "authSignals": [ "oauth2" ], "languages": [ "Java", "Text", "Kotlin" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-android-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-intouch-android-sdk/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-android-sdk/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2024-04-18T11:30:50Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-android-sdk" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "Get Real-Time Location Tracking for your apps with MapmyIndia InTouch SDK. Track a user's live location with our simplified InTouch SDK integration (for Android), highly customizable to your specific needs.", "The InTouch SDK comes with a variety of events that enable better control and power over your tracking needs. Get ready made events to create,, Geo-Fences, Event Alerts, and Trails of telematics/ phone devices. Also get location benefits built for various applications including logistics, delivery tracking, employee tracking, and live location sharing.", "To get started, explore the InTouch Demo App.", "Already have an application? Give it a boost with the powerful features of InTouch. Learn how to Integrate the InTouch SDK", "• Setup: Please contact apisupport@mapmyindia.com to get the Intouch SDK authorisation for your Client ID and Client Secret. - Quick Start: Start with a ready-to-go app - Integrate the SDK: Integrate the SDK into your app - Dashboard: See all your devices' locations on MapmyIndia InTouch Dashboard - InTouch Telematics APIs: Use InTouch APIs to get the details of the devices." ] }, { "title": "Setup.", "level": 2, "paragraphs": [ "We use your Client ID to identify your account details and assign all your user's devices under a single account.", "To get your Outh2 Rest API Client ID and Client Secret please login to MapmyIndia API Dashboard", "Please contact apisupport@mapmyindia.com to get InTouch SDK access to your Client ID", "After getting the access, you can start with the InTouchDemo app, or Integrate the InTouch SDK in your app." ] }, { "title": "InTouchDemo app", "level": 2, "paragraphs": [ "This guide allows you to add live location tracking to an Android app. Android Studio is the recommended development environment for building an app with the MapmyIndia InTouch SDK for Android." ] }, { "title": "Step 1. Download the InTouchDemo App.", "level": 4, "paragraphs": [ "Click here to download the InTouchDemo App Project. Open this project in Android Studio" ] }, { "title": "Step 2. Set your Publishable key", "level": 4, "paragraphs": [ "1. Add the publishable key to SetUpKeyFragment Fragment file.", "2. Run project on your device using simulator instance.", "3. Go through run-time permission flow (applicable for Android M and later)." ] }, { "title": "Integrate the InTouch SDK", "level": 2, "paragraphs": [ "• Add InTouch SDK - Start tracking - InTouch Telematics APIs - Utility methods" ] }, { "title": "Step 1: Setup a project", "level": 2, "paragraphs": [ "1. Start Android Studio. 2. Create a new project as follows: - If you see the Welcome to Android Studio dialog, choose Start a new Android Studio project, available under 'Quick Start' on the right of the dialog. - Otherwise, click File in the Android Studio menu bar, click New-> New Project. - Select the form factors you need for your app. If you're not sure what you need, just select Phone and Tablet. - Select Add No Activity and click Next. 3. Enter your app name, package name, project location, language and minimum API version as prompted. Click Next. 4. Create a Basic Activity in the 'Add an activity to Mobile' dialog. Click Next. 5. Enter the activity name, layout name and title as prompted. Click Finish.", "Android Studio starts Gradle and builds your project. This may take a few seconds. For more information about creating a project in Android Studio, see the Android Studio documentation.", "The next few sections contain the code samples that you need to add to your activity's java file as well as its xml layout file for creating an app with MapmyIndia InTouch SDK for live tracking." ] }, { "title": "Step 2. Add InTouch SDK", "level": 2, "paragraphs": [ "Follow these steps to add the SDK to your project – - Create a new project in Android Studio - Add MapmyIndia repository in your project level build.gradle", "• Add below dependency in your app-level build.gradle" ] }, { "title": "Step 3: Initialize InTouch SDK", "level": 2, "paragraphs": [ "Initialization can be done either of the below mentioned method. Keep the same method accross your project." ] }, { "title": "Method 1:", "level": 4, "paragraphs": [ "Initialize the SDK without unique Id. Intouch SDK will create a unique Id for the device. On every new device Login , a new device will be created and the new device id will be returned." ] }, { "title": "Java", "level": 4, "paragraphs": [ "java // IAuthListener - returns authorization results in the forms of callbacks. InTouch.initialize( , , , new IAuthListener() { @Override public void onSuccess(Long id) { //write your code here } @Override public void onError(String reason, String identifier, String description) { // reason gives the error type. // errorIdentifier gives information about error code. // errorDescription gives a message for a particular error. } });" ] }, { "title": "Method 2:", "level": 4, "paragraphs": [ "Initialize the SDK with your own Unique Id. It is recommended to use when you maintain the unique Id for your users. Now when ever this Unique Id is passed same device id will be returned in the response, even if the user s logs from different devices." ] }, { "title": "Java", "level": 4, "paragraphs": [ "java // IAuthListener - returns authorization results in the forms of callbacks. InTouch.initialize( , , , , , new IAuthListener() { @Override public void onSuccess(Long id) { //write your code here } @Override public void onError(String reason, String identifier, String description) { // reason gives the error type. // errorIdentifier gives information about error code. // errorDescription gives a message for a particular error. } });" ] }, { "title": "Kotlin", "level": 4, "paragraphs": [ "On sucessful registration you will get the Id, use this Id in APIs to get the live location or to create trips against the user." ] }, { "title": "Step 4: Start Tracking", "level": 2, "paragraphs": [ "Track your app user's phone live location by using the below method." ] }, { "title": "IMPORTANT", "level": 2, "paragraphs": [ "To read further, please refer to documentation available here: https://github.com/mappls-api/mapmyindia-intouch-android-sdk/wiki" ] } ], "snippets": [ { "language": "Java", "label": "Step 2. Add InTouch SDK", "code": "allprojects { \n repositories { \n \n maven { \n url 'https://maven.mapmyindia.com/repository/mapmyindia/' \n } \n } \n}" }, { "language": "Java", "label": "Step 2. Add InTouch SDK", "code": "implementation 'com.mapmyindia.sdk:intouch-sdk:0.9.4'" }, { "language": "Java", "label": "Add Java 8 Support to the project", "code": "compileOptions {\n sourceCompatibility 1.8\n targetCompatibility 1.8\n }" }, { "language": "Java", "label": "Add Java 8 Support to the project", "code": "Required Minimum sdk version\n minSdkVersion 18" }, { "language": "Kotlin", "label": "Kotlin", "code": "InTouch.initialize(, , , object : IAuthListener { \n override fun onSuccess() { \n //write your code here \n } \n\toverride fun onError(reason: String?, errorIdentifier: String?, errorDescription: String?) { \n // reason gives the error type. \n // errorIdentifier gives information about error code. \n // errorDescription gives a message for a particular error. \n } \n \n})" }, { "language": "Kotlin", "label": "Kotlin", "code": "InTouch.initialize(, , , , , object : IAuthListener { \n override fun onSuccess(Long entityId) { \n //write your code here \n } \n\toverride fun onError(reason: String?, errorIdentifier: String?, errorDescription: String?) { \n // reason gives the error type. \n // errorIdentifier gives information about error code. \n // errorDescription gives a message for a particular error. \n } \n \n})" }, { "language": "Java", "label": "Java", "code": "InTouch.startTracking();" }, { "language": "Kotlin", "label": "Kotlin", "code": "InTouch.startTracking" }, { "language": "Java", "label": "Java", "code": "InTouch.stopTracking();" }, { "language": "Kotlin", "label": "Kotlin", "code": "InTouch.stopTracking" } ], "endpointEvidence": [ "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk#intouchdemo-app):", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk/wiki#-intouch-telematics-apis):", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk/wiki):", "https://www.mapmyindia.com/api/dashboard", "https://developer.android.com/studio/index.html", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk/archive/master.zip", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk", "https://developer.android.com/training/permissions/requesting", "https://intouch.mapmyindia.com/nextgen", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk/wiki#-intouch-telematics-apis", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk/wiki/Utility-Methods", "https://developer.android.com/studio/projects/create-project.html).", "https://maven.mapmyindia.com/repository/mapmyindia/", "https://github.com/MapmyIndia/mapmyindia-intouch-android-sdk/wiki/MapmyIndia-BLE-Plugin", "https://github.com/mappls-api/mapmyindia-intouch-android-sdk/wiki" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 29, "endpointCount": 15, "codeSampleCount": 10, "fingerprint": "5cfa92eb45ca42e58241721a86ef1c5655708eed1817d098acd8d2e45202e9aa" } } ``` ## source-reference · MapmyIndia Intouch iOS SDK - Identity: `source-reference:mapmyindia-intouch-ios-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-ios-sdk - State model: stateful ```json { "slug": "mapmyindia-intouch-ios-sdk", "sourceId": "public-mapmyindia-intouch-ios-sdk", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "maps", "tracking-telematics", "workforce", "gis-analytics", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2" ], "languages": [ "Text" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-ios-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-intouch-ios-sdk/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-ios-sdk/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2021-07-16T11:02:24Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-ios-sdk" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapmyIndia Intouch will enable the live tracking functionality in your mobile app and allows you to get the powerful features from Intouch IoT platform for your telematics devices. Inotuch SDK for iOS lets you easily add MapmyIndia Telematics cloud services to your own iOS application.", "Using this SDK, Your app shall fetch the live location from the end user mobile phone at the predefined condition, It could be based on the movement of the user, or fixed time interval or the combination of both. You can customize the data polling conditions. Along with that you can get the details about your other telematics device live locaion and analytics around that.", "You will get seemless location benifits which caterted to different domains like logistics, delivery tracking , Employee tracking , live location sharing etc.", "• Publishable Key Get your Publishable Key please contact from apiSupport url (https://apisupport@mapmyindia.com)", "• Quickstart Start with a ready-to-go app", "• Integrate the SDK Integrate the SDK into your app" ] }, { "title": "Get your Publishable Key.", "level": 2, "paragraphs": [ "We use your Publishable key to identify your account details and assign all your users device under single account.", "After getting the publishable key, you can start with the IntouchDemo app, or Integrate the Intouch SDK in your app." ] }, { "title": "Setup a Project", "level": 2, "paragraphs": [ "This guide allows you to add a live location tracking to an iOS app.", "Xcode IDE recommended Xcode 11.0 only.", "Step 1. Download the IntouchDemo App.", "to download the IntouchDemo App Project. And then open this project.", "NOTE:- This is only applicable in Demo app", "Step 2. Set your Publishable key / Project Initiation" ] }, { "title": "IOS13 LOCATION PERMISSION", "level": 2, "paragraphs": [ "For Privacy Policy of Location", "Location Permission Map Prompt(Always allow)", "For apps granted Always Allow location permissions, iOS 13 will periodically display a “map prompt” The “map prompt” displays the location points collected by the app. In testing, we’ve identified that this prompt will be triggered after 3 consecutive days of background location use, and will continue to appear periodically with continued use.", "Add Location permission into your plist file", "requestAlwaysAuthorization requestWhenInUseAuthorization", "1. Add transport security settings Into your plist file." ] }, { "title": "Setup a project", "level": 2, "paragraphs": [ "1. Open Xcode Project. 2. Create a new project as follows: - Create New Application - Select Single Application - Select Next", "3. Enter your app name, project location,Bundle Indentifier language(Swift) and minimum API version as prompted. Then click Next.", "After this Xcode will contain two files viewcontroller& Appdelegate, Setting , StartBeacon", "4. Create Setting and Start Beacon Screen Through Storyboard(Reference demo app for this.)", "5. Go to framework and libraries option in General Settings of the project click on embeded and sign-in.", "6. In capabilities go to background mode it should be enabled background fetch,& location updates." ] }, { "title": "Add following compulsory lines to your applications for Upload app on Store", "level": 4, "paragraphs": [ "Add below function for fetch background data" ] }, { "title": "Initialize InTouch SDK", "level": 2, "paragraphs": [ "Initialize the SDK with your Publishable Key" ] }, { "title": "Add your Publisher key in client Id and Client Secret and add deviceName.", "level": 4, "paragraphs": [ "Client ID and Client Secret it will contain the Publisher Key. After Successful get the token we hit the api for create device. after this you get the traking code // set your device name for tracking this device name will be show on Intouch panel." ] }, { "title": "Create device", "level": 3, "paragraphs": [ "After successful API confirmation we get tracking code for Track the location.", "You cannot use the MapmyIndia Intouch SDK without these function calls. You will find your keys in your API Dashboard.", "There are option to add vehicle Type and Tracking Mode without choose these option tracking will not start.", "Location Permission", "Add these lines into your Controller file" ] }, { "title": "Call the below method to Stop Track your app user's phone live location.", "level": 4, "paragraphs": [ "We put these lines for stop beacon tracking and sensors like gyro, aceelerometer., barometer , motion detectors.", "Set Vehicle type and Priority configration from below code.", "README.md Displaying README.md." ] } ], "snippets": [ { "language": "Text", "label": "Setup a Project", "code": "Drag and Drop the SampleTest-Bridging.h file (which is provided in the project) to your Briding Header in Build Setting of the project." }, { "language": "Text", "label": "Add following compulsory lines to your applications for Upload app on ", "code": "Drag and drop Strip-frameworks.sh file in project to run script in build phase.\nFile path is ------ bash \"yourStripFIlePath/strip-frameworks.sh\"" }, { "language": "Text", "label": "Add following compulsory lines to your applications for Upload app on ", "code": "func application(_ application: UIApplication,performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {\nOpenLocate.shared.performFetchWithCompletionHandler(completionHandler)\n}" }, { "language": "Text", "label": "Add your Publisher key in client Id and Client Secret and add deviceNa", "code": "Intouch.shared.intouchInitilization(clientID: \"YOUR_CLIENTID\", ClientSecret: \"YOUR_CLIENTSECRET\", successResponse: { (Success) in print(Success) }) { (error) in print(error?.localizedDescription) } }" }, { "language": "Text", "label": "Create device", "code": "Import CoreLocation\nImport beaconframework\n\nSet delegate UNUserNotificationCenterDelegate private let locationManager = CLLocationManager()\n\noverride func viewDidLoad() {\nsuper.viewDidLoad()\nif Intouch().shared.isTrackingEnabled {\nonStartTracking()\n}\n\nlocationManager.delegate = self \n\nprivate func storedAuthorizationStatus() -> CLAuthorizationStatus {\nlet authorizationStatusRaw = Int32(UserDefaults.standard.integer(forKey: \"AuthorizationStatus\"))\nreturn CLAuthorizationStatus(rawValue: authorizationStatusRaw) ?? .authorizedAlways\n}\n\nfunc locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {\nswitch status {\ncase .denied:\nself.showAlert(status: \"Denied\", msg: \"The user explicitly denied the use of location service for this app or location service are currently disabled in Settings\")\nreturn\ncase .restricted :\nself.showAlert(status: \"Restricted\", msg: \"The user has not yet made a choice regarding whether this app can use location services.\")\nreturn\ndefault:\nreturn\n}\n}" }, { "language": "Text", "label": "Call the below method to track your app user's phone live location. Ma", "code": "Intouch().StartTracking()" }, { "language": "Text", "label": "Call the below method to Stop Track your app user's phone live locatio", "code": "Intouch.shared.stopTracking()\noption Redirect To Intouch" }, { "language": "Text", "label": "Call the below method to Stop Track your app user's phone live locatio", "code": "Intouch().IntouchUserGender(gender: \"\")\n Intouch().IntouchVehicleType(vehicleType: \"\")\n Intouch().pollingConfigrationMode(priority: \"\")" } ], "endpointEvidence": [ "https://github.com/MapmyIndia", "https://intouch.mapmyindia.com/nextgen/#/home/dashboard", "https://www.mapmyindia.com/api/login?appmyindia-dashboard", "https://github.com/MapmyIndia/mapmyindia-intouch-ios-sdk", "https://intouch.mapmyindia.com/nextgen" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 12, "endpointCount": 5, "codeSampleCount": 8, "fingerprint": "c2030b086830474b9201bba6c6f017f24ebd07b5fee338a41cf1301793fdcc43" } } ``` ## source-reference · Mapmyindia Intouch React Native SDK - Identity: `source-reference:mapmyindia-intouch-react-native-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-react-native-sdk - State model: stateful ```json { "slug": "mapmyindia-intouch-react-native-sdk", "sourceId": "public-mapmyindia-intouch-react-native-sdk", "name": "mapmyindia-intouch-react-native-sdk", "title": "Mapmyindia Intouch React Native SDK", "summary": "A Mappls sdk for tracking telematics, workforce, gis analytics, identity platform across React Native.", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "identity-platform" ], "platforms": [ "React Native" ], "authSignals": [ "oauth2" ], "languages": [ "Groovy", "Text", "JavaScript" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-react-native-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-intouch-react-native-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-react-native-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-11-21T06:19:08Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-react-native-sdk" ], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "Get Real-Time Location Tracking for your apps with MapmyIndia InTouch SDK. Track a user's live location with our simplified InTouch React native SDK integration, highly customizable to your specific needs.", "The InTouch SDK comes with a variety of events that enable better control and power over your tracking needs. Also get location benefits built for various applications including logistics, delivery tracking, employee tracking, and live location sharing.", "To get started, explore the InTouch Demo App.", "Already have an application which is build on React Native? Give it a boost with the powerful features of InTouch. Learn how to Integrate the InTouch SDK", "• Setup: Please contact apisupport@mapmyindia.com to get the Intouch SDK authorization for your Client ID and Client Secret. - Quick Start: Start with a ready-to-go app - Integrate the SDK: Integrate the SDK into your app - Dashboard: See all your devices' locations on MapmyIndia InTouch Dashboard" ] }, { "title": "Setup", "level": 2, "paragraphs": [ "We use your Client ID to identify your account details and assign all your user's devices under a single account.", "To get your Outh2 Rest API Client ID and Client Secret please login to MapmyIndia API Dashboard", "Please contact apisupport@mapmyindia.com to get InTouch SDK access to your Client ID", "After getting the access, you can start with the InTouchDemo app, or Integrate the InTouch SDK in your app." ] }, { "title": "InTouchDemo app", "level": 2, "paragraphs": [ "This guide allows you to add live location tracking to your react native app. Visual Studio is the recommended development environment for building an app with the MapmyIndia InTouch React native SDK or you can use any other IDE." ] }, { "title": "Step 1. Download the InTouchDemo App.", "level": 4, "paragraphs": [ "Click here to download the InTouchDemo App Project. Open this project in Visual Studio" ] }, { "title": "Step 2. Set your key", "level": 4, "paragraphs": [ "1. Add the Client Id and Client Secret to InputScreen.js file.", "2. Run npm install", "3. Run project on your device using simulator instance using below mentioned command line.", "npx react-native run-android" ] }, { "title": "Getting started", "level": 2, "paragraphs": [ "Install the below mentioned library in your project.", "npm install mapmyindia-intouch-react-native-sdk --save", "• If using React-native<0.60 react-native link mapmyindia-intouch-react-native-sdk" ] }, { "title": "Installation", "level": 2, "paragraphs": [ "For Android and Ios add the below mentioned lines" ] }, { "title": "Android", "level": 3, "paragraphs": [ "• Add following line in android/build.gradle file:-", "• Add following line in android/app/build.gradle file:-" ] }, { "title": "Note:", "level": 4, "paragraphs": [ "1. Java Version 11 Required 2. minimum compileSdkVersion 31 required" ] }, { "title": "IOS", "level": 3, "paragraphs": [ "• Add follwoing permissions in your project's plist.info", "NSLocationAlwaysAndWhenInUseUsageDescription Your location is used to personalize content.", "NSLocationAlwaysUsageDescription Your location is used to personalize content.", "NSLocationWhenInUseUsageDescription Your location is used to personalize content.", "NSMotionUsageDescription In order to count steps I need an access to your pedometer", "UIBackgroundModes fetch location Add following function in your project's AppDelegate.h objectivec #import Add following function in your project's AppDelegate.m" ] }, { "title": "Step 3: Initialize Intouch SDK", "level": 4, "paragraphs": [ "Initialize the SDK with your Client ID and Client Secret and device name.Device name helps to identify the user on Portal." ] }, { "title": "OR", "level": 3, "paragraphs": [ "Initialize the SDK with your Client ID , Client Secret , device name and deviceId. deviceId should be unique ID for every user. deviceId will be used to store the data against the particular user. deviceName will be used to identify the user on Portal", "javascript MapmyIndiaIntouch.initializeWithDeviceId(deviceName,clientId,clientSecret,deviceId, (result) => { if (result === 'success') { //success } else { //error });", "Note:This method can be used in case if your users uses two mobile phone. In this case, Both the mobile phone data will be pushed against the same deviceID. So ensure that before user logging into the new phone, logout the user from previous phone and call the stop tracking method. So that always tracking data will come from the single phone." ] }, { "title": "Step 5. Start tracking", "level": 4, "paragraphs": [ "Track your app user's phone live location by using the below method.", "You can start tracking using below three options", "• MapmyIndiaIntouch.BEACONPRIORITYFAST - MapmyIndiaIntouch.BEACONPRIORITYOPTIMAL(default) - MapmyIndiaIntouch.BEACONPRIORITYSLOW javascript MapmyIndiaIntouch.startTracking(MapmyIndiaIntouch.BEACONPRIORITYOPTIMAL); Note: If no priority provided default will be used." ] }, { "title": "OR", "level": 4, "paragraphs": [ "javascript MapmyIndiaIntouch.startTrackingWithCustomConfig({ standByTimeInMins: 1,//mandatory timeWhileMovingInSec: 10,//mandatory enableRequestPermissionIfMissing:true autoTrackingConfig: {endTimeConfig: {hour: 7, minute: 58, amPm: \"pm\"}} });", "• timeWhileMovingInSec:(number) tracking api hit time while moving in seconds.", "• standByTimeInMins:(number) tracking api hit time while standby in minutes." ] }, { "title": "Only for android Platform", "level": 4, "paragraphs": [ "• enableRequestPermissionIfMissing(boolean) Location permissions will handle by SDK if set to true.Default value is true autoTrackingConfig(object): To set auto tracking settings: endTimeConfig(object): To set option to stop the tracking at time hour(number): To set hours (1-12) minute(number): To set minutes (0 - 59). Default value 0 second(number): To set seconds (0 - 59). Default is 0 amPm(String): am or pm. Default value is am" ] }, { "title": "Step 6. Stop tracking", "level": 4, "paragraphs": [ "To stop your app user's phone live location tracking use the below mentioned method." ] }, { "title": "Step 7. Listen for tracking events", "level": 4, "paragraphs": [ "This method will be called when tracking starts, stops or some tracking error is caught." ] }, { "title": "Step 8. Remove Listener", "level": 4, "paragraphs": [ "This method will remove TrackingStateListener. Call this method before Unmounting component." ] }, { "title": "Step 9. getCurrentLocationUpdate", "level": 4, "paragraphs": [ "Updates single location on server and return to the user javascript try { const res= await MapmyIndiaIntouch.getCurrentLocationUpdate(); //do something with response } catch (e) { //error log } optional parameter(Android) enableRequestPermissionIfMissing(boolean) Location permissions will be handled by SDK if set to true.Default value is true.", "Email us at apisupport@mapmyindia.com", "Ask a question under the mapmyindia-api", "Need support? contact us!", "Read about the latest updates & customer stories", "© Copyright 2022. CE Info Systems Ltd. All Rights Reserved. | Terms & Conditions" ] } ], "snippets": [ { "language": "Groovy", "label": "Android", "code": "allprojects {\n repositories {\n mavenLocal()\n maven {\n// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n url(\"$rootDir/../node_modules/react-native/android\")\n }\n maven {\n // Android JSC is installed from npm\n url(\"$rootDir/../node_modules/jsc-android/dist\")\n }\n\n \n+ maven { url 'https://maven.mapmyindia.com/repository/mapmyindia/'}\n\n google()\n jcenter()\n maven { url 'https://www.jitpack.io' }\n\n }\n\n}" }, { "language": "Groovy", "label": "Android", "code": "defaultConfig {\n\napplicationId \"com.intouch_react_native_sample\"\n\nminSdkVersion rootProject.ext.minSdkVersion\n\ntargetSdkVersion rootProject.ext.targetSdkVersion\n\nversionCode 1\n\nversionName \"1.0\"\n\n+ multiDexEnabled true\n\n}" }, { "language": "JavaScript", "label": "Step 1: Import Intouch SDK", "code": "import MapmyIndiaIntouch from 'mapmyindia-intouch-react-native-sdk';" }, { "language": "JavaScript", "label": "Step 2. Check if Intouch SDK is already initialized", "code": "const status = await MapmyIndiaIntouch.isInitialized();" }, { "language": "JavaScript", "label": "Step 3: Initialize Intouch SDK", "code": "MapmyIndiaIntouch.initialize(deviceName,clientId,clientSecret)\n .then(entityId => {\n console.log(entityId);\n }).catch(err=>{\n console.log(err.message)\n });" }, { "language": "JavaScript", "label": "Step 4: Check if Intouch SDK is already running", "code": "const status = await MapmyIndiaIntouch.isRunning()" }, { "language": "JavaScript", "label": "Step 5. Start tracking", "code": "MapmyIndiaIntouch.startTracking();" }, { "language": "JavaScript", "label": "Step 6. Stop tracking", "code": "MapmyIndiaIntouch.stopTracking();" }, { "language": "JavaScript", "label": "Step 7. Listen for tracking events", "code": "MapmyIndiaIntouch.addTrackingStateListener((event) => {\nif(event === 'onTrackingStart'){\n\n}else if(event === 'onTrackingStop'){\n\n}\n},(error)=>{\nconsole.log(error.message);\n});" }, { "language": "JavaScript", "label": "Step 8. Remove Listener", "code": "MapmyIndiaIntouch.removeTrackingStateListener();" } ], "endpointEvidence": [ "https://github.com/MapmyIndia/mapmyindia-intouch-react-native-sdk#AddInTouchSDK", "https://github.com/MapmyIndia/mapmyindia-intouch-react-native-sdk#Setup):", "https://github.com/MapmyIndia/mapmyindia-intouch-react-native-sdk#intouchdemo-app):", "https://github.com/MapmyIndia/mapmyindia-intouch-react-native-sdk#IntegrateIntouchSDK):", "https://intouch.mapmyindia.com/nextgen):", "https://www.mapmyindia.com/api/dashboard", "https://code.visualstudio.com/?wt.mc_id=DX_841432", "https://github.com/MapmyIndia/mapmyindia-intouch-react-native-sdk/archive/main.zip", "https://intouch.mapmyindia.com/nextgen", "https://maven.mapmyindia.com/repository/mapmyindia/'%7D", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 27, "endpointCount": 17, "codeSampleCount": 10, "fingerprint": "5308f84765ed33f994e7e78369adc761b1bbbb8b5fe6678f28705b9200d8ff2c" } } ``` ## source-reference · Mapmyindia Intouch REST Apis - Identity: `source-reference:mapmyindia-intouch-rest-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-rest-apis - State model: stateful ```json { "slug": "mapmyindia-intouch-rest-apis", "sourceId": "public-mapmyindia-intouch-rest-apis", "name": "mapmyindia-intouch-rest-apis", "title": "Mapmyindia Intouch REST Apis", "summary": "A Mappls rest api for tracking telematics across REST.", "kind": "REST API", "maturity": "deprecated", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics" ], "platforms": [ "REST" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-rest-apis", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-intouch-rest-apis/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-rest-apis/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-06-06T10:44:49Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-rest-apis" ], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests" ], "sections": [], "snippets": [], "endpointEvidence": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 1, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "e710e26285a1a2e7adfd79af416ee5074734093a377001519fff927baacd0475" } } ``` ## source-reference · Mapmyindia Intouch Web Plugins - Identity: `source-reference:mapmyindia-intouch-web-plugins` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-web-plugins - State model: stateful ```json { "slug": "mapmyindia-intouch-web-plugins", "sourceId": "public-mapmyindia-intouch-web-plugins", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Web", "Widgets/Deep links" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-intouch-web-plugins", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-intouch-web-plugins/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-intouch-web-plugins/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-08-30T10:24:53Z", "localCandidates": [], "prerequisites": [ "A browser application and an allowed development origin" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The Intouch Web widgets have been introduced to help consumers of our Intouch platform be able to quickly integrate certain visualization like: - Live tracking of a device - Order Tracking of a delivery agent - + many more...", "in a quick, easy and efficient manner without significant development effort.", "The objective of these widgets is to ensure more and more of Intouch platforms unique value adding functionalities/features are made available to consumers such that they can ingest these features within their own apps/solutions without having excessive dependency of operating Intouch Web console as well along with their own applications and to ensure that all valuable information is made available inside consumer's own unique workviews.", "To read further, please have a look at the technical documentation presented as follows:" ] }, { "title": "Intouch Web Widgets Documentation", "level": 3, "paragraphs": [ "1. Intouch Web Widgets V2 2. Intouch Web Widgets V1", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 5, "endpointCount": 16, "codeSampleCount": 0, "fingerprint": "46c4e6b6f458cbdde4ea79647496d6dd11c34a0f3875805165d65c8635844b7e" } } ``` ## source-reference · MapmyIndia Map SDK for Cordova/Ionic - Beta 1 - Identity: `source-reference:mapmyindia-map-cordova-ionic-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-map-cordova-ionic-beta - State model: stateless ```json { "slug": "mapmyindia-map-cordova-ionic-beta", "sourceId": "public-mapmyindia-map-cordova-ionic-beta", "name": "mapmyindia-map-cordova-ionic-beta", "title": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "summary": "MapmyIndia Map library for Cordova/Ionic - Beta 1 Hybrid SDK", "kind": "Guide", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "gis-analytics", "widgets-deep-links" ], "platforms": [ "Cordova/Ionic" ], "authSignals": [ "api-key" ], "languages": [ "JavaScript", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-map-cordova-ionic-beta", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-map-cordova-ionic-beta/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-map-cordova-ionic-beta/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-03-08T11:25:28Z", "localCandidates": [ "contenthub/dochub/mapmyindia-map-cordova-ionic-beta" ], "prerequisites": [ "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "level": 1, "paragraphs": [ "For full documentation contact MapmyIndia here: MapmyIndia: apisupport@mapmyindia.com. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "This is a NPM based packaged SDK which can be installed directly through NPM.", "Create your own Cordova Based native app powered by MapmyIndia Maps and deploy them to various native mobile platforms.", "Package name: mapmyindia-map-cordova-ionic-beta" ] }, { "title": "Technologies", "level": 3, "paragraphs": [ "Node.js, Javascript,React JS, Cordova, Ionic, leaflet" ] }, { "title": "Installation", "level": 2, "paragraphs": [ "• ##### Add this plugin to your app's module(app.module.ts) and also include as a provider if you are using IONIC V>1 ie. below" ] }, { "title": "1. MapLoad", "level": 4, "paragraphs": [ "loadmap method needs two parameters to initialize a map in SDK 1) Map div #id // with proper css width & height 2) Map parameters - Key : your api map key from Mapmyindia (mandatory) - Zoomcontrol - Search control - center centre map to a geoposition e.g. center:[25.5454,77.54545] - Location control - For better GPS location add cordova geolocation plugin: cordova plugin add cordova-plugin-geolocation" ] }, { "title": "1. Zoom", "level": 4, "paragraphs": [ "Zoom control can be controlled by using the following parameter:", "• zoom number between 4 to 18 //To show initial map zoom e.g. zoom:15 - control //To show or hide the zoom control; takes boolean values e.g. control:true - position:[topPosition,leftPosition] To change the position of the control The topPosition or leftPosition can be absolute values in pixels or relative values in percentage e.g. position:['150px','200px'] OR position:['10%','20%']" ] }, { "title": "2. Location", "level": 4, "paragraphs": [ "A location control provides a button that uses the GPS geolocation API to locate the user on the map.", "• control //To show or hide the zoom control; takes boolean values. e.g. control:true - initial default false; to call location on map load; takes boolean values. e.g. initial:true - zoom set any any initial zoom on location; takes integer zoom levels from 4 to 17. - bounds set location bound with center to default level zoom 16. - html icon (html) for showing location on map. - position:[topPosition,leftPosition] To change the position of the control The topPosition or leftPosition can be absolute values in pixels or relative values in percentage e.g. position:['150px','200px'] OR position:['10%','20%']", "##### Example of using location location:{control:true, initial:true, zoom:12}", "Tip: For better GPS location use cordova geolocation plugin cordova plugin add cordova-plugin-geolocation" ] }, { "title": "3. Scale", "level": 4, "paragraphs": [ "A map scale represented as a unitless factor (e.g. 1:50000) means that a single map unit represents X real world units (e.g. a meter in the map = 50 km in reality). To show scale on the maps, scale control can be used; which has the following parameters:", "• scaledefault false; to show scale; takes boolean values. e.g. initial:true - position:[topPosition,leftPosition] To change the position of the control The topPosition or leftPosition can be absolute values in pixels or relative values in percentage e.g. position:['150px','200px'] OR position:['10%','20%']#### 4. Map Layers", "##### 1. Hybrid Hybrid maps can be shown or hidden with the help of a method call. Hybrid maps are satellite maps overlayed with MapmyIndia Map labels and transportation network.", "• Hide hybrid maps", "##### 2. Traffic Traffic layer can be shown or hidden with the help of a method call. Traffic layer is the traffic flow overlay within MapmyIndia Maps that shows the flow of traffic on road segments. This overlay is available only for paid customers.", "• Show traffic layer" ] }, { "title": "1. Markers", "level": 4, "paragraphs": [ "We support leaflet marker method for adding markers in app.", "##### Adding markers via Custom marker method", "1. Marker Object: (mandatory) it can be single array with lat, long;", "Other Optional Parameters within array for single & group markers:", "• tooltip - popup - divicon - events", "With multiple markers array" ] }, { "title": "2. Polylines", "level": 4, "paragraphs": [ "MapmyIndia Hybrid SDK offers a class for drawing polyline overlays on a map. Leaflet Properties & Events are also supported in our Hybrid SDK as illustrated in the following code snippet.", "##### Using Custom method for Polylines", "This has some additional parameters to manage:", "1. Points: it can be simple points array or geoJSON array. 2. Options: All Leaflet options with additional parameters. - fitbounds:true/false (can take either boolean value) - tooltip:text (replace 'text' with whatever tooltip you wish to use. - popup:text/html (Use a simple text or HTML as popup) - openpopup:true/false (control the behaviour of pop when HTML onload event is fired) - decorator", "##### Events on Polylines", "All Leaflet Events supported." ] }, { "title": "3. Circles", "level": 4, "paragraphs": [ "MapmyIndia Hybrid SDK offers a class for drawing circle overlays on a map.", "##### Addition of Circles", "Leaflet Properties & Events related to circles are also supported in our Hybrid SDK." ] }, { "title": "4. Polygons", "level": 4, "paragraphs": [ "MapmyIndia Hybrid SDK offers a class for drawing polygon overlays on a map.", "##### Addition of Polygons", "Leaflet Properties & Events for polygons thus added are also supported in our Hybrid SDK.", "##### Adding tooltips to Polygons" ] }, { "title": "Available Plugins:-", "level": 3, "paragraphs": [ "• Marker Plugin - Markers based on eloc only getEloc Plugin Search Plugin Nearby Plugin PlacePicker Plugin getDistance Plugin", "Documention Link: https://github.com/MapmyIndia/mapmyindia-places-n-directions-web-sdk" ] }, { "title": "Example with map", "level": 3, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!", "Blog Read about the latest updates & customer stories", "� Copyright 2022. CE Info Systems Ltd. All Rights Reserved. | Terms & Conditions > Written with StackEdit by MapmyIndia." ] } ], "snippets": [ { "language": "JavaScript", "label": "Installation", "code": "npm i mapmyindia-map-cordova-ionic-beta" }, { "language": "JavaScript", "label": "Installation", "code": "import { mmi } from 'mapmyindia-map-cordova-ionic-beta';\n@NgModule({\n ...\n\n providers: [\n ...\n mmi\n ...\n ]\n ...\n})\nexport class AppModule { }" }, { "language": "JavaScript", "label": "General Usage", "code": "import { mmi } from 'mapmyindia-map-cordova-ionic-beta';\n\n...\n\nconstructor(private maps: mmi) {} //Useful for Ionic\n\nor \n\nthis.maps=new mmi();" }, { "language": "JavaScript", "label": "1. MapLoad", "code": "var load_maps=this.maps.loadMaps('map',{key:'',zoom:{control:true},location:{control:true,initial:true,bounds:true}});" }, { "language": "JavaScript", "label": "3. Scale", "code": "this.maps.hybrid (true);" }, { "language": "JavaScript", "label": "3. Scale", "code": "this.maps.hybrid (false);" }, { "language": "JavaScript", "label": "3. Scale", "code": "this.maps.traffic (true);" }, { "language": "JavaScript", "label": "3. Scale", "code": "this.maps.traffic (false);" }, { "language": "JavaScript", "label": "3. Scale", "code": "mapss.removeLayer(map_marker);" }, { "language": "JavaScript", "label": "3. Scale", "code": "this.maps.removeLayer(map_marker);" }, { "language": "JavaScript", "label": "3. Scale", "code": "map_marker.remove();" }, { "language": "JavaScript", "label": "1. Markers", "code": "this.maps.L.marker([28.5, 77.5]).addTo(map object);" }, { "language": "Text", "label": "1. Markers", "code": "var marker=this.maps.marker(mrker_arr,\n {\n\t iconUrl:\"assets/imgs/logo.png\", iconSize:[36,51],popupAnchor:[0,-16],draggable:true,fitbounds:true,cluster:true\n\t });" }, { "language": "JavaScript", "label": "1. Markers", "code": "var mrker_arr= [28.5454,77.545454];" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api/img/mapmyindia-api.png)](https://www.mapmyindia.com/api/", "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://www.npmjs.com/~balmukand", "https://www.mapmyindia.com/api/dashboard", "https://github.com/MapmyIndia/mapmyindia-places-n-directions-web-sdk", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont", "https://stackedit.io/" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 23, "endpointCount": 14, "codeSampleCount": 14, "fingerprint": "5f735965d8989d61adc3fbbe3abd36944d7bcf94dbbbe1f13e5ff582a93875cd" } } ``` ## source-reference · Mapmyindia Maps SDK for React Native beta - Identity: `source-reference:mapmyindia-map-react-native-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-map-react-native-beta - State model: stateless ```json { "slug": "mapmyindia-map-react-native-beta", "sourceId": "public-mapmyindia-map-react-native-beta", "name": "mapmyindia-map-react-native-beta", "title": "Mapmyindia Maps SDK for React Native beta", "summary": "MapmyIndia Map library for React Native - Beta release Hybrid SDK", "kind": "Guide", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform" ], "platforms": [ "React Native" ], "authSignals": [ "oauth2", "api-key", "licensed-entitlement" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-map-react-native-beta", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-map-react-native-beta/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-map-react-native-beta/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-03-24T09:12:07Z", "localCandidates": [ "contenthub/dochub/mapmyindia-map-react-native-beta" ], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Mapmyindia Maps SDK for React Native beta", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan and Bangladesh", "1. For further information contact MapmyIndia here: Email: apisupport@mapmyindia.com. 2. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup 3. The beta code is provided to help you understand the basic functionality of MapmyIndia maps APIs working on React Native development platform." ] }, { "title": "What is Mapmyindia?", "level": 2, "paragraphs": [ "Mapmyindia is the location data platform for mobile and web applications. We provide building blocks to add location features like maps, search, and navigation into any experience you create. Use our simple and powerful APIs & SDKs for interactivity and control." ] }, { "title": "Sign up for Mapmyindia", "level": 2, "paragraphs": [ "Not a Mapmyindia user yet? Sign up for an account here. Once you’re signed in, all you need to start building is a Mapmyindia key. Use this same short code with all of our interactive mapping libraries, JavaScript SDKs, and directly against our REST APIs. You can create and manage your access tokens on your Mapmyindia Account page." ] }, { "title": "API Usage", "level": 2, "paragraphs": [ "Your MapmyIndia Maps SDK usage needs a set of license keys (get them here ) and is governed by the API terms and conditions. As part of the terms and conditions, you cannot remove or hide the MapmyIndia logo and copyright information in your project. Please see branding guidelines on MapmyIndia website for more details. The allowed SDK hits are described on the plans page. Note that your usage is shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "• node npm React Native: recommended version 0.60 or greater" ] }, { "title": "How to Add a MapView", "level": 2, "paragraphs": [ "javascript import React, { Component } from \"react\"; import {View } from \"react-native\"; import MapmyIndiaGL from 'mapmyindia-map-react-native-beta';", "MapmyIndiaGL.setMapSDKKey(\"\");//place your mapsdkKey MapmyIndiaGL.setRestAPIKey(\"\");//your restApiKey MapmyIndiaGL.setAtlasClientId(\"\");//your atlasClientId key MapmyIndiaGL.setAtlasClientSecret(\"\"); //your atlasClientSecret key MapmyIndiaGL.setAtlasGrantType(\"\");", "export default class App extends Component { render() { return ( (this.camera = c)} zoomLevel={12} minZoomLevel={4} maxZoomLevel={22} centerCoordinate={[77.231409,28.6162]} /> ); } }" ] }, { "title": "Components", "level": 3, "paragraphs": [ "• MapView Light PointAnnotation Callout Camera UserLocation Images" ] }, { "title": "Sources", "level": 3, "paragraphs": [ "• ShapeSource VectorSource RasterSource" ] }, { "title": "Layers", "level": 3, "paragraphs": [ "• BackgroundLayer CircleLayer FillLayer LineLayer SymbolLayer" ] }, { "title": "IMPORTANT", "level": 2, "paragraphs": [ "To read further, please refer to documentation available here: https://github.com/mappls-api/mapmyindia-map-react-native-beta/wiki", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!", "Blog Read about the latest updates & customer stories" ] } ], "snippets": [ { "language": "Text", "label": "Installation", "code": "npm install mapmyindia-map-react-native-beta --save" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/mdakram", "https://github.com/spacekingindia", "https://www.mapmyindia.com/", "https://www.mapmyindia.com/api/signup).", "https://www.mapmyindia.com/api/dashboard).", "https://www.mapmyindia.com/api/terms-&-conditions).", "https://www.mapmyindia.com/api/advanced-maps/API-Branding-Guidelines.pdf", "https://www.mapmyindia.com/api", "https://www.npmjs.com/", "https://facebook.github.io/react-native/):", "https://github.com/mappls-api/mapmyindia-map-react-native-beta/wiki/iOSInstall", "https://github.com/mappls-api/mapmyindia-map-react-native-beta/wiki/android_install", "https://github.com/mappls-api/mapmyindia-map-react-native-beta/wiki/MapView", "https://github.com/mappls-api/mapmyindia-map-react-native-beta/wiki/Light", "https://github.com/mappls-api/mapmyindia-map-react-native-beta/wiki/PointAnnotation" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 36, "codeSampleCount": 1, "fingerprint": "2f2e63a8feeec23664d02304f373e81af373f0c6738fc9d524c1247e5799ad22" } } ``` ## source-reference · MapmyIndia Vector Map Android SDK - Identity: `source-reference:mapmyindia-maps-vectorsdk-android` - Canonical: https://developer.mappls.com/reference/mapmyindia-maps-vectorsdk-android - State model: stateless ```json { "slug": "mapmyindia-maps-vectorsdk-android", "sourceId": "public-mapmyindia-maps-vectorsdk-android", "name": "mapmyindia-maps-vectorSDK-android", "title": "MapmyIndia Vector Map Android SDK", "summary": "MapmyIndia Vector Maps SDK for Native Android Development with REST API Kit", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android" ], "authSignals": [ "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-android", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-android/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-android/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-05-05T04:35:55Z", "localCandidates": [ "contenthub/dochub/mapmyindia-maps-vectorSDK-android" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "MapmyIndia Vector Map Android SDK", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan and Bangladesh", "1. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup", "2. The sample code is provided to help you understand the basic functionality of MapmyIndia maps & REST APIs working on Android native development platform.", "4. Explore through 238 nations with Global Search, Routing and Mapping APIs & SDKs by MapmyIndia." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Vector Android Map Getting Started Setup your project Add your API keys to the SDK Add a MapmyIndia Map to your application Map Interactions Map Events Map Click/Long Press Map Overlays - Add A Marker - Remove A Marker - Customize A Marker - Add A Polyline - Remove Polyline - Add A Polygon - Remove Polygon Show User Location Calculate distance between two points Proguard - Map UI Settings Compass Settings Enable/Disable Zoom on double tap Logo Settings Enable/Disable Map Rotation Gessture Enable/Disable Map Scrolling Gesture Enable/Disable Map Tilt Gesture Enable/Disable Zoom Gestures - SDK Error Codes - Set Country Regions - Set MapmyIndia MapStyle List of Available Styles Set MapmyIndia Style To enable/disable last selected style Get selected style - REST API Kit Search API's - Auto Suggest - Geocoding - Reverse Geocoding - Nearby Places - eLoc - Place Detail - POI Along the Route", "• Routes & Navigation API - Routing API - Driving Distance Matrix API Feedback API Nearby Reports - MapmyIndia GeoAnalytics - Place Autocomplete Widget PlaceAutocompleteFragment PlaceAutocompleteActivity - MapmyIndia Safety Plugin - MapmyIndia Interactive Layer - MapmyIndia GeoFence View - MapmyIndia Safety Strip - MapmyIndia Place Picker - MapmyIndia Scalebar Plugin - ELocation Strategy - MapmyIndia Direction Widget - MapmyIndia Nearby Search Widget Introduction Adding Credentials Launching Nearby Widget - MapmyIndiaNearbyFragment - MapmyIndiaNearbyActivity - Driving Range Plugin - Introduction - Implementation - Initialise Plugin - Plot Driving Range - Additional Features - Version History - Country List", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://github.com/mdakram", "https://github.com/saksham66", "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 12, "codeSampleCount": 0, "fingerprint": "ebbf7b3285901de88cbc9a9186189e01941649952363c0faf7992b0678712c13" } } ``` ## source-reference · Mapmyindia Maps VectorSDK IOS - Identity: `source-reference:mapmyindia-maps-vectorsdk-ios` - Canonical: https://developer.mappls.com/reference/mapmyindia-maps-vectorsdk-ios - State model: stateless ```json { "slug": "mapmyindia-maps-vectorsdk-ios", "sourceId": "public-mapmyindia-maps-vectorsdk-ios", "name": "mapmyindia-maps-vectorSDK-iOS", "title": "Mapmyindia Maps VectorSDK IOS", "summary": "MapmyIndia Vector Maps SDK for Native iOS Development with REST API Kit", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2023-11-30T12:45:22Z", "localCandidates": [ "contenthub/bm21/mapmyindia-maps-vectorSDK-iOS", "contenthub/dochub/mapmyindia-maps-vectorSDK-iOS" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] }, { "title": "MapmyIndia Vector Maps iOS SDK", "level": 1, "paragraphs": [ "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan, Myanmar and Bangladesh", "1. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup", "2. The sample code is provided to help you understand the basic functionality of MapmyIndia maps & REST APIs working on iOS native development platform.", "3. Explore through 238 nations with Global Search, Routing and Mapping APIs & SDKs by MapmyIndia." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Vector iOS Map Getting Started API Usage Setup your Project Add a MapmyIndia Map Map Interactions Map Features Map Events Map Overlays Polylines Polygons Map Camera Miscellaneous Cluster Based Authentication - MapmyIndiaGeoanalytics - Set Country Regions - Set MapmyIndiaMap Style", "• MapmyIndiaDirections", "• Autosuggest API Reverse Geocode API Nearby API Place Details/eLoc Legacy API Place Detail Geocode API Routing API Driving Distance - Time Matrix API Geocoding API - Legacy Routing API - Legacy Distance Matrix API - Legacy POI Along The Route Nearby Reports API", "• MapmyIndia Safety Plugin", "• Introduction - Steps to Integrate - Setup Your Project - Initializion - Start Plugin - Stop Safety Plugin - Current Location Safety - Enable or Disable Local Notification - MapmyIndiaSafetyPluginDelegate Protocol", "• MapmyIndia Feedback Kit" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 5, "endpointCount": 9, "codeSampleCount": 0, "fingerprint": "f00fa5fbfcc4732a0506756860bb5118a8b53e2066b3be6e832d46f796d535f5" } } ``` ## source-reference · Mappls mGIS APIs - Identity: `source-reference:mapmyindia-mgis-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-mgis-apis - State model: stateful ```json { "slug": "mapmyindia-mgis-apis", "sourceId": "public-mapmyindia-mgis-apis", "name": "mapmyindia-mgis-apis", "title": "Mappls mGIS APIs", "summary": "Using these APIs developers can fully leverage and embed the power of GeoSpatial Analytics, GIS and location intelligence and AI. These APIs allow a developer to integrate into their own application the power and full set of functionalities of the mGIS product and platform.", "kind": "REST API", "maturity": "legacy", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "mgis" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "ai-vision", "capture-feedback" ], "platforms": [ "REST" ], "authSignals": [], "languages": [ "Text" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-mgis-apis", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-mgis-apis/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-mgis-apis/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-08-30T06:57:27Z", "localCandidates": [], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Using these APIs developers can fully leverage and embed the power of GeoSpatial Analytics, GIS and location intelligence and AI. These APIs allow a developer to integrate into their own application the power and full set of functionalities of the mGIS product and platform." ] }, { "title": "API Features", "level": 2, "paragraphs": [ "mGIS APIs are grouped under various categories providing wide range of functionalities which can be leveraged by enterprise and consumer", "• Search & Navigation APIs - Data Operations APIs - Layer Styling APIs - Dataset Query & Validation APIs - Layer Visualization & Info APIs - Raster Catalogue APIs - Satellite Image Segmentation API - Export Feature API" ] }, { "title": "How mGIS APIs Enhance Value of any Solution", "level": 2, "paragraphs": [ "mGIS can serve different types of customers on the basis of the type of analytics OR on the basis of the type of datasets they possess. E.g. a user who has a non spatial address dataset wants to upload on mGIS and perform geospatial visualization and queries." ] }, { "title": "For this you will perform below steps:", "level": 3, "paragraphs": [ "• Use ‘generate batch geocode layer’ to get geospatial references of your dataset - Use SAT API to save the resultant as a new layer or append into existing layer (above steps will add layer with basic style) - Use Styling API in case you need to do visualisation based analytics - Use Layer Visualisation API to get WMS image and feature info of a feature. Using this API you can also get the legend of the layer - Use Dataset Query APIs to perform basic and cross join analytics on your dataset, resultant of which can be further saved." ] }, { "title": "Search And Navigation APIs", "level": 2, "paragraphs": [ "Search and Navigation APIs group consist of APIs which can be used to perform batch operations.", "These APIs can take input in several form factors:" ] }, { "title": "Documentation", "level": 3, "paragraphs": [ "Contact API Support" ] }, { "title": "Generate Batch Geocode Layer", "level": 3, "paragraphs": [ "This API is useful if the user has a list of addresses and wants to have them georeferenced for visualization and analytics." ] }, { "title": "Generate Batch Rev-Geocode Layer", "level": 3, "paragraphs": [ "If the user has a list of latitude and longitude values and wishes to categorize them based on belonging to residential/commercial areas, this API can be used." ] }, { "title": "Generate Batch Routing Layer", "level": 3, "paragraphs": [ "Generally, when a user wishes to see multiple routes for multiple route points and wants to align them visually on the basis of travel time/distance to make some decision, this API is used to generate said travel graphs." ] }, { "title": "Data Operations APIs", "level": 2, "paragraphs": [ "This group of APIs are used for adding the datasets in different formats to the mGIS engine", "These APIs support below datasets:" ] }, { "title": "SAT (Save, Append and Truncate) API", "level": 3, "paragraphs": [ "This API is used to save user dataset with multiple saving options like append, truncate etc. on mGIS cloud with basic visualisation style." ] }, { "title": "Describe Dataset API", "level": 3, "paragraphs": [ "Describe Dataset API provides all attribute names along with the data type of a dataset." ] }, { "title": "Get Layer List API", "level": 3, "paragraphs": [ "This API lists down all the datasets that exist on an mGIS user’s cloud along with the geometry type of each dataset." ] }, { "title": "Get Geometry Type API", "level": 3, "paragraphs": [ "This API returns the geometry type of a single dataset (Line/Point /Polygon/Multi Geometry)." ] }, { "title": "Get Dataset API", "level": 3, "paragraphs": [ "This API reads a dataset with options like read entire dataset, read only specific attributes of a dataset etc." ] }, { "title": "Layer Styling APIs", "level": 2, "paragraphs": [ "Layer Styling API is used to update and add new styles to existing datasets." ] }, { "title": "Documentation", "level": 4, "paragraphs": [ "Contact API Support" ] }, { "title": "See Video Demo", "level": 3, "paragraphs": [ "These layer styles are listed below:", "• Basic Style - Category Based Style - Bubble Style - Cluster Style - Gradient Style - Heatmap Style - Pie Chart Style - Bar Chart Style - D3bubble style - Style with label" ] }, { "title": "Dataset Query And Validation APIs", "level": 2, "paragraphs": [ "This group of APIs are used to perform different data analytics and save results as a new dataset." ] }, { "title": "See Video Demo", "level": 3, "paragraphs": [ "User can perform below operations on dataset :", "• Results can be fetched of the basic query, cross join query and spatial query like In, NOT, IN, Like etc. - Arithmetic operations, geometric operations and aggregate operations can be performed through query on a dataset. - Order by and Group by with a query can be applied on a dataset." ] }, { "title": "Layer Visualization And Info APIs", "level": 2, "paragraphs": [ "This group consists of multiple APIs that allow users to visualise and analyse their dataset using different styles, get feature info of a feature and legends." ] }, { "title": "See Video Demo", "level": 3, "paragraphs": [ "These APIs form the basic foundation of geo visualisation and geo analytics." ] }, { "title": "Get Map API", "level": 3, "paragraphs": [ "This API fetches the map tiles of an entire dataset with basic queries, queried results of cross join/spatial join between two datasets and geometric function can be performed as well." ] }, { "title": "Get Feature Info API", "level": 3, "paragraphs": [ "This API fetches information of a feature that lies on the x and y pixel at which the user clicks. Response of the API changes based on the style that user has assigned to it." ] } ], "snippets": [ { "language": "Text", "label": "Search And Navigation APIs", "code": ".csv | .xlsx | xls | XLSX | XLS | xlt | XLT | xlsm | XLSM | xltx | XLTX" }, { "language": "Text", "label": "Data Operations APIs", "code": "GEOJSON | KML | CSV | XLSX | XLS | SHP(ZIP) | XLSM | XLT | XLTX" }, { "language": "Text", "label": "Export Feature API", "code": ".kml | .shp | .geojson" } ], "endpointEvidence": [ "https://about.mappls.com/api/", "https://www.mapmyindia.com/api/mgis-api/images/mgis/how-mgis-apis-e-value-of-any-solution_1.mp4", "https://www.mapmyindia.com/api/mgis-api/images/mgis/search-and-navigation-apis-mgis.mp4", "https://www.mapmyindia.com/api/mgis-api/images/mgis/data-operation.mp4", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Data%20Operations%20APIs%20%3E%20SAT%20APIs", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Data%20Operations%20APIs%20%3E%20Describe%20Dataset%20API", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Data%20Operations%20APIs%20%3E%20Get%20Layer%20List%20and%20Legends%20APIs", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Data%20Operations%20APIs%20%3E%20Get%20Geometry%20Type%20API", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Data%20Operations%20APIs%20%3E%20Get%20Dataset%20API", "https://www.mapmyindia.com/api/mgis-api/images/mgis/layer-styling-apis.mp4", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Dataset%20Query%20And%20Validation%20APIs", "https://www.mapmyindia.com/api/mgis-api/images/mgis/dataset-query-and-validation-apis.mp4", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=Data%20Operations%20APIs%20%3E%20v2%20%3E%20Layer%20Visualization%20and%20Info%20API", "https://www.mapmyindia.com/api/mgis-api/images/mgis/layer-visualizationandinfo-api.mp4", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=CV%20AI-ML%20APIs%20%3E%20v2%20%3E%20Satellite%20Image%20Segmentation%20API", "https://mappls-api.github.io/mapmyindia-mgis-apis/mgis-apis.html?urls.primaryName=User%20Data%20Exports%20%3E%20v2%20%3E%20Export%20Features%20APIs" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 43, "endpointCount": 30, "codeSampleCount": 3, "fingerprint": "a7e5c3d23ad304b91ca43ad58e02234adeee69798ed11dfc1533ff4d3a647386" } } ``` ## source-reference · Mapmyindia MGIS Libraries - Identity: `source-reference:mapmyindia-mgis-libraries` - Canonical: https://developer.mappls.com/reference/mapmyindia-mgis-libraries - State model: stateful ```json { "slug": "mapmyindia-mgis-libraries", "sourceId": "public-mapmyindia-mgis-libraries", "name": "mapmyindia-mgis-libraries", "title": "Mapmyindia MGIS Libraries", "summary": "A Mappls guide for maps, gis analytics, widgets deep links, capture feedback.", "kind": "Guide", "maturity": "legacy", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "mgis" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "maps", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Unspecified" ], "authSignals": [], "languages": [ "HTML", "Text", "JavaScript" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-mgis-libraries", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-mgis-libraries/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-mgis-libraries/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-08-07T09:10:40Z", "localCandidates": [], "prerequisites": [], "sections": [ { "title": "Overview", "level": 1, "paragraphs": [ "mGIS Widgets ============" ] }, { "title": "Introduction #", "level": 1, "paragraphs": [ "mGIS Widget wrapper includes many out-of-the-box widgets.These widgets provide standard functions to easily create GIS web portals.", "This wrapper has all of the parameters that allow configuration and customization.", "These widgets are categorized as integrated In-panel widgets which can be added to your app." ] }, { "title": "List of Available mGIS Widgets #", "level": 1, "paragraphs": [ "1. Map View-2D and 3D 2. Workview 3. Basemap Option 4. Basic Map Tools 5. 3D Landmark 6. Real View 7. Tour" ] }, { "title": "Demo #", "level": 1, "paragraphs": [ "How to use mgis widget?", "• Add mgis-widget script into html page", "• Declare widget container where widget to be initialized", "• Available Otions", "| Option | Type | Default Value | Description | | widgetName | String | | Name of the widget | | widgetKey | String | | Use Access Token as widget key | | widgetOptions | Object | widgetOptions | Widget options |", "| Option | Type | Default Value | Description | | mapViewMode | String | 2d | View mode of the map: \"2d\" or \"3d\" | | defaultBaseMap | String | mmi-raster | Default base map options: \"mmi-raster\", \"mmi-vector\", \"hr-imagery\", \"hr-imagery-hybrid\", etc. | | defaultView | Object | | Default view settings for the map (see below for details) | | mapControls | Boolean | true | Whether to show map controls (true/false) | | workViewName | String | | Name of the workview to load workview data | | Scene | Array | | Scene options for adding 3D Landmark GLTF Object or 3D Landmark tile on Cesium (see below for details) |" ] }, { "title": "Map View-2D and 3D", "level": 1, "paragraphs": [ "• Declare widget options", "• Create Instance of mgis-widget", "• Initialize mgis-widget", "• Update widget properties at run time" ] }, { "title": "Workview", "level": 1, "paragraphs": [ "• Declare widget options", "• Create Instance of mgis-widget", "• Initialize mgis-widget", "• Update widget properties at run time" ] }, { "title": "Basemap Option", "level": 1, "paragraphs": [ "• Declare widget options", "• Create Instance of mgis-widget", "• Initialize mgis-widget", "• Update widget properties at run time" ] }, { "title": "Basic Map Tools", "level": 1, "paragraphs": [ "• Declare widget options", "• Create Instance of mgis-widget", "• Initialize mgis-widget", "• Update widget properties at run time" ] }, { "title": "3D Landmark", "level": 1, "paragraphs": [ "• Declare widget options", "• Create Instance of mgis-widget", "• Initialize mgis-widget", "• Update widget properties at run time" ] }, { "title": "Real View", "level": 1, "paragraphs": [ "• Declare widget options", "• Create Instance of mgis-widget", "• Initialize mgis-widget", "• Update widget properties at run time", "For any queries and support, please contact: Email us at apisupport@mappls.com", "Support Need support? contact us!" ] } ], "snippets": [ { "language": "HTML", "label": "Demo #", "code": "" }, { "language": "JavaScript", "label": "Demo #", "code": "
" }, { "language": "JavaScript", "label": "Map View-2D and 3D", "code": "// Widget options\n var widgetOptions = {\n \"widgetName\": \"map-widget\", //Name Of The Widget\n \"widgetKey\": \"\", // Access Token as widget key\n \"widgetOptions\":{ // Widget Options\n \"mapViewMode\": \"2d\", // Default view mode map 2d or 3d\n \"defaultBaseMap\": \"mmi-raster\", // Set Default Base Map\n \"defaultView\": { // Set Default View Of The Map\n \"center\": [\n 28.7041,\n 77.1025\n ],\n \"zoom\": 12\n },\n \"mapControls\": true, // Show/Hide map controls\n }\n }" }, { "language": "JavaScript", "label": "Map View-2D and 3D", "code": "// Create widget\n var mgisWidget = new MGIS.Widget('widgetContainer',widgetOptions);" }, { "language": "JavaScript", "label": "Map View-2D and 3D", "code": "// Initialize widget\n mgisWidget.init();" }, { "language": "JavaScript", "label": "Map View-2D and 3D", "code": "//Change View Mode\n mgisWidget.setWidgetProperties({\n \"mapViewMode\": viewMode\n });\n\n //Show Map Controls\n mgisWidget.setWidgetProperties({\n \"mapControls\": true\n });\n\n //Hide Map Controls\n mgisWidget.setWidgetProperties({\n \"mapControls\": false\n });" }, { "language": "JavaScript", "label": "Workview", "code": "// Widget options\n var widgetOptions = {\n \"widgetName\": \"map-widget\", //Name Of The Widget\n \"widgetKey\": \"\", // Access Token as widget key\n \"widgetOptions\":{ // Widget Options\n \"mapViewMode\": \"2d\", // Default view mode map 2d or 3d\n \"defaultBaseMap\": \"mmi-raster\", // Set Default Base Map\n \"defaultView\": { // Set Default View Of The Map\n \"center\": [\n 28.7041,\n 77.1025\n ],\n \"zoom\": 12\n },\n \"mapControls\": true, // Show/Hide map controls\n \"workViewName\": \"styleTest\", // Load default workview,\n }\n }" }, { "language": "JavaScript", "label": "Workview", "code": "// Create widget\n var mgisWidget = new MGIS.Widget('widgetContainer',widgetOptions);" }, { "language": "JavaScript", "label": "Workview", "code": "// Initialize widget\n mgisWidget.init();" }, { "language": "JavaScript", "label": "Workview", "code": "//Change View Mode\n mgisWidget.setWidgetProperties({\n \"mapViewMode\": viewMode\n });\n\n //Show Map Controls\n mgisWidget.setWidgetProperties({\n \"mapControls\": true\n });\n\n //Hide Map Controls\n mgisWidget.setWidgetProperties({\n \"mapControls\": false\n });\n\n //Hide Map Controls\n mgisWidget.setWidgetProperties({\n \"workViewName\": 'ww5'\n });" }, { "language": "JavaScript", "label": "Basemap Option", "code": "// Widget options\n var widgetOptions = {\n \"widgetName\": \"map-widget\", //Name Of The Widget\n \"widgetKey\": \"\", // Access Token as widget key\n \"widgetOptions\":{ // Widget Options\n \"mapViewMode\": \"2d\", // Default view mode map 2d or 3d\n \"defaultBaseMap\": \"mmi-raster\", // Set Default Base Map\n \"defaultView\": { // Set Default View Of The Map\n \"center\": [\n 28.7041,\n 77.1025\n ],\n \"zoom\": 12\n },\n \"mapControls\": true, // Show/Hide map controls\n }\n }" }, { "language": "JavaScript", "label": "Basemap Option", "code": "// Create widget\n var mgisWidget = new MGIS.Widget('widgetContainer',widgetOptions);" }, { "language": "JavaScript", "label": "Basemap Option", "code": "// Initialize widget\n mgisWidget.init();" }, { "language": "JavaScript", "label": "Basemap Option", "code": "//Change View Mode\n mgisWidget.setWidgetProperties({\n \"mapViewMode\": viewMode\n });\n\n //Show Map Controls\n mgisWidget.setWidgetProperties({\n \"mapControls\": true\n });\n\n //Hide Map Controls\n mgisWidget.setWidgetProperties({\n \"mapControls\": false\n });" } ], "endpointEvidence": [ "https://about.mappls.com/api/", "https://mgis.mappls.com/mGIS_widgets/widgets.js", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 17, "codeSampleCount": 14, "fingerprint": "fe36e4b0fd610708ed6e903c9c6d88ce5374f6f10a2735a5226716874cd3dfb4" } } ``` ## source-reference · Mapmyindia Nearby Covid Places - Identity: `source-reference:mapmyindia-nearby-covid-places` - Canonical: https://developer.mappls.com/reference/mapmyindia-nearby-covid-places - State model: stateless ```json { "slug": "mapmyindia-nearby-covid-places", "sourceId": "public-mapmyindia-nearby-covid-places", "name": "mapmyindia-nearby-covid-places", "title": "Mapmyindia Nearby Covid Places", "summary": "MapmyIndia's easy to integrate Nearby COVID Places Search Widget for Apps. Easily integrate the simple JS widget into your codebase and help your users discover Nearby COVID Vaccination Centres. Help your users discover government approved Vaccination Centres across India during this pandemic.", "kind": "Widget", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Web" ], "authSignals": [], "languages": [ "HTML", "JavaScript", "CSS", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-nearby-covid-places", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-nearby-covid-places/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-nearby-covid-places/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2023-11-30T12:47:13Z", "localCandidates": [ "contenthub/dochub/mapmyindia-nearby-covid-places" ], "prerequisites": [ "A browser application and an allowed development origin" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "This is an easy & FREE to integrate Nearby COVID Places Search (such as Vaccine Centres, Hospitals, Testing Centres, Isolation Centres etc) Widget by MapmyIndia.", "Every person can benefit from being able to easily find nearby COVID vaccination centres, hospitals, testing centres etc - see them on a map, get directions, and get more information about them.", "We at MapmyIndia are continuously updating the database of COVID-related places, such as vaccine centres, treatment centres/hospitals, containment zones, testing centres, isolation centres etc. This is the most comprehensive pan India covid related map database, and we've released it for free through our MapmyIndia Move app (mapmyindia.com/move) and MapmyIndia Maps portal (maps.mapmyindia.com) and MapmyIndia Corona guide (maps.mapmyindia.com/corona).", "We're helping ANY website or app developer to easily integrate this information, as a FREE widget, for the benefit of your users and visitors.", "The widget can be used to search for vaccination centres, testing centres, sample collection centres, treatment centres, quarantine centres and micro containment zones across India.", "The image is for illustrative purposes only on how the widget might look like once integrated." ] }, { "title": "3 Step process to integrate Nearby COVID Places widget in any Web App", "level": 2, "paragraphs": [ "1. #### Step 1 Inside the section of HTML of web page, define a div into which the nearby COVID places widget from MapmyIndia needs to be loaded.", "2. #### Step 2 Inside the section of HTML of web page, or wherever else you find more suitable, include the following MapmyIndia javascript code.", "3. #### Step 3 To load up the nearby COVID places widget from MapmyIndia, call the following javascript code AFTER the mapmyindia javascript file (as defined in step 2) has loaded.", "That’s it - all done!", "On reloading your web page after integrating the code - 1) You should see a MapmyIndia Map on left, search box on top right, and based on current location the nearest COVID places in right panel. 2) The first time the code loads, the user may be prompted to share current location to browser so that the map and search results can be localised to the user 3) User can type into search box, any place of his/her interest, and as he/she types, suggested search results will get populated. Upon clicking of any, new map location with markers of the nearby COVID places, and search results in the panel will get updated. 4) In the search results panel (and on clicking a marker on the map) - details of the COVID places will show up AND a ‘Get Directions’ button will be there, clicking on which user will be directed to the the directions page (external link)." ] }, { "title": "Required Parameters", "level": 4, "paragraphs": [ "1. divID: This is a mandatory parameter which allows the widget to recognise the div where the content of the widget is to be loaded." ] }, { "title": "Optional Parameters", "level": 4, "paragraphs": [ "1. Params: - css(string): css' absolute URL as per the design of the target web app. This is ONLY required if and only if the target app wishes to over-ride the default css which is implicitly part of the plugin. NOT RECOMMENDED TO CHANGE. Please change only if absolutely necessary." ] }, { "title": "Sample CSS", "level": 3, "paragraphs": [ "(change NOT recommended)" ] }, { "title": "How to Search for Different Categories of COVID Places", "level": 2, "paragraphs": [ "The Nearby COVID Places Widget already has the capabilities to search for not only nearby vaccination centres, but other important COVID places as well. To search for other categories of COVID places, a simple additional parameter in the script URL of the widget enables you to specify which category you want the widget to search for." ] }, { "title": "Other Samples for COVID Nearby Places", "level": 3, "paragraphs": [ "Read the following Wiki article to see more sample of how to search for other types of COVID places using the Nearby Search Widget." ] }, { "title": "How to Embed the Widget as an iFrame", "level": 2, "paragraphs": [ "The most important thing to remember while embedding this widget in an iFrame is that, an iFrame by default, does NOT allow for geolocation access. This means that the widget won't get the current location of the user of the web page to allow searching for COVID places near his location.", "To overcome this, please ALWAYS add attribute of allowing geolocation in the iFrame tag as follows:" ] }, { "title": "Native Webview", "level": 3, "paragraphs": [ "The same URL can also be used for Native WebView implmentation of the Nearby COVID Places Widget." ] }, { "title": "Appendix: COVID Places Categories Supported", "level": 2, "paragraphs": [ "| Category Code | Description | | HSPVCC | Corona Vaccination Centres | | HSPTST | Corona Testing Centres | | HSPTMT | Corona Treatment Centres | | HSPCOV | Corona Quarantine Centre | | HSPSCC | Corona Sample Collection Centre | | CNTZON | Corona Micro Containment Zones |", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Support Need support? contact us!", "[](http://www.mapmyindia.com/blog/)[](https://github.com/MapmyIndia)", "[](https://twitter.com/MapmyIndia)[](https://www.linkedin.com/company/mapmyindia)[](https://www.youtube.com/user/MapmyIndia/)" ] } ], "snippets": [ { "language": "HTML", "label": "3 Step process to integrate Nearby COVID Places widget in any Web App", "code": "
" }, { "language": "HTML", "label": "3 Step process to integrate Nearby COVID Places widget in any Web App", "code": "" }, { "language": "JavaScript", "label": "3 Step process to integrate Nearby COVID Places widget in any Web App", "code": "loadNearbyCovidCentresMapmyIndiaDiv(document.getElementbyId(“nearby-covid-places-mapmyindia”));" }, { "language": "HTML", "label": "Sample Code", "code": "\n\n \n \n \n\n\n\n\n \n
\n\n \n \n\n\n" }, { "language": "CSS", "label": "Sample CSS", "code": "https://maps.mapmyindia.com/covid-places/css/custom.css" }, { "language": "JavaScript", "label": "Sample CSS", "code": "loadNearbyCovidCentresMapmyIndiaDiv(document.getElementById(\"nearby-covid-places-mapmyindia\"),{css:\"https://maps.mapmyindia.com/covid-places/css/custom.css\"});" }, { "language": "HTML", "label": "Script URL", "code": "" }, { "language": "HTML", "label": "Sample Code", "code": "\n\n \n \n \n\n\n\n\n \n
\n\n \n \n\n\n" }, { "language": "HTML", "label": "Sample for iFrame embedding of Nearby COVID Places Widget", "code": "" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/kunalbharti", "https://github.com/rohanverma85", "https://maps.mapmyindia.com/covid-places/showNearbyCovidPlacesOnMap.js", "https://maps.mapmyindia.com/covid-places/css/custom.css", "https://maps.mapmyindia.com/covid-places/showNearbyCovidPlacesOnMap.js?category=HSPTMT", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories", "https://maps.mapmyindia.com/covid-places/embed?category=HSPVCC", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories#sample-search-for-corona-vaccination-centres", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories#sample-search-for-corona-testing-centres", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories#sample-search-for-corona-treatment-centres", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories#sample-search-for-corona-quarantine-centres", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories#sample-search-for-corona-sample-collection-centres", "https://github.com/MapmyIndia/mapmyindia-nearby-covid-places/wiki/Samples-For-Searching-More-Covid-Categories#sample-search-for-corona-micro-containment-zones", "https://www.mapmyindia.com/api/index.php#f_cont", "https://stackoverflow.com/questions/tagged/mapmyindia-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](http://www.mapmyindia.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/MapmyIndia)[" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 20, "endpointCount": 30, "codeSampleCount": 9, "fingerprint": "a29cd70e93a68094a8f3e0a11537dbf66076ef0eaee8e0e0fe92856d0f947ad9" } } ``` ## source-reference · Mapmyindia Places N Directions Web SDK - Identity: `source-reference:mapmyindia-places-n-directions-web-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-places-n-directions-web-sdk - State model: stateless ```json { "slug": "mapmyindia-places-n-directions-web-sdk", "sourceId": "public-mapmyindia-places-n-directions-web-sdk", "name": "mapmyindia-places-n-directions-web-sdk", "title": "Mapmyindia Places N Directions Web SDK", "summary": "MapmyIndia Places and Directions Library for Web SDKs provided by MapmyIndia. This library is compatible with both our Web SDKs - Vector Maps & our legacy Raster Maps.", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "other" ], "platforms": [ "Web" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-places-n-directions-web-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-places-n-directions-web-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-places-n-directions-web-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2023-11-30T12:50:12Z", "localCandidates": [ "contenthub/dochub/mapmyindia-places-n-directions-web-sdk" ], "prerequisites": [ "A browser application and an allowed development origin" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] } ], "snippets": [], "endpointEvidence": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 1, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "e0e524cc3bae1b1f7ce99e2b2047d548c03a23525fcd5eb900a339dbbfe71836" } } ``` ## source-reference · MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS - Identity: `source-reference:mapmyindia-purejs-sample-websdk-rest` - Canonical: https://developer.mappls.com/reference/mapmyindia-purejs-sample-websdk-rest - State model: stateless ```json { "slug": "mapmyindia-purejs-sample-websdk-rest", "sourceId": "public-mapmyindia-purejs-sample-websdk-rest", "name": "mapmyindia-pureJS-sample-webSDK-REST", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "summary": "PureJS Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "kind": "Sample", "maturity": "sample", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "identity-platform" ], "platforms": [ "Web", "REST" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "HTML", "JavaScript", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-pureJS-sample-webSDK-REST", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-pureJS-sample-webSDK-REST/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-pureJS-sample-webSDK-REST/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2020-04-21T14:25:50Z", "localCandidates": [ "contenthub/dochub/mapmyindia-pureJS-sample-webSDK-REST" ], "prerequisites": [ "A browser application and an allowed development origin", "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan, Myanmar and Bangladesh", "You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "Pre-requisites & Assumptions", "level": 2, "paragraphs": [ "1. Supported frameworks: The sample is prepared in Pure JS. 2. CORS to be ENABLED: You need to ask API Support to enable CORS for your credentials. 3. This sample is provided as a reference only and users can adjust and enhance it to suit their requirements." ] }, { "title": "Call Routing API", "level": 4, "paragraphs": [ "That's it folks !!!", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Stack Overflow Ask a question under the mapmyindia-api", "Support Need support? contact us!", "Blog Read about the latest updates & customer stories" ] } ], "snippets": [ { "language": "HTML", "label": "Creating project in Pure Javascript for MapmyIndia REST APIs & Interac", "code": "\n \n \n \n // Interactive Map JS\n \n // Map Style \n \n \n \n

// div for map\n \n \n \n \n \n \n \n \n \n " } ], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js", "https://apis.mapmyindia.com/advancedmaps/v1/", "https://outpost.mapmyindia.com/api/security/oauth/token", "https://atlas.mapmyindia.com/api/places/search/json?", "https://atlas.mapmyindia.com/api/places/geocode?address=mapmyindia", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 11, "endpointCount": 13, "codeSampleCount": 10, "fingerprint": "7648d47274423632e0d612ff15355d0dd80c6de1227a6605682f1874d104fdde" } } ``` ## source-reference · Mapmyindia REST API - Identity: `source-reference:mapmyindia-rest-api` - Canonical: https://developer.mappls.com/reference/mapmyindia-rest-api - State model: stateless ```json { "slug": "mapmyindia-rest-api", "sourceId": "public-mapmyindia-rest-api", "name": "mapmyindia-rest-api", "title": "Mapmyindia REST API", "summary": "Building Blocks to Add Powerful Location Intelligence & Mapping Functionality to your Apps", "kind": "REST API", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback" ], "platforms": [ "REST" ], "authSignals": [ "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-rest-api", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2023-11-30T12:48:30Z", "localCandidates": [ "contenthub/dochub/mapmyindia-rest-api" ], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] }, { "title": "MapmyIndia Map APIs (REST) !", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan, Myanmar and Bangladesh", "Full documentation available here: https://www.mapmyindia.com/api/index.php#api-stack. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/" ] }, { "title": "Store-To-Door", "level": 2, "paragraphs": [ "Store-to-Door Experiences created with India’s best Location APIs & SDKs. In this new ‘at home’ world, we’re helping India’s leading apps take their products & services from the stores straight to the consumer’s door. Let us help you too. Top apps have already gone store-to-door:", "Our APIs are categorized into the following major categories:" ] }, { "title": "SEARCH", "level": 4, "paragraphs": [ "Experience relevant & most accurate search results for an address, a place or a pair of geo-coordinates." ] }, { "title": "MAPS & TRAFFIC", "level": 4, "paragraphs": [ "Highly detailed & interactive maps with 2D/3D viewing options & real-time traffic flow" ] }, { "title": "ROUTES & NAVIGATION", "level": 4, "paragraphs": [ "Get turn-by-turn directions with alternate driving routes between specified locations, with traffic" ] }, { "title": "GEOANALYTICS", "level": 4, "paragraphs": [ "GeoAnalytics Web JS APIs with multiple data attributes such as demographic data attributes. Aligned with MapmyIndia Map data, these APIs utilize our vast geo-informatics experience to provide customers a enhanced leverage over competition using query-enabled analytics APIs to draw heatmaps, thematic maps or other types geo-visualizations for your business analysis problems." ] }, { "title": "Accurate", "level": 3, "paragraphs": [ "Most accurate door-step level turn by turn directions covering 66 lakh kilometers across all highways and city roads and lanes," ] }, { "title": "We know India better than anyone else", "level": 3, "paragraphs": [ "Powered by India’s best, most detailed house address level maps covering 3 crore places across 7000 cities and 7 lakh villages" ] }, { "title": "We abide by Government of India regulations", "level": 3, "paragraphs": [ "We are the only local Map APIs that follows Government of India.s regulations. We ensure all your data is stored in a server in India." ] }, { "title": "We are easy to integrate", "level": 3, "paragraphs": [ "Integrating MapmyIndia Maps API is easy and effortless. We provide you with an expert team, to guide and work with you." ] }, { "title": "Our many happy customers", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Support Need support? contact us!", "[](http://www.mapmyindia.com/blog/)[](https://github.com/MapmyIndia)", "[](https://twitter.com/MapmyIndia)[](https://www.linkedin.com/company/mapmyindia)[](https://www.youtube.com/user/MapmyIndia/)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api/index.php#api-stack](https://www.mapmyindia.com/api/index.php#api-stack).", "https://www.mapmyindia.com/api/](https://www.mapmyindia.com/api/", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://about.mappls.com/images/client_logo/amazon-a.svg)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://about.mappls.com/images/client_logo/mcdonalds-01.svg)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://about.mappls.com/images", "https://www.mapmyindia.com/api", "https://www.mapmyindia.com/api/index.php#f_cont", "https://stackoverflow.com/questions/tagged/mapmyindia-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](http://www.mapmyindia.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/MapmyIndia)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/MapmyIndia)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/MapmyIndia)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mapmyindia)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/user/MapmyIndia/", "https://www.mapmyindia.com/api/terms-&-conditions", "https://www.mapmyindia.com/about/privacy-policy", "https://www.mapmyindia.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mapmyindia.com/pdf/Health-Safety-Management.pdf", "https://www.mapmyindia.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "1bb4ee5e23a562b4d6f4e71cd8a4f4f503726a4bd90d542fb34e93a70be2f29b" } } ``` ## source-reference · MapmyIndia REST APIs for Cordova/Ionic - Beta 1 - Identity: `source-reference:mapmyindia-restapi-cordova-ionic-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-restapi-cordova-ionic-beta - State model: stateless ```json { "slug": "mapmyindia-restapi-cordova-ionic-beta", "sourceId": "public-mapmyindia-restapi-cordova-ionic-beta", "name": "mapmyindia-restapi-cordova-ionic-beta", "title": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "summary": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1 Hybrid SDK", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "search-places", "routes-navigation", "widgets-deep-links" ], "platforms": [ "Cordova/Ionic" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "JavaScript", "Text", "JSX" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-restapi-cordova-ionic-beta", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-restapi-cordova-ionic-beta/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-restapi-cordova-ionic-beta/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2020-09-30T06:20:27Z", "localCandidates": [ "contenthub/dochub/mapmyindia-restapi-cordova-ionic-beta" ], "prerequisites": [ "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "level": 1, "paragraphs": [ "For full documentation contact MapmyIndia here:", "MapmyIndia: apisupport@mapmyindia.com.", "You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "Browser Installation", "level": 3, "paragraphs": [ "| IONIC | CORDOVA | | ionic cordova platform add browser | cordova platform add browser |" ] }, { "title": "Running in the browser", "level": 3, "paragraphs": [ "| IONIC | CORDOVA | | ionic cordova run browser | cordova run browser |" ] }, { "title": "Only if you are running cordova project in browser not for ionicframework", "level": 4, "paragraphs": [ "• replace your tag in index.html", "MapmyIndia Plugin requires Cordova to run.", "• Declare mmirest var globally", "Inside mmirest function if you want to access this property you have to assign to a variable like", "var thisObj = this outside the mmirest function body if you are working with IONIC V > 1" ] }, { "title": "Features:", "level": 3, "paragraphs": [ "2. Geocoding [Legacy]", "4. Reverse Geocode", "6. Distance [Legacy]", "7. Routing [Legacy]", "9. Distance Matrix" ] }, { "title": "Geocode", "level": 4, "paragraphs": [ "clientid: 'clientId',", "clientsecret: 'clientSecret'," ] }, { "title": "Routing (Deprecated)", "level": 4, "paragraphs": [ "Note: \"alternatives\" and \"advices\" are optional parameters; send null if they are empty." ] }, { "title": "Distance Matrix", "level": 4, "paragraphs": [ "• secondryLocations", "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Ask a question under the mapmyindia-api", "Need support? contact us!", "Read about the latest updates & customer stories" ] } ], "snippets": [ { "language": "JavaScript", "label": "git", "code": "> cordova plugin add https://github.com/mapmyindia/mapmyindia-restapi-cordova-ionic-beta.git\nor \n> cordova plugin add mapmyindia-restapi-cordova-ionic-beta" }, { "language": "JavaScript", "label": "Only if you are running cordova project in browser not for ionicframew", "code": "" }, { "language": "JavaScript", "label": "Only if you are running cordova project in browser not for ionicframew", "code": "> declare var mmi_rest;" }, { "language": "Jsx", "label": "Autosuggest", "code": "mmi_rest.atlas_auto(\n\n{\n\nclient_id: 'YOUR_CLIENT_ID',\n\nclient_secret: 'YOUR_CLIENT_SECRET',\n\nquery: 'agr'\n\n},SuccessCallback, Error Callback);" }, { "language": "JavaScript", "label": "Autosuggest", "code": "mmi_rest.atlas_auto({client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET',query: 'agr'},\n\nfunction(result)\n\n{\n\nconsole.log(result);\n\n},\n\nfunction(error)\n\n{\n\nconsole.log(error);\n\n});" }, { "language": "JavaScript", "label": "Geocode", "code": "mmi_rest.atlas_geocode(client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET',address: 'agra'}, Success Callback, Error Callback);" }, { "language": "JavaScript", "label": "Geocode", "code": "mmi_rest.atlas_geocode({client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET',address: 'agra'},\n\nfunction(result){\n\nconsole.log(JSON.stringify(result));\n\n},\n\nfunction(err){\n\nconsole.log(err);\n\n});" }, { "language": "JavaScript", "label": "Nearby", "code": "mmi_rest.atlas_nearby({client_id: 'YOUR_CLIENT_ID', client_secret: 'YOUR_CLIENT_SECRET', keywords: 'beer', refLocation: '28.631460,77.217423'}, SuccessCallback, ErrorCallback);" }, { "language": "JavaScript", "label": "Nearby", "code": "mmi_rest.atlas_nearby({client_id: 'YOUR_CLIENT_ID',client_secret: 'YOUR_CLIENT_SECRET',keywords: 'beer',refLocation: '28.631460,77.217423'},\n\nfunction(result)\n\n{\n\nconsole.log(JSON.stringify(result));\n\n},\n\nfunction(error)\n\n{\n\nconsole.log(error);\n\n});" }, { "language": "JavaScript", "label": "Reverse Geocode", "code": "mmi_rest.rev_geocode(key: 'YOUR API KEY', lat: '27.61234', lng: '77.61234'}, Success Callback, Error Callback);" }, { "language": "JavaScript", "label": "Reverse Geocode", "code": "mmi_rest.rev_geocode({key: 'YOUR API KEY', lat: '27.61234', lng: '77.61234'},\n\nfunction(result){\n\nconsole.log(JSON.stringify(result));\n\n},\n\nfunction(err){\n\nconsole.log(err);\n\n});" }, { "language": "JavaScript", "label": "Place Details / eLoc", "code": "mmi_rest.place_detail({key: 'YOUR API KEY', placeId: 'MMI000'}, Success Callback, Error Callback);" }, { "language": "JavaScript", "label": "Place Details / eLoc", "code": "mmi_rest.place_detail({key: 'YOUR API KEY', placeId: 'MMI000'},\n\nfunction(result)\n\n{\n\nconsole.log(JSON.stringify(result));\n\n},\n\nfunction(err)\n\n{\n\nconsole.log(err);\n\n});" }, { "language": "JavaScript", "label": "Driving Distance Matrix", "code": "mmi_rest.distance({key: 'YOUR API KEY', lat: '27.61234', lng: '77.61234', points:'29,78|30,78|28,79'}, Success Callback, ErrorCallback);" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api/img/mapmyindia-api.png)](https://www.mapmyindia.com/api/", "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/balmukandpathak", "https://www.java.com/en/download/", "https://developer.mozilla.org/bm/docs/Web/JavaScript", "https://cordova.apache.org/", "https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210-CH1-SW1", "https://www.android.com/", "https://www.apple.com/in/ios/", "https://www.google.com/chrome/", "https://ionicframework.com/", "https://phonegap.com/", "https://github.com/mapmyindia/mapmyindia-restapi-cordova-ionic-beta.git", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont", "https://stackedit.io/" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 23, "endpointCount": 20, "codeSampleCount": 14, "fingerprint": "dbd1303d017e4f7332a7799990a5da60b6fd4bba6271c3323c858e732ff4d4ff" } } ``` ## source-reference · Mapmyindia REST API SDK for React Native - beta - Identity: `source-reference:mapmyindia-restapi-react-native-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-restapi-react-native-beta - State model: stateless ```json { "slug": "mapmyindia-restapi-react-native-beta", "sourceId": "public-mapmyindia-restapi-react-native-beta", "name": "mapmyindia-restapi-react-native-beta", "title": "Mapmyindia REST API SDK for React Native - beta", "summary": "A Mappls sdk for maps, search places, routes navigation, gis analytics, identity platform across React Native.", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "identity-platform" ], "platforms": [ "React Native" ], "authSignals": [ "oauth2", "api-key", "licensed-entitlement" ], "languages": [ "JavaScript", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-restapi-react-native-beta", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-restapi-react-native-beta/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-restapi-react-native-beta/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2021-04-15T12:32:27Z", "localCandidates": [ "contenthub/dochub/mapmyindia-restapi-react-native-beta" ], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Mapmyindia REST API SDK for React Native - beta", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities.", "Now Available for Srilanka, Nepal, Bhutan and Bangladesh", "1. For full documentation contact MapmyIndia here:", "Email: apisupport@mapmyindia.com.", "2. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup" ] }, { "title": "What is Mapmyindia?", "level": 2, "paragraphs": [ "Mapmyindia is the location data platform for mobile and web applications. We provide building blocks to add location features like maps, search, and navigation into any experience you create. Use our simple and powerful APIs & SDKs for interactivity and control." ] }, { "title": "Sign up for Mapmyindia", "level": 2, "paragraphs": [ "Not a Mapmyindia user yet? Sign up for an account here. Once you’re signed in, all you need to start building is a Mapmyindia key. Use this same short code with all of our interactive mapping libraries, JavaScript SDKs, and directly against our REST APIs. You can create and manage your access tokens on your Mapmyindia Account page." ] }, { "title": "API Usage", "level": 2, "paragraphs": [ "Your MapmyIndia Maps SDK usage needs a set of license keys (get them here ) and is governed by the API terms and conditions.", "As part of the terms and conditions, you cannot remove or hide the MapmyIndia logo and copyright information in your project.", "Please see branding guidelines on MapmyIndia website for more details.", "The allowed SDK hits are described on the plans page. Note that your usage is", "shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] }, { "title": "Getting started", "level": 2, "paragraphs": [ "$ npm install mapmyindia-restapi-react-native-beta --save", "If you are using React-Native < 0.60.0 then you have to follow additional steps which are below" ] }, { "title": "Mostly automatic installation", "level": 3, "paragraphs": [ "$ react-native link mapmyindia-restapi-react-native-beta" ] }, { "title": "iOS", "level": 4, "paragraphs": [ "1. In XCode, in the project navigator, right click Libraries ➜ Add Files to [your project's name]", "2. Go to nodemodules ➜ mapmyindia-restapi-react-native-beta and add RNRestapi.xcodeproj", "3. In XCode, in the project navigator, select your project. Add libRNRestapi.a to your project's Build Phases ➜ Link Binary With Libraries", "4. Run your project (Cmd+R)<" ] }, { "title": "Android", "level": 4, "paragraphs": [ "1. Open up android/app/src/main/java/[...]/MainActivity.java", "• Add import com.restapi.reactnative.RNRestapiPackage; to the imports at the top of the file", "• Add new RNRestapiPackage() to the list returned by the getPackages() method", "2. Append the following lines to android/settings.gradle:", "3. Insert the following lines inside the dependencies block in android/app/build.gradle:" ] }, { "title": "Methods", "level": 3, "paragraphs": [ "• Atlas AutoSuggest", "• Distance Matrix ETA" ] }, { "title": "Place Details()", "level": 3, "paragraphs": [ "The Place detail API is to extract the details of a place with the help of its eLoc i.e. a 6 character code. Since a place may or may not have additional attributes associated with it, the response from the place details may be different for each record. However the response will be an extract from an existing set of master key-value pairs grouped as objects." ] }, { "title": "Request Parameters", "level": 4, "paragraphs": [ "##### a. Mandatory Parameters:", "1. eLoc: the id or eLoc of the place whose details are required. The 6-digit alphanumeric code for any location. (e.g. mmi000). 2. response : successcallback of api call" ] }, { "title": "Place Detail with Sub Template based Configuration", "level": 2, "paragraphs": [ "The API is highly configurable to configuration enables to provide the required set of attributes to the user on the basis of assigned sub templates. The default configuration with available with basic pay-as-you-go rates is that of General Details subtemplate." ] }, { "title": "Response Parameters for Place Details - Sub Templates", "level": 2, "paragraphs": [ "The parameters are group in sub templates. Here is the list of attributes with sub template information." ] }, { "title": "Subtemplate 1 : General Details", "level": 4, "paragraphs": [ "1. Eloc (string) : 6 characters alphanumeric unique identifier 2. placeName (string) : Name of the place 3. address (string) : address of the place 4. type: defines the type of location matched (HOUSENUMBER, HOUSENAME, POI, STREET, SUBLOCALITY, LOCALITY, VILLAGE, DISTRICT, SUBDISTRICT, CITY, STATE, SUBSUBLOCALITY, PINCODE)" ] }, { "title": "Subtemplate 2 : Admin Tokens (PREMIUM OFFERING)", "level": 4, "paragraphs": [ "1. city (string): The name of the city in which the location exists. 2. district (string): The name of the district in which the location exists. 3. pincode (string): The pin code of the location area. 4. subDistrict (string): The name of the sub-district in which the location exists. 5. state (string): The name of the state in which the location exists." ] }, { "title": "Subtemplate 3 : Address Tokens (PREMIUM OFFERING)", "level": 4, "paragraphs": [ "1. houseNumber (string): The house number of the location. 2. houseName (string): The name of the location. 3. locality (string): The name of the locality where the location exists. 4. street (string): The name of the street of the location. 5. subSubLocality (string): The name of the sub-sub-locality where the location exists. 6. subLocality (string): The name of the sub-locality where the location exists. 7. village (string): The name of the village if the location exists in a village. 8. poi (string): The name of the POI if the location is a place of interest (POI)." ] }, { "title": "Subtemplate 4 : Contact Details (PREMIUM OFFERING)", "level": 4, "paragraphs": [ "1. Email 2. Mobile 3. Telephone 4. Website" ] }, { "title": "Subtemplate 5 : Location Coordinates (PREMIUM OFFERING)", "level": 4, "paragraphs": [ "1. latitude(double): The latitude of the location. 2. longitude(double): The longitude of the location." ] }, { "title": "Subtemplate 6 : E/E Coordinates (PREMIUM OFFERING)", "level": 4, "paragraphs": [ "1. Entrylat(double):The entry latitude of the location. 2. Entrylon(double):The entry longitude of the location." ] }, { "title": "Request Parameters", "level": 4, "paragraphs": [ "##### a. Mandatory Parameters: 1. query (string) e.g. Shoes, Coffee, Versace, Gucci, H&M, Adidas, Starbucks, B130 {POI, House Number, keyword, tag} 2. response : successcallback of api call", "##### b. Optional Parameters:", "1. location {string (latitude[double],longitude[double])} e.g. location=28.454,77.435 2. zoom (double) = takes the zoom level of the current scope of the map (min: 4, max: 18). 4. tokenizeAddress (boolean) = provides the different address attributes in a structured object. 5. pod (string) = it takes in the place type code which helps in restricting the results to certain chosen type. Below mentioned are the codes for the pod - 1. SLC: Sublocality 2. LC: Locality 3. CITY: City 4. VLG: Village 5. SDIST: Subdistrict 6. DIST: District 7. STATE: State 8. SSLC: Subsublocality 6. filter = this parameter helps you restrict the result either by mentioning a bounded area or to certain eloc (6 digit code to any poi, locality, city, etc.), below mentioned are the both types - a. filter = bounds: lat1, lng1; lat2, lng2 (latitude, longitude) {e.g. filter=bounds: 28.598882, 77.212407; 28.467375, 77.353" ] }, { "title": "Request Parameters", "level": 4, "paragraphs": [ "##### a. Mandatory Parameters:", "1. keywords (string) e.g. FODCOF, Shoes, Coffee, Versace, Gucci, H&M, Adidas, Starbucks, B130 {POI, House Number, keyword, tag} 2. refLocation {string (latitude[double],longitude[double])}: Provides the location around which the search will be performed. It also supports Eloc. E.g. refLocation=28.454,77.435 or refLocation=\"MMI000\" 4. response : successcallback of api call", "##### b. Optional Parameters: 1. page (integer): provides number of the page to provide results from. 2. sort (string): provides configured sorting operations for the client on cloud. Below are the available sorts: a) dist:asc & dist:desc - will sort data in order of distance from the passed location (default). b) name:asc & name:desc - will sort the data on alphabetically bases. 3. radius (integer): provides the range of distance to search over (default: 1000, min: 500, max: 10000). 4. bounds (string) : Allows the developer to send in map bounds to provide a nearby search within the bounds. {e.g. (bounds(\"28.56812,77.240519;28.532790,77.290854\")) 5. filter (string) : This parameter helps you get a specific type of EV charging Station - filter = model:(string);brandId:(string);plugType:(string)" ] }, { "title": "Request Parameters", "level": 4, "paragraphs": [ "##### a. Mandatory Parameters: 1. lat:(double) the latitude of the location for which the address is required. 2. lng:(double) the longitude of the location for which address is required. 3. response : successcallback of api call" ] }, { "title": "Request Parameters", "level": 4, "paragraphs": [ "##### a. Mandatory Parameters:", "1. address(string) address to be geocoded e.g. 237 Okhla industrial estate phase 3 new delhi, delhi 110020 2. response : successcallback of api call", "##### b. Optional Parameters: 1. itemCount (integer): parameter can be set to get maximum number of result items from the API (default: 1). 2. bias (integer): This parameter can be used to set Urban or Rural bias. A positive value sets the Urban bias and a negative value sets Rural bias. Allowed values are: - 0 : Default: (No bias) - -1 : Rural - 1 : Urban 3. podFilter (string): This parameter can be used to set admin level restriction. The result will be either the given admin level or equivalent admin or higher in the hierarchy. No lower admin will be considered for geocoding. Allowed values are: - hno : house number - hna : house name - poi : point of interest - street : street - sslc : sub sub locality - village : village - slc : sub locality - sdist : sub district - loc : locality - city : city - dist : district - pincode :pincode - state : state 4. bound (string): This parameter ca", "Note: Please note that podFilter & bound parameters are mutually exclusive. They cannot be used together in an API call." ] }, { "title": "Request Parameters", "level": 4, "paragraphs": [ "##### a. Mandatory Parameters: 1. source:{string (longitude[double],latitude[double])} 2. destination: is pair of comma separated longitude & latitude value.Last coordinate will be considered as end point (mandatory) and those in between are via points (optional). Example: {longitude},{latitude};{longitude},{latitude} 3. response : successcallback of api call ##### b. Optional Parameters: 1. geometries(string): This parameter used to change the route geometry format/density (influences overview and per step). Default value is - polyline with 5 digit precision; - polyline6 for 6 digit precision; - geojson for geometries as geojson. 2. steps(boolean): Return route steps for each route leg. Possible values are true/false. By default it will be used as false. 3. exclude(string): Additive list of road classes to avoid, order does not matter. Possible values are toll, motorway & ferry. Multipl" ] } ], "snippets": [ { "language": "Text", "label": "Android", "code": "include ':mapmyindia-restapi-react-native-beta'\n\nproject(':mapmyindia-restapi-react-native-beta').projectDir = new File(rootProject.projectDir, '../node_modules/mapmyindia-restapi-react-native-beta/android')" }, { "language": "Text", "label": "Android", "code": "compile project(':mapmyindia-restapi-react-native-beta')" }, { "language": "JavaScript", "label": "Usage", "code": "import Mapmyindia from 'mapmyindia-restapi-react-native-beta';" }, { "language": "JavaScript", "label": "Methods", "code": "Mapmyindia.setRestApiKey('YOUR_CREDENTIAL');\n\nMapmyindia.setClientId('YOUR_CREDENTIAL');\n\nMapmyindia.setClientSecret('YOUR_CREDENTIAL');" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.place_details({eLoc: 'MMI000'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.atlas_auto({query: 'agr'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.atlas_nearby({keywords: 'beer', refLocation: '28.631460,77.217423'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.rev_geocode({lat: '27.61234', lng: '77.61234'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.atlas_geocode({address: 'lucknow',itemCount:'1'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.route_adv({`source`: '28.111,77.111', destination: '28.22,77.22'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.route_eta({`source`: '28.111,77.111', destination: '28.22,77.22'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Distance Matrix()", "code": "Mapmyindia.distance_matrix(source:'90.33687,23.470314',destinations:'90.379249,23.497178;90.497009,23.546286'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Distance Matrix ETA()", "code": "Mapmyindia.distance_matrix_eta(source:'90.33687,23.470314',destinations:'90.379249,23.497178;90.497009,23.546286'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" }, { "language": "JavaScript", "label": "Request Parameters", "code": "Mapmyindia.placeDetails({eloc: 'MMI000'}, (response) => {\n\nalert(JSON.stringify(response));\n\n});" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/mamtasharma117", "https://github.com/mdakram", "https://github.com/balmukandpathak", "https://www.mapmyindia.com/", "https://www.mapmyindia.com/api/signup).", "https://www.mapmyindia.com/api/dashboard).", "https://www.mapmyindia.com/api/terms-&-conditions).", "https://www.mapmyindia.com/api/advanced-maps/API-Branding-Guidelines.pdf", "https://www.mapmyindia.com/api", "https://stackoverflow.com/questions/tagged/mapmyindia-api", "https://www.mapmyindia.com/api/index.php#f_cont" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 39, "endpointCount": 17, "codeSampleCount": 14, "fingerprint": "88351f5dd3543307cc34f7f99746a315b6c2cadb2984b17ae2207e7c295cf020" } } ``` ## source-reference · Mapmyindia Vector Maps JS Web SDK - Identity: `source-reference:mapmyindia-vector-maps-js-web-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-vector-maps-js-web-sdk - State model: stateless ```json { "slug": "mapmyindia-vector-maps-js-web-sdk", "sourceId": "public-mapmyindia-vector-maps-js-web-sdk", "name": "mapmyindia-vector-maps-js-web-SDK", "title": "Mapmyindia Vector Maps JS Web SDK", "summary": "MapmyIndia's Latest Vector Maps Web SDK for rendering beautifully interactive, fluid maps that are powered by browser based WebGL.", "kind": "SDK", "maturity": "deprecated", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links" ], "platforms": [ "Web" ], "authSignals": [ "api-key" ], "languages": [ "HTML", "Text", "JavaScript" ], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2023-11-30T12:43:38Z", "localCandidates": [ "contenthub/dochub/mapmyindia-vector-maps-js-web-SDK" ], "prerequisites": [ "A browser application and an allowed development origin", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "DEPRECATED", "level": 1, "paragraphs": [ "This repository is no longer in active development & use." ] }, { "title": "MapmyIndia Interactive Vector Maps JS SDK for Web !", "level": 1, "paragraphs": [ "Explore the largest directory of APIs & SDKs for maps, routes and search.", "Our APIs, SDKs, and live updating map data available for 238 nations give developers tools to build better mapping, navigation, and search experiences across platforms.", "This page will be continually enhanced to offer more insights and reference material on how to best utilize our Vector Maps JS SDK for Web.", "You can get your api key to be used in this document here: https://apis.mappls.com/console/" ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "The Interactive Maps JavaScript SDK for Web helps render and display map tiles while customizing the map's look and feel on mobile or web browser. Mappls (MapmyIndia) is India's leading Map provider, and produces various SDKs, including Web SDKs (JavaScript libraries) for mobile-friendly interactive maps which are easy to use & high on performance. This SDK is a collection of classes and functions that can be used to implement a host of map features.", "• Zoom: Pan-able map of India with 19 zoom levels, 22 being the highest (most detailed) and 4 being the lowest (country level) map display. - Overlays: The map is the key for any sort of business and understanding this, we at Mappls provide quick default overlays to reduce the boiler plate code for your code base. - Map Markers (Pushpins): Point to any location using default pushpin behaviors and provide it your own style to make it look more tailored for your application. Note: Have a look at the Plug-ins section to find out what makes it cooler. - Info Windows (Pop-ups): On a Map Clicking is a native behavior understanding this, we provide out of the box info windows such that if a pushpin is clicked an info window pops up open and you can show your content related to that location there. You can style it to make it behave as required for your UI to be magnificent. - Polylines: Connect", "Note: The location settings must be turned on and must allow the site to fetch the location for this control to work.", "Please Note: Mappls(MapmyIndia) may extend and enhance functionality for its interactive map API in future, which will be clearly documented in this section, and which will be available through the Mappls.Map class and Mappls. set of classes generally." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Now that you’re all caught up with the features let’s get down right to them and look at how can you integrate our Interactive Map to your Website from scratch." ] }, { "title": "Initializing The Map", "level": 3, "paragraphs": [ "The easiest way to start loading maps in a web page is with a “Hello World” sample code, you can download or view a working “Hello World” sample from the links for adding your first marker below." ] }, { "title": "Adding the Map Script to your web page", "level": 4, "paragraphs": [ "Follow the below steps to integrate MapmyIndia interactive Maps into your existing code base or even a File -> New Project. - Declare application as HTML5: Define on top of your HTML. - Integrate Interactive maps from Mappls into your browser application by simply including Mappls's interactive map API in your script source in the head section.", "• bearer token in place of - layer: Vector/raster default vector", "• Define a style in the head section to load in your CSS.", "• Define a div object in the body tag of the HTML where you want the Mappls Map to show up.", "• Initialize a Mappls Map by simply calling new Mappls.Map() in the JavaScript and passing it at the minimum, the div object in which you want the map populated. (All other parameters are optional.)" ] }, { "title": "Map Quick Reference:", "level": 2, "paragraphs": [ "• Map Methods & Events - Map Properties - Map Methods - Map Events" ] }, { "title": "Markers", "level": 3, "paragraphs": [ "Markers are effortless way of pointing to a location, so getting right to it, you can go ahead and add markers that we provide out of the box but just in case you want to add your own, we’ve got that covered for you as well. There are 3 main categories of markers that you can add namely, - Stock Markers: The one you get out of the box using our Interactive Vector Maps SDK and you can select from a lot of choices. - Custom Marker: Just in case you want to provide your own markers, we’ve handled that for you as well. - HTML Marker: In case you don’t want to add in an image you can use HTML to create a marker and then plot it on the map as well.", "For more details, please read article in Markers", "Now, that you have a basic understanding of Markers, Functions and Events let’s talk about Info Windows or Pop-Ups." ] }, { "title": "Adding Your First Marker", "level": 3, "paragraphs": [ "The easiest way to start loading maps with simple markers in a web page is with a “Hello World” sample code, you can download or view a working “Hello World” sample from the links above.", "In the sample, we have a case of a map scenario where objective is plotting a pushpin that says hello world on click." ] }, { "title": "Method to add marker on map", "level": 4, "paragraphs": [ "##### Code to add marker on Map" ] }, { "title": "Knowing Properties And Methods", "level": 3, "paragraphs": [ "You can interact with properties of the Map we provide to suite your use case and add additional customizability to your Map layer using the features it has to offer. These functions are a quick go to in case of an event.", "For details, please read article in Marker Methods" ] }, { "title": "Marker Quick Reference:", "level": 2, "paragraphs": [ "• Marker Properties - Marker Methods - Marker Events", "• Multiple Marker with cluster", "• GeoJSON Bulk Marker" ] }, { "title": "Info Windows", "level": 3, "paragraphs": [ "Info Windows are a convenient way of showing data about a marker or in simple words: what that marker stands for. The Native behaviour of a user to know about any marker is to try and click on it to know what it’s all about and showing an info window would be the way to go about it:", "Please Note: MapmyIndia interactive map SDK supports a default info window that you can leverage but we want you to have an option to customize your info window to fit in with your UI and you can do so in the CSS.", "For a quick sample or a demo you can follow up with the links on top.", "You can declare an info window in your CSS and write up a quick function to generate data in that info window and on marker click event simple open that info window.", "For details , please read article in Info Windows" ] }, { "title": "Info Window Quick Reference", "level": 2, "paragraphs": [ "• InfoWindow Properties", "• Remove InfoWindow" ] }, { "title": "Polylines", "level": 3, "paragraphs": [ "Polylines are a way of showing movement or transit on a map. We at Mappls understand the ways you can leverage the features offered by a map and one among them is a Polyline.", "Polylines are continuous lines consisting of one or more line segments (preferably a geopath). To add a polyline, initialize map as shown in the previous sections and then create a data set. What is a data set? The Data set is the collection of points (latitude and longitude) over which you want the polyline to be drawn.", "For details , please read article in Polylines" ] }, { "title": "Polyline Quick Reference", "level": 3, "paragraphs": [ "• Polyline Properties" ] }, { "title": "Example:", "level": 2, "paragraphs": [ "• Draw Editable Polyline", "Drag polyline from anywhere & get callback polyline data. By default the value is false.", "• Draw Gradient In Polyline", "• Draw Animated Polyline", "Polyline draw point by point with speed", "• Animated Marker Along With Polyline" ] }, { "title": "Polygons", "level": 3, "paragraphs": [ "Polygons are a way of showing a territory. In cases where you want to showcase data over an area, polygons are your best pick. You can use them to show Geozones as well.", "It’s very like generating a polyline, the basic steps remain the same, create a Data set, generate a polygon and add it to the map.", "For details , please read article in Polygon" ] }, { "title": "Example", "level": 2, "paragraphs": [ "• Polygon Properties" ] }, { "title": "Draw Polyline/Polygons", "level": 3, "paragraphs": [ "This method can draw polyline or polygon directly from map with click event with callback methods.", "Double Click to finish draw event.", "Now that we’ve covered polygons let’s have a look at Circles which provide another way of showcasing territory." ] }, { "title": "Circles", "level": 3, "paragraphs": [ "Circles are way of marking a territory without too much interaction by the user. A circle only has two important values:", "• The Centre point of the circle (in this case it’ll be a latitude with a longitude). - The Radius of the circle.", "With the two values, you can easily define a quick area of interest on a map.", "For details , please read article in Circle" ] }, { "title": "Example", "level": 2, "paragraphs": [ "• Circle Properties" ] }, { "title": "Heatmap Overlays", "level": 2, "paragraphs": [ "For details , please read article in Heatmap Overlays", "• Heatmap Properties" ] }, { "title": "Add geojson layer", "level": 3, "paragraphs": [ "For details, please read article in GeoJSON", "GeoJSON Supports marker, polyline and polygon", "Marker Property support in geojson", "1. description 2. icon 3. icon-size 4. icon-offset 5. text 6. text-size 7. text-offset", "polyline Property support in geojson:", "1. stroke 2. stroke-opacity 3. stroke-width" ] } ], "snippets": [ { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "
;" }, { "language": "JavaScript", "label": "Adding the Map Script to your web page", "code": "map = new Mappls.Map('map', {center:{lat:28.612964,lng:77.229463} });" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "\n \n Hello, World\n \n \n \n \n \n \n
\n \n \n " }, { "language": "JavaScript", "label": "Method to add marker on map", "code": "var marker = new Mappls.Marker({\n map: map,\n position: {\"lat\": 28.519467,\"lng\":77.223150}\n\t});" }, { "language": "HTML", "label": "Example", "code": "\n \n First Marker\n \n \n \n \n \n \n
\n \n \n " }, { "language": "JavaScript", "label": "Marker Quick Reference:", "code": "var geoData={\n \"type\": \"FeatureCollection\",\n \"features\": [{\n \"type\": \"Feature\",\n \"properties\": {\"htmlPopup\":\"noida\"},\n \"geometry\": {\"type\": \"Point\",\n \"coordinates\": [28.544,77.5454]}\n },{\n \"type\": \"Feature\",\n \"properties\": {\"htmlPopup\":\"faridabad\"},\n \"geometry\": {\"type\": \"Point\",\n \"coordinates\": [28.27189158,77.2158203125]}\n },{\n \"type\": \"Feature\",\n \"properties\": {\"htmlPopup\":\"delhi\"},\n \"geometry\": {\"type\": \"Point\",\n \"coordinates\": [28.549511,77.2678250]}\n }]\n };\n var marker=Mappls.Marker({map:map,position:geoData,icon_url:'https://apis.mappls.com/map_v3/1.png',clusters:true,fitbounds:true,fitboundOptions:{padding: 120,duration:1000},popupOptions:{offset: {'bottom': [0, -20]}}});" }, { "language": "HTML", "label": "Example", "code": "\n \n Infowindow\n \n \n \n \n \n \n
\n \n \n " }, { "language": "HTML", "label": "Example:", "code": "\n \n Polyline\n \n \n \n \n \n \n
\n \n \n" }, { "language": "JavaScript", "label": "Example:", "code": "editable: true" }, { "language": "JavaScript", "label": "Example:", "code": "animate: {path:true/false,speed:5}" }, { "language": "JavaScript", "label": "Example:", "code": "animate: { \n speed:5 \n icon_width: 35 / “35”,\n icon_height: 15 / “15”,,\n icon_url: (icon_url),\n repeat: true/false,\n }," }, { "language": "JavaScript", "label": "Example:", "code": "Mappls.remove({map: map, layer: polyline);" } ], "endpointEvidence": [ "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://apis.mappls.com/console/](https://apis.mappls.com/console/", "https://github.com/mamtasharma117", "https://www.mapmyindia.com/api/advanced-maps/WebSDK-LiveDemo/mapInitialization", "https://apis.mappls.com/advancedmaps/api/", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/mapProperties.md", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/mapMethods.md", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/mapEvents.md", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/markers.md", "https://www.mapmyindia.com/api/advanced-maps/WebSDK-LiveDemo/single-marker", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/markerMethods.md", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/markerProperties.md", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/markerEvents.md", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/markers.md#Multiple-Marker-With-cluster", "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK/blob/master/docs/V3.0/markers.md#geojson-bulk-markers", "https://apis.mappls.com/map_v3/1.png',clusters:true,fitbounds:true,fitboundOptions:%7Bpadding:" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 31, "endpointCount": 56, "codeSampleCount": 14, "fingerprint": "717e4087b4ad49db7f6cefc0f98d65108c00dbc1e70cc692d750e190c9831e76" } } ``` ## source-reference · Mappls by MapmyIndia-Workmate-Apis - Identity: `source-reference:mapmyindia-workmate-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-workmate-apis - State model: stateful ```json { "slug": "mapmyindia-workmate-apis", "sourceId": "public-mapmyindia-workmate-apis", "name": "mapmyindia-workmate-apis", "title": "Mappls by MapmyIndia-Workmate-Apis", "summary": "Powerful work force management APIs helping users get all the pertinent data related to their org such as live location of employees, client details and task details etc. Mappls Workmate easily integrates with existing cloud services via our APIs. These APIs help to make the ops efficient by providing location intellegence to your solutions.", "kind": "REST API", "maturity": "legacy", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "workmate" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "maps", "workforce", "identity-platform" ], "platforms": [ "REST" ], "authSignals": [ "oauth2" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mapmyindia-workmate-apis", "sourceDocumentUrl": "https://github.com/mappls-api/mapmyindia-workmate-apis/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mapmyindia-workmate-apis/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2022-02-11T10:02:28Z", "localCandidates": [ "contenthub/dochub/mapmyindia-workmate-apis" ], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "Mappls by MapmyIndia-Workmate-Apis", "level": 1, "paragraphs": [ "A set of powerful work force management APIs which helps the user to get all the data related to their organizations such as live location employees, client details and task details etc. These workforce management APIs are powered by Mappls own Map, IoT and workmate platform. Mappls Workmate easily integrates into existing cloud services via our workforce management APIs. These APIs helps to improve the organizational effiency by providing location intellegence to employees." ] }, { "title": "Get Your Key", "level": 1, "paragraphs": [ "All of Mappls workmate field force management APIs are powered by OAuth 2.0 framework. You will require an Workmate API access to use the APIs, Share your client ID with API support. You can get your client ID from here.", "please contact mappls API support to Workmate APIs access.", "Email: apisupport@mappls.com Phone Number: +91-11-46009900 Extension: : 952", "To know more on how to create your authorization tokens, please use our authorization token URL. More details available here" ] }, { "title": "API documentation Link", "level": 1, "paragraphs": [ "Get the workmate API documenation by clicking the below mentioned Link" ] } ], "snippets": [], "endpointEvidence": [ "https://apis.mappls.com/console).", "https://mapmyindia.com/api/advanced-maps/doc/authentication-api.php", "https://mapmyindia.github.io/mapmyindia-workmate-apis/#/" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 3, "endpointCount": 3, "codeSampleCount": 0, "fingerprint": "40b2c16f0dd342f173711021f0e1708ecf53882d1d5eb8654541ce5495f0043a" } } ``` ## source-reference · MAPPLS AI / ML APIs - Identity: `source-reference:mappls-ai-apis` - Canonical: https://developer.mappls.com/reference/mappls-ai-apis - State model: stateless ```json { "slug": "mappls-ai-apis", "sourceId": "public-mappls-ai-apis", "name": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs", "summary": "Revolutionize spatial analysis with our AI-ML API's, delivering unparalleled insights and predictive capabilities for optimized decision-making.", "kind": "REST API", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "workforce", "gis-analytics", "ai-vision", "capture-feedback", "identity-platform" ], "platforms": [ "REST", "AI/MCP" ], "authSignals": [ "licensed-entitlement" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-ai-apis", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-ai-apis/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-ai-apis/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2023-04-12T04:43:04Z", "localCandidates": [], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Using these APIs developers can fully leverage and embed the power of AI / ML Analytics, intelligence. These APIs allow our client to integrate the power of detection and blurring faces/license plates as per the their own requirement and full set of functionalities via this API. Moreover, A new API which has the feature of blurring the object as the user/ Client needs.", "• Face Detection & Blurring API - License Plate Detection & Blurring API - Brand Detection API - New Object blurring API" ] }, { "title": "Face Detection & Blurring API", "level": 2, "paragraphs": [ "It’s a fact: people have a right of getting digital privacy. Here’s one more: online publishers and businesses worldwide must respect those rights and provide visual anonymity when it’s needed. That’s why we decided to give you the fastest and easiest way to keep people’s privacy in photos. Meet Face Detection & Blurring by MapmyIndia.", "This tool completely automates Face Detection, Face Blurring in photos and helps you get the job done in just a few clicks without graphic editors and manual work. Keep reading to find out how it works, when it comes in handy, and how you can actually use it in MapmyIndia.", "You can detect faces in an image, identify key facial features, and get the contours of detected faces. Note that the API detects faces, it does not recognize people .", "Also, if you have any difficulties using this feature or suggestions on how we can improve the existing functionality, feel free to create a post in our Community Area.", "• Face Detection - Face plot - Face Blurring - Face Detection - Panoramas - Face plot - Panoramas - Face Blurring - Panoramas" ] }, { "title": "Face Detection", "level": 2, "paragraphs": [ "When you have face contour detection enabled, you also get a list of points for each facial feature that was detected. These points represent the shape of the feature. The following image illustrates how these points map to a face." ] }, { "title": "Face plot", "level": 2, "paragraphs": [ "Try face detection below. You can use the your own image in its place. Send the request to the API. The sample Result are potrayed down below.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "Face Blurring", "level": 2, "paragraphs": [ "Face Blur API can automatically detect all faces within an image and blurs them. No need for manual face selection.", "Get up and running quickly. Implement Face Blur API in your stack with just one API call.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "Face Detection - Panoramas", "level": 2, "paragraphs": [ "When you have face contour detection enabled on panoramas, you also get a list of points for each facial feature that was detected. These points represent the shape of the feature. The following image illustrates how these points map to a face.", "alt=\"Markdown Monster icon\" width=\"1105px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "Face plot - Panoramas", "level": 2, "paragraphs": [ "Try face detection below for panoramas. You can use the your own image in its place. Send the request to the API. The sample Result are potrayed down below.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "Face Blurring - Panoramas", "level": 2, "paragraphs": [ "Face Blur API can automatically detect all faces within panoramas and blurs them. No need for manual face selection.", "Get up and running quickly. Implement Face Blur API in your stack with just one API call.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />", "This API Answers to every Question regarding face Detection & Blurring, such as :", "1. Are there any faces of Human in the Image? 2. Where the faces of Human in the Image? 3. Can it return the location of the faces of Human? 4. Can it plot the located boxes on the Image? 5. Is the API able to blur the faces of Human detected ? 6. Is It possible to Blur the image by giving the boxes where the face lies ?" ] }, { "title": "Features Highlights", "level": 3, "paragraphs": [ "1. Helps find missing people 2. Protects businesses against theft 3. Strengthens security measures 4. Reduces the number of touchpoints 5. Improves photo organizations" ] }, { "title": "License Plate Detection & Blurring API", "level": 2, "paragraphs": [ "Using these APIs anybody can detect and blur the license plate in street images or in panoramas. These APIs allow our client to use the power of Automatic License Plate detection from images and Finding ROI( Region of Interest) of License Plate as per the client requirement. This model has been implemented on Yolov5 model that effectively detect License Plate area by exploring each object region.", "This tool completely automates License Plate Detection, License Blurring in photos and helps you get the job done in just a few clicks without graphic editors and manual work. Keep reading to find out how it works, when it comes in handy, and how you can actually use it in MapmyIndia.", "You can detect License plates in an image, identify key its features, and get the contours of detected License plates.", "Also, if you have any difficulties using this feature or suggestions on how we can improve the existing functionality, feel free to create a post in our Community Area.", "• License Plate Detection - License Plate plot - License Plate Blurring - License Plate Detection - Panoramas - License Plate Plot - Panoramas - License Plate Blurring - Panoramas" ] }, { "title": "License Plate Detection", "level": 2, "paragraphs": [ "When you have license plate contour detection enabled, you also get a list of points for each License Plate feature that was detected. These points represent the shape of the feature. The following image illustrates how these points map to a license plate.", "width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "License Plate plot", "level": 2, "paragraphs": [ "Try license plate detection below. You can use the your own image in its place. Send the request to the API. The sample Result are potrayed down below.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "License Plate Blurring", "level": 2, "paragraphs": [ "License Plate Blur API can automatically detect all faces within an image and blurs them. No need for manual face selection.", "Get up and running quickly. Implement License Plate Blur API in your stack with just one API call.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "License Plate Detection - Panoramas", "level": 2, "paragraphs": [ "To find the license plate contour features in panaramas, try box api, its sample results will be as below:", "alt=\"Markdown Monster icon\" width=\"1105px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "License Plate plot - Panoramas", "level": 2, "paragraphs": [ "Try license plate detection below. You can use the your own image in its place. Send the request to the API. The sample Result are potrayed down below.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "License Plate Blurring - Panoramas", "level": 2, "paragraphs": [ "License Plate Blur API can automatically detect all license plates within an image and blurs them. No need for manual selection.", "Get up and running quickly. Implement Face Blur API in your stack with just one API call.", "alt=\"Markdown Monster icon\" width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "How Algorithm Works", "level": 3, "paragraphs": [ "First, the API takes input as an image. If the end user wants face/license plate detection then an image with bounding box on the faces/license plates would be displayed. However, if the end user wants face/license plate blurring then blurred image would be displayed in the API as an output. the algorithm adds a layer that blurs them out with Gaussian Blurring (also known as smoothing), which reduces image details so that facial/license plate features can no longer be seen by the human eye.", "To test the application, upload a JPG, PNG file containing at least one face/license plate into the API. After a few seconds, the destination bucket contains the output file, with the same name. The output file shows blur content when the objects are detected: All operations are done with MapmyIndia Face Detection & Blurring API and take just a few minutes to set up." ] }, { "title": "Brand Detection API", "level": 2, "paragraphs": [ "Using these APIs Data Team can fully leverage and embed the power of AI Based Brand Detection from seen imagery data and Finding ROI( Region of Interest) of Detected brand detection as per the their own requirement.These ROI could be downloaded as a CSV file and used for data extraction.", "This model has been implemented on YOLOv5 model that effectively detect Brand Detection. High robustness in real complex scenarios such as in cloudy, sunny, rainy and at night is achieved. Real-time detection upto 33 frames per second.", "You can detect faces in an image, identify key facial features, and get the contours of detected faces. Note that the API detects faces, it does not recognize people .", "Also, if you have any difficulties using this feature or suggestions on how we can improve the existing functionality, feel free to create a post in our Community Area.", "• Brand Detection - Brand Details" ] }, { "title": "Brand Detection", "level": 2, "paragraphs": [ "To detect brands like petrol pumps, banks etc, try following API which gives contour points of the brands detection boxes in image.", "width=\"800px\" style=\"margin-left:auto;margin-right:auto\" />" ] }, { "title": "Brand Details", "level": 2, "paragraphs": [ "Major brands detected under this APIs are: 1. Indian Oil 2. Bharat Petroleum 3. Hindustan Petroleum 4. Essar Petroleum 5. Axis Bank 6. ICICI Bank 7. HDFC Bank 8. State Bank Of India 9. Canara Bank" ] }, { "title": "Features Highlights", "level": 2, "paragraphs": [ "This API Answers to every Question regarding face Detection & Blurring, such as : 1. Accuracy: The API has high accuracy in detecting license plates in various lighting conditions, angles, and distances. 2. Speed: The API provides fast and real-time processing of images for quick responses. 3. Scalability: The API is able to handle multiple requests simultaneously and scale up or down depending on demand. 4. Security: The API ensures the privacy and security of user data and protects against potential attacks. 5. Error Handling: The API provides meaningful error messages in case of input validation failures or other errors. 6. Robustness: The API is able to detect license plates under various conditions such as low-resolution images, partial occlusion, and varying aspect ratios. 7. Customization: The API allows for fine-tuning or customization of the license plate detection model accordi" ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "Sending visuals that include customers’ personal information, employee data, or company secrets can lead to a multitude of issues. In fact, many countries (and even individual states) have laws that govern how personally identifiable information can be shared both inside and outside your organization.", "Trust us, you never want to go through all the difficulties that improperly sharing private information can lead to.", "What happens when you need or want to share an image, but there are elements of it that you’d rather not (or can’t let) people see?", "You could remove info within your original document by restricting permissions or versions, but beware! There are ways to get around this type of security.", "Thankfully, there’s a better (and easier!) way.", "An API to blur any kind of object on the image. User would give bounding box of the region he/she wants to blur and with it the image he wants the operation to be performed and our latest blurring API would blur the specified region." ] }, { "title": "Documentation", "level": 4, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mapmyindia.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Ltd. All Rights Reserved." ] } ], "snippets": [], "endpointEvidence": [ "https://about.mappls.com/api/", "https://mappls-api.github.io/mappls-ai-apis/mgis-apis.html?urls.primaryName=Face%20Detection%20API%20%3E%20AI%2FML%20API", "https://www.mapmyindia.com/api/index.php#f_cont", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 26, "endpointCount": 16, "codeSampleCount": 0, "fingerprint": "80cfbc9b9c7ce4b4590d05e13717ec579353cf16c1b9315739be1f2b4caacc4e" } } ``` ## source-reference · Mappls Vector Map Android SDK JetPack Compose - Identity: `source-reference:mappls-android-compose-demo` - Canonical: https://developer.mappls.com/reference/mappls-android-compose-demo - State model: stateless ```json { "slug": "mappls-android-compose-demo", "sourceId": "public-mappls-android-compose-demo", "name": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose", "summary": "A Mappls sample for maps, search places, routes navigation, gis analytics, widgets deep links, capture feedback across Android.", "kind": "Sample", "maturity": "sample", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Groovy", "Text", "XML", "Kotlin" ], "repositoryUrl": "https://github.com/mappls-api/mappls-android-compose-demo", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-android-compose-demo/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-android-compose-demo/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-07-31T11:15:49Z", "localCandidates": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Mappls Vector Map Android SDK JetPack Compose", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications Powered with India’s most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan and Bangladesh", "1. You can get your api key to be used in this document here: https://www.mapmyindia.com/api/signup", "2. The sample code is provided to help you understand the basic functionality of MapmyIndia maps & REST APIs working on Android native development platform.", "3.Explore through 200+ countries & territories with Global Search, Routing and Mapping APIs & SDKs by Mappls." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Mappls Maps SDK for Android lets you easily add Mappls Maps and web services to your own Android application. The SDK for Android supports API 21+. You can have a look at the map and features you will get in your own app by using the Mappls Maps SDK for Android.", "Through customized tiles, you can add different map layers to your application and add bunch of controls and gestures to enhance map usability thus creating potent map based solutions for your customers. The SDK handles downloading of map tiles and their display along with a bunch of controls and native gestures." ] }, { "title": "Setup your project", "level": 2, "paragraphs": [ "Follow these steps to add the SDK to your project – - Create a new project in Android Studio For older Build versions (i.e, Before gradle v7.0.0) - Add Mappls repository in your project level build.gradle", "For Newer Build Versions (i.e, After gradle v7.0.0)", "• Add MapmyIndia repository in your settings.gradle", "• Add below dependency in your app-level build.gradle", "• Add these permissions in your project" ] }, { "title": "Add Java 8 Support to the project", "level": 3, "paragraphs": [ "add following lines in your app module’s build.gradle" ] }, { "title": "Add your API keys to the SDK", "level": 3, "paragraphs": [ "Add your API keys to the SDK (in your application’s onCreate() or before using map)", "You cannot use the Mappls Map Mobile SDK without these function calls. You will find your keys in your API Dashboard." ] }, { "title": "Add a Mappls Map to your application", "level": 2, "paragraphs": [ "To make Jetpack compose Support", "onSuccess callback provides MapView and MapplsMap which is used to perform different operations." ] }, { "title": "Add Marker", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Groovy", "label": "Setup your project", "code": "allprojects {\nrepositories {\nmaven {\n url 'https://maven.mappls.com/repository/mappls/'\n}\n}\n}" }, { "language": "Groovy", "label": "Setup your project", "code": "dependencyResolutionManagement {\n// repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\nrepositories {\n google()\n mavenCentral()\n maven {\n url 'https://maven.mappls.com/repository/mappls/'\n }\n}\n}" }, { "language": "Groovy", "label": "Setup your project", "code": "implementation 'com.mappls.sdk:mappls-android-sdk:8.x.x'\nimplementation 'com.mappls.sdk:annotation-plugin:1.x.x'" }, { "language": "XML", "label": "Setup your project", "code": "\n" }, { "language": "Groovy", "label": "Add Java 8 Support to the project", "code": "compileOptions {\nsourceCompatibility 1.8\ntargetCompatibility 1.8\n}" }, { "language": "Kotlin", "label": "Add your API keys to the SDK", "code": "MapplsAccountManager.getInstance().restAPIKey = \"YOUR_RESTAPIKEY\"\nMapplsAccountManager.getInstance().mapSDKKey = \"SET_MAP_KEY\"\nMapplsAccountManager.getInstance().atlasClientId = \"YOUR_ATLASCLIENTID\"\nMapplsAccountManager.getInstance().atlasClientSecret = \"YOUR_ATLASCLIENTSECRET\"\nMappls.getInstance(applicationContext)" }, { "language": "Kotlin", "label": "Add a Mappls Map to your application", "code": "@Composable\nfun MapplsMap(\n modifier: Modifier = Modifier,\n onSuccess: ((MapView, MapplsMap) -> Unit)? = null,\n onError: ((Int, String?) -> Unit)? = null\n) {\n val mapView = MapView()\n AndroidView(\n factory = { mapView },\n modifier = modifier\n ) {\n it.getMapAsync(object : OnMapReadyCallback {\n override fun onMapReady(p0: MapplsMap) {\n\t\tonSuccess?.invoke(it, p0)\n\t }\n\n\t override fun onMapError(p0: Int, p1: String?) {\n onError?.invoke(p0, p1)\n }\n})\n}\n}\n\n @Composable \nprivate fun MapView(): MapView { \n val context = LocalContext.current \n val mapView = remember { \n MapView(context) \n } \n \n val lifecycle = LocalLifecycleOwner.current.lifecycle \n DisposableEffect(lifecycle, mapView) { \n // Make MapView follow the current lifecycle \n val lifecycleObserver = getMapLifecycleObserver(mapView) \n lifecycle.addObserver(lifecycleObserver) \n onDispose { \n\tmapView.onResume()\n\tmapView.onStop()\n\tmapView.onDestroy()\n lifecycle.removeObserver(lifecycleObserver) \n } \n } \n return mapView \n} \n \n/** \n * Handles lifecycle of provided mapView \n **/\nprivate fun getMapLifecycleObserver(mapView: MapView): LifecycleEventObserver = \n LifecycleEventObserver { _, event -> \n when (event) { \n Lifecycle.Event.ON_CREATE -> mapView.onCreate(Bundle()) \n Lifecycle.Event.ON_START -> mapView.onStart() \n Lifecycle.Event.ON_RESUME -> mapView.onResume() \n Lifecycle.Event.ON_PAUSE -> mapView.onPause() \n Lifecycle.Event.ON_STOP -> mapView.onStop() \n Lifecycle.Event.ON_DESTROY -> mapView.onDestroy() \n else -> throw IllegalStateException() \n } \n }" }, { "language": "Kotlin", "label": "Add a Mappls Map to your application", "code": "MapplsMap(onSuccess = { mapView, mapplsMap->\n\n},\nonError = { code, message ->\n\n})" }, { "language": "Kotlin", "label": "Add Marker", "code": "@Composable\nfun AddMarkerScreen() {\nScaffold(topBar = {\nTopAppBar(title = { Text(text = \"Add Marker\") })\n}) {\n Column {\n MapplsMap(onSuccess={ mapView, mapplsMap ->\n mapplsMap.getStyle {\n val symbolManager = SymbolManager(mapView, mapplsMap, it)\n symbolManager.create(SymbolOptions().position(LatLng(27.0, 77.0)))\n }\nmapplsMap.cameraPosition = CameraPosition.Builder()\n.target(LatLng(27.0, 77.0))\n.zoom(14.0)\n.build()\n},\nonError = { _, _ ->\n\n})\n}\n}}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://www.mapmyindia.com/api/signup](https://www.mapmyindia.com/api/signup", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://maven.mappls.com/repository/mappls/", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 7, "endpointCount": 20, "codeSampleCount": 9, "fingerprint": "37562302b0fcd2d2115c705f2ea3f943594b266599b2e42118ce6e0a091b16a8" } } ``` ## source-reference · Mappls Android SDK - Identity: `source-reference:mappls-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-android-sdk - State model: stateless ```json { "slug": "mappls-android-sdk", "sourceId": "public-mappls-android-sdk", "name": "mappls-android-sdk", "title": "Mappls Android SDK", "summary": "A collection of Mappls's Map and others SDKs for Native android Development.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Android" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-android-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-android-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-08T05:06:14Z", "localCandidates": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch." ] }, { "title": "Mappls Android SDK", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Android Applications", "Powered with India's most comprehensive and robust mapping functionalities.", "1. You can get your api key to be used in this document here: Mappls Dashboard", "2. The sample code is provided to help you understand the basic functionality of Mappls maps & REST APIs working on Android native development platform.", "4. Explore through 200+ countries & territories with Global Search, Routing and Mapping APIs & SDKs by Mappls." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Getting Started Add Mappls Repository Adding Mappls Configuration file Import Mappls BoM - Mappls Map SDK - Version History - Add Mappls Map Dependency - Initialize Mappls Map SDK - Adding Mappls Map Using MapView Using Support Map Fragment - Map Gestures Target Tilt Bearing Zoom - Map Camera Camera Position Camera Animations - Move Camera - Ease Camera - Animate Camera - Camera Controls Move To Target Move To Target with Zoom Move To Target with Padding Move To Bound Zoom To Zoom By Zoom In Zoom Out Bearing To Tilt To Padding To - Map Events Map Click Event Map Long Click Event Camera Events - Camera Movement Ended - Camera Movement Canceled - Camera Movement Started - Camera Movement Changes - Map Overlays Marker - Add Marker - Add Marker with Infowindow - Custom Marker - Custom InfoWindow - Remove Marker Polyline - Add polyline - Remove Polyline Polygon - Add Polygon - Remove Polygo", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-android-sdk/tree/main", "https://github.com/mappls-api/mappls-android-sdk/tree/auth-legacy", "https://www.mapmyindia.com/api", "https://auth.mappls.com/console", "https://github.com/mappls-api/mappls-rest-apis/blob/main/docs/countryISO.md", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0" } } ``` ## source-reference · Mappls Annotation Extension for iOS - Identity: `source-reference:mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-annotation-extension-ios-distribution - State model: stateless ```json { "slug": "mappls-annotation-extension-ios-distribution", "sourceId": "public-mappls-annotation-extension-ios-distribution", "name": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS", "summary": "Mappls Annotation Extension Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-11T07:32:21Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Mappls Annotation Extension for iOS", "level": 1, "paragraphs": [ "The Mappls Annotation Extension is a lightweight library you can use with the Mappls Map SDK for iOS to quickly add basic shapes, icons, and other annotations to a map.", "This extension leverages the power of runtime styling with an object oriented approach to simplify the creation and styling of annotations." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "The Mappls Annotation Extension supports the addition of circles, lines, polygons, and symbols. Each shape type has its own corresponding controller which manages the addition of multiple shape objects of the same type.", "Since the map needs to be finished loading before adding shapes to it, all shapes should be added within the MGLMapView:didFinishLoadingStyle: delegate method." ] }, { "title": "Circles (MGLCircleStyleAnnotation)", "level": 3, "paragraphs": [ "Circles represent a coordinate point on a map with an associated radius, measured in pixels.", "Circle can be created by two ways.", "One is by creating instance of MGLCircleStyleAnnotation, either using a coordinate or Mappls Pin.", "See code below to plot circle on map:", "Second is by passing a geoJSON (with point geometry) string in function create of instance of MGLCircleAnnotationController. As mentioned below." ] }, { "title": "Lines (MGLLineStyleAnnotation)", "level": 3, "paragraphs": [ "Lines represent a connected series of coordinates.", "Line can be created by two ways.", "One is by creating instance of MGLLineStyleAnnotation using array of coordinates. As mentioned below.", "Second is by passing a geoJSON (with line geometry) string in function create of instance of MGLLineAnnotationController. As mentioned below." ] }, { "title": "Polygons (MGLPolygonStyleAnnotation)", "level": 3, "paragraphs": [ "Polygons represent a connected series of coordinates, where the first and last coordinates are equal.", "Polygons can be created by two ways.", "One is by creating instance of MGLPolygonStyleAnnotation using array of coordinates. As mentioned below.", "Second is by passing a geoJSON (with polygon geometry) string in function create of instance of MGLPolygonAnnotationController. As mentioned below." ] }, { "title": "Symbols (MGLSymbolStyleAnnotation)", "level": 3, "paragraphs": [ "Symbols represent a coordinate point on a map with a label and an associated optional icon image. An image must be supplied to the map's style before being able to assign it to be the icon image of a symbol.", "Symbol can be created by two ways.", "One is by creating instance of MGLSymbolStyleAnnotation either using a coordinate or Mappls Pin.", "See code below to plot symbol marker on map:", "Second is by passing a geoJSON (with point geometry) string in function create of instance of MGLSymbolAnnotationController. As mentioned below." ] }, { "title": "Displaying callouts for style annotations", "level": 3, "paragraphs": [ "Style annotations support callouts that appear when the annotation is selected. Each callout can display additional information about its annotation.", "1) To enable callouts for a style annotation, create a class property with the controller type you are enabling interaction for:", "2) The style annotation must contain a title and must implement two delegate methods using the Maps SDK for iOS. The first method, annotationCanShowCallout should return true. The second method, viewFor annotation: should return an empty MGLAnnotationView matching the size of the style annotation's shape, as shown below." ] }, { "title": "Supported Properties", "level": 2, "paragraphs": [ "Each MGLStyleAnnotation class can be assigned a specific set of properties to configure its layout and style. Additionally, MGLAnnotationControllers also have properties that can assign a specific layout property to all of its child MGLStyleAnnotations.", "MGLCircleStyleAnnotation", "• circleRadius - circleColor - circleOpacity - circleStrokeWidth - circleStrokeColor - circleStrokeOpacity", "MGLCircleAnnotationController", "• circleTranslation - circleTranslationAnchor - circlePitchAlignment - circleScaleAlignment", "MGLLineStyleAnnotation" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(centerMapplsPin: \"MMI000\", radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circleAnnotationController.add(circle)\n}" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circleGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"circle-radius\\\": \\\"50\\\",\\\"circle-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"circle-blur\\\": \\\"0\\\",\\\"circle-opacity\\\": \\\"0.7\\\",\\\"circle-stroke-width\\\": \\\"5\\\",\\\"circle-stroke-color\\\": \\\"rgba(0, 255, 0, 1)\\\",\\\"circle-stroke-opacity\\\": \\\"0.6\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [174.70458984375,-39.588757276965445]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n circleAnnotationController.create(fromGeoJSON: circleGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription) \n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else { \n print(\"No result found\") \n }\n }\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n \n let lineCoordinates = [\n CLLocationCoordinate2D(latitude: 59, longitude: 18),\n CLLocationCoordinate2D(latitude: 60, longitude: 20)\n ]\n \n let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))\n line.color = .purple\n lineAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "let lineGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"line-join\\\": \\\"bevel\\\",\\\"line-opacity\\\": \\\"0.7\\\",\\\"line-color\\\":\\\"rgba(0, 255, 0, 1)\\\",\\\"line-width\\\": \\\"10\\\",\\\"line-gap-width\\\": \\\"1\\\",\\\"line-offset\\\": \\\"2\\\",\\\"line-blur\\\": \\\"0\\\"},\\\"geometry\\\": {\\\"type\\\": \\\"LineString\\\",\\\"coordinates\\\": [[168.5302734375,-46.377254205100265],[169.0576171875,-46.36209301204983],[169.65087890625,-46.13417004624325],[170.5078125,-45.782848351976746],[170.68359375,-45.213003555993964],[170.79345703124997,-44.840290651397986],[171.2109375,-44.16644466445859],[171.84814453125,-43.80281871904721],[172.59521484375,-43.309191099856854],[172.83691406249997,-42.81152174509788],[173.38623046875,-42.342305278572816]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n\n lineAnnotationController.create(fromGeoJSON: lineGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" }, { "language": "Swift", "label": "Polygons (MGLPolygonStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let polygonAnnotationController = MGLPolygonAnnotationController(mapView: self.mapView)\n \n let polygonCoordinates = [\n CLLocationCoordinate2DMake(59, 18),\n CLLocationCoordinate2DMake(62, 19),\n CLLocationCoordinate2DMake(54, 20),\n CLLocationCoordinate2DMake(59, 18)\n ]\n \n let polygon = MGLPolygonStyleAnnotation(coordinates: polygonCoordinates, count: UInt(polygonCoordinates.count))\n polygon.fillOutlineColor = .red\n polygonAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Polygons (MGLPolygonStyleAnnotation)", "code": "let polygonGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"fill-opacity\\\": \\\"0.6\\\",\\\"fill-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"fill-outline-color\\\": \\\"rgba(255, 0, 0, 1)\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Polygon\\\",\\\"coordinates\\\": [[[170.947265625,-40.38002840251182],[172.59521484375,-39.90973623453718],[172.77099609375,-39.06184913429153],[172.77099609375,-38.03078569382294],[171.97998046874997,-37.579412513438385],[170.859375,-38.169114135560854],[169.93652343749997,-38.685509760012],[169.0576171875,-38.90813299596704],[168.99169921875,-40.563894530665074],[170.947265625,-40.38002840251182]]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let polygonAnnotationController = MGLPolygonAnnotationController(mapView: self.mapView)\n \n polygonAnnotationController.create(fromGeoJSON: polygonGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "let symbol = MGLSymbolStyleAnnotation(coordinate: CLLocationCoordinate2DMake(59, 18));" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "let symbol = MGLSymbolStyleAnnotation(mapplsPin: \"MMI000\")" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let attraction = UIImage(named: \"attraction\")\n \n if let styleImage = attraction {\n self.mapView.style?.setImage(styleImage, forName: \"attraction\")\n }\n \n let symbolAnnotationController = MGLSymbolAnnotationController(mapView: self.mapView)\n \n let symbol = MGLSymbolStyleAnnotation(coordinate: CLLocationCoordinate2DMake(59, 18));\n symbol.iconImageName = \"attraction\"\n symbol.text = \"This is a cool place!\"\n symbol.textFontSize = 16\n symbolAnnotationController.add(symbol)\n}" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "let symbolGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"symbol-sort-key\\\": \\\"0\\\",\\\"icon-size\\\": \\\"1\\\",\\\"icon-image\\\": \\\"star-icon-image\\\",\\\"icon-rotate\\\": \\\"45\\\",\\\"icon-offset\\\": [5,10],\\\"icon-anchor\\\": \\\"bottom\\\",\\\"text-field\\\": \\\"Hello\\\",\\\"text-font\\\": [\\\"Open Sans Bold\\\"],\\\"text-size\\\": \\\"30\\\",\\\"text-max-width\\\": \\\"200\\\",\\\"text-letter-spacing\\\": \\\"1\\\",\\\"text-justify\\\": \\\"right\\\",\\\"text-radial-offset\\\": \\\"10\\\",\\\"text-anchor\\\": \\\"center\\\",\\\"text-rotate\\\": \\\"-30\\\",\\\"text-transform\\\": \\\"uppercase\\\",\\\"text-offset\\\": [5,10],\\\"icon-opacity\\\": \\\"0.6\\\",\\\"icon-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"icon-halo-color\\\": \\\"#00FF00\\\",\\\"icon-halo-width\\\": \\\"10\\\",\\\"icon-halo-blur\\\": \\\"0\\\",\\\"text-opacity\\\": \\\"0.5\\\",\\\"text-color\\\": \\\"rgba(255, 0, 0, 1)\\\",\\\"text-halo-color\\\": \\\"hsla(100, 50%, 50%, 1)\\\",\\\"text-halo-width\\\": \\\"5\\\",\\\"text-halo-blur\\\": \\\"0\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [172.5732421875,-46.31658418182218]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let attraction = UIImage(named: \"attraction\")\n \n if let styleImage = attraction {\n self.mapView.style?.setImage(styleImage, forName: \"attraction\")\n }\n \n let symbolAnnotationController = MGLSymbolAnnotationController(mapView: self.mapView)\n \n symbolAnnotationController.create(fromGeoJSON: symbolGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" }, { "language": "Swift", "label": "Displaying callouts for style annotations", "code": "class ViewController: UIViewController {\n var mapView: MGLMapView!\n var circleAnnotationController: MGLCircleAnnotationController!\n}" }, { "language": "Swift", "label": "Displaying callouts for style annotations", "code": "extension ViewController : MapplsMapViewDelegate {\n\n func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circle.title = \"Title\"\n circleAnnotationController.add(circle)\n }\n\n func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {\n return true;\n }\n\n func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {\n return MGLAnnotationView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54" } } ``` ## source-reference · Mappls Annotation Extension for iOS - Identity: `source-reference:mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-annotation-extension-ios-distribution-base - State model: stateless ```json { "slug": "mappls-annotation-extension-ios-distribution-base", "sourceId": "public-mappls-annotation-extension-ios-distribution-base", "name": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS", "summary": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T06:30:06Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Mappls Annotation Extension for iOS", "level": 1, "paragraphs": [ "The Mappls Annotation Extension is a lightweight library you can use with the Mappls Map SDK for iOS to quickly add basic shapes, icons, and other annotations to a map.", "This extension leverages the power of runtime styling with an object oriented approach to simplify the creation and styling of annotations." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "The Mappls Annotation Extension supports the addition of circles, lines, polygons, and symbols. Each shape type has its own corresponding controller which manages the addition of multiple shape objects of the same type.", "Since the map needs to be finished loading before adding shapes to it, all shapes should be added within the MGLMapView:didFinishLoadingStyle: delegate method." ] }, { "title": "Circles (MGLCircleStyleAnnotation)", "level": 3, "paragraphs": [ "Circles represent a coordinate point on a map with an associated radius, measured in pixels.", "Circle can be created by two ways.", "One is by creating instance of MGLCircleStyleAnnotation, either using a coordinate or Mappls Pin.", "See code below to plot circle on map:", "Second is by passing a geoJSON (with point geometry) string in function create of instance of MGLCircleAnnotationController. As mentioned below." ] }, { "title": "Lines (MGLLineStyleAnnotation)", "level": 3, "paragraphs": [ "Lines represent a connected series of coordinates.", "Line can be created by two ways.", "One is by creating instance of MGLLineStyleAnnotation using array of coordinates. As mentioned below.", "Second is by passing a geoJSON (with line geometry) string in function create of instance of MGLLineAnnotationController. As mentioned below." ] }, { "title": "Polygons (MGLPolygonStyleAnnotation)", "level": 3, "paragraphs": [ "Polygons represent a connected series of coordinates, where the first and last coordinates are equal.", "Polygons can be created by two ways.", "One is by creating instance of MGLPolygonStyleAnnotation using array of coordinates. As mentioned below.", "Second is by passing a geoJSON (with polygon geometry) string in function create of instance of MGLPolygonAnnotationController. As mentioned below." ] }, { "title": "Symbols (MGLSymbolStyleAnnotation)", "level": 3, "paragraphs": [ "Symbols represent a coordinate point on a map with a label and an associated optional icon image. An image must be supplied to the map's style before being able to assign it to be the icon image of a symbol.", "Symbol can be created by two ways.", "One is by creating instance of MGLSymbolStyleAnnotation either using a coordinate or Mappls Pin.", "See code below to plot symbol marker on map:", "Second is by passing a geoJSON (with point geometry) string in function create of instance of MGLSymbolAnnotationController. As mentioned below." ] }, { "title": "Displaying callouts for style annotations", "level": 3, "paragraphs": [ "Style annotations support callouts that appear when the annotation is selected. Each callout can display additional information about its annotation.", "1) To enable callouts for a style annotation, create a class property with the controller type you are enabling interaction for:", "2) The style annotation must contain a title and must implement two delegate methods using the Maps SDK for iOS. The first method, annotationCanShowCallout should return true. The second method, viewFor annotation: should return an empty MGLAnnotationView matching the size of the style annotation's shape, as shown below." ] }, { "title": "Supported Properties", "level": 2, "paragraphs": [ "Each MGLStyleAnnotation class can be assigned a specific set of properties to configure its layout and style. Additionally, MGLAnnotationControllers also have properties that can assign a specific layout property to all of its child MGLStyleAnnotations.", "MGLCircleStyleAnnotation", "• circleRadius - circleColor - circleOpacity - circleStrokeWidth - circleStrokeColor - circleStrokeOpacity", "MGLCircleAnnotationController", "• circleTranslation - circleTranslationAnchor - circlePitchAlignment - circleScaleAlignment", "MGLLineStyleAnnotation" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(centerMapplsPin: \"MMI000\", radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circleAnnotationController.add(circle)\n}" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circleGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"circle-radius\\\": \\\"50\\\",\\\"circle-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"circle-blur\\\": \\\"0\\\",\\\"circle-opacity\\\": \\\"0.7\\\",\\\"circle-stroke-width\\\": \\\"5\\\",\\\"circle-stroke-color\\\": \\\"rgba(0, 255, 0, 1)\\\",\\\"circle-stroke-opacity\\\": \\\"0.6\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [174.70458984375,-39.588757276965445]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n circleAnnotationController.create(fromGeoJSON: circleGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription) \n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else { \n print(\"No result found\") \n }\n }\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n \n let lineCoordinates = [\n CLLocationCoordinate2D(latitude: 59, longitude: 18),\n CLLocationCoordinate2D(latitude: 60, longitude: 20)\n ]\n \n let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))\n line.color = .purple\n lineAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "let lineGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"line-join\\\": \\\"bevel\\\",\\\"line-opacity\\\": \\\"0.7\\\",\\\"line-color\\\":\\\"rgba(0, 255, 0, 1)\\\",\\\"line-width\\\": \\\"10\\\",\\\"line-gap-width\\\": \\\"1\\\",\\\"line-offset\\\": \\\"2\\\",\\\"line-blur\\\": \\\"0\\\"},\\\"geometry\\\": {\\\"type\\\": \\\"LineString\\\",\\\"coordinates\\\": [[168.5302734375,-46.377254205100265],[169.0576171875,-46.36209301204983],[169.65087890625,-46.13417004624325],[170.5078125,-45.782848351976746],[170.68359375,-45.213003555993964],[170.79345703124997,-44.840290651397986],[171.2109375,-44.16644466445859],[171.84814453125,-43.80281871904721],[172.59521484375,-43.309191099856854],[172.83691406249997,-42.81152174509788],[173.38623046875,-42.342305278572816]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n\n lineAnnotationController.create(fromGeoJSON: lineGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" }, { "language": "Swift", "label": "Polygons (MGLPolygonStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let polygonAnnotationController = MGLPolygonAnnotationController(mapView: self.mapView)\n \n let polygonCoordinates = [\n CLLocationCoordinate2DMake(59, 18),\n CLLocationCoordinate2DMake(62, 19),\n CLLocationCoordinate2DMake(54, 20),\n CLLocationCoordinate2DMake(59, 18)\n ]\n \n let polygon = MGLPolygonStyleAnnotation(coordinates: polygonCoordinates, count: UInt(polygonCoordinates.count))\n polygon.fillOutlineColor = .red\n polygonAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Polygons (MGLPolygonStyleAnnotation)", "code": "let polygonGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"fill-opacity\\\": \\\"0.6\\\",\\\"fill-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"fill-outline-color\\\": \\\"rgba(255, 0, 0, 1)\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Polygon\\\",\\\"coordinates\\\": [[[170.947265625,-40.38002840251182],[172.59521484375,-39.90973623453718],[172.77099609375,-39.06184913429153],[172.77099609375,-38.03078569382294],[171.97998046874997,-37.579412513438385],[170.859375,-38.169114135560854],[169.93652343749997,-38.685509760012],[169.0576171875,-38.90813299596704],[168.99169921875,-40.563894530665074],[170.947265625,-40.38002840251182]]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let polygonAnnotationController = MGLPolygonAnnotationController(mapView: self.mapView)\n \n polygonAnnotationController.create(fromGeoJSON: polygonGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "let symbol = MGLSymbolStyleAnnotation(coordinate: CLLocationCoordinate2DMake(59, 18));" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "let symbol = MGLSymbolStyleAnnotation(mapplsPin: \"MMI000\")" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let attraction = UIImage(named: \"attraction\")\n \n if let styleImage = attraction {\n self.mapView.style?.setImage(styleImage, forName: \"attraction\")\n }\n \n let symbolAnnotationController = MGLSymbolAnnotationController(mapView: self.mapView)\n \n let symbol = MGLSymbolStyleAnnotation(coordinate: CLLocationCoordinate2DMake(59, 18));\n symbol.iconImageName = \"attraction\"\n symbol.text = \"This is a cool place!\"\n symbol.textFontSize = 16\n symbolAnnotationController.add(symbol)\n}" }, { "language": "Swift", "label": "Symbols (MGLSymbolStyleAnnotation)", "code": "let symbolGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"symbol-sort-key\\\": \\\"0\\\",\\\"icon-size\\\": \\\"1\\\",\\\"icon-image\\\": \\\"star-icon-image\\\",\\\"icon-rotate\\\": \\\"45\\\",\\\"icon-offset\\\": [5,10],\\\"icon-anchor\\\": \\\"bottom\\\",\\\"text-field\\\": \\\"Hello\\\",\\\"text-font\\\": [\\\"Open Sans Bold\\\"],\\\"text-size\\\": \\\"30\\\",\\\"text-max-width\\\": \\\"200\\\",\\\"text-letter-spacing\\\": \\\"1\\\",\\\"text-justify\\\": \\\"right\\\",\\\"text-radial-offset\\\": \\\"10\\\",\\\"text-anchor\\\": \\\"center\\\",\\\"text-rotate\\\": \\\"-30\\\",\\\"text-transform\\\": \\\"uppercase\\\",\\\"text-offset\\\": [5,10],\\\"icon-opacity\\\": \\\"0.6\\\",\\\"icon-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"icon-halo-color\\\": \\\"#00FF00\\\",\\\"icon-halo-width\\\": \\\"10\\\",\\\"icon-halo-blur\\\": \\\"0\\\",\\\"text-opacity\\\": \\\"0.5\\\",\\\"text-color\\\": \\\"rgba(255, 0, 0, 1)\\\",\\\"text-halo-color\\\": \\\"hsla(100, 50%, 50%, 1)\\\",\\\"text-halo-width\\\": \\\"5\\\",\\\"text-halo-blur\\\": \\\"0\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [172.5732421875,-46.31658418182218]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let attraction = UIImage(named: \"attraction\")\n \n if let styleImage = attraction {\n self.mapView.style?.setImage(styleImage, forName: \"attraction\")\n }\n \n let symbolAnnotationController = MGLSymbolAnnotationController(mapView: self.mapView)\n \n symbolAnnotationController.create(fromGeoJSON: symbolGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" }, { "language": "Swift", "label": "Displaying callouts for style annotations", "code": "class ViewController: UIViewController {\n var mapView: MGLMapView!\n var circleAnnotationController: MGLCircleAnnotationController!\n}" }, { "language": "Swift", "label": "Displaying callouts for style annotations", "code": "extension ViewController : MapplsMapViewDelegate {\n\n func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circle.title = \"Title\"\n circleAnnotationController.add(circle)\n }\n\n func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {\n return true;\n }\n\n func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {\n return MGLAnnotationView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54" } } ``` ## source-reference · [MapplsAPICore]() - Identity: `source-reference:mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-api-core-ios-distribution - State model: stateless ```json { "slug": "mappls-api-core-ios-distribution", "sourceId": "public-mappls-api-core-ios-distribution", "name": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore]()", "summary": "Mappls API Core Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-30T05:11:46Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "This SDK provides core features for authentication and access for various Mappls's SDKs in a very simple way. The preferred way of integrating the SDK can be found in the below." ] }, { "title": "Authentication", "level": 2, "paragraphs": [ "To initialize and authenticate any Mappls SDK , you must include i.conf and i.olf files in your project bundle:", "You can download the required files from the Auth Console" ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 8, "endpointCount": 18, "codeSampleCount": 0, "fingerprint": "32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734" } } ``` ## source-reference · [MapplsAPIKit (REST API Kit for iOS)]() - Identity: `source-reference:mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-api-kit-ios-distribution - State model: stateless ```json { "slug": "mappls-api-kit-ios-distribution", "sourceId": "public-mappls-api-kit-ios-distribution", "name": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "summary": "Mappls API Kit Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "gis-analytics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Objective-C", "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:04:09Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Our APIs, SDKs, and live updating map data available for 200+ countries & territories give developers tools to build better experiences across various platforms.", "1. You can get your authentication information to be used in this document here: https://auth.mappls.com/console/", "2. The sample code is provided to help you understand the basic functionality of Mappls REST APIs working on iOS native development platform." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore. All dependent libraries will be automatically." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Mappls Map SDK for iOS lets you easily add Mappls Map and services to your own iOS app.It supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls Map app for iOS. The SDK handles Map Display along with a bunch of controls and native gestures." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls keys and authenticate before using any Mappls SDK. Please see the reference here." ] }, { "title": "API Usage and Requirements", "level": 2, "paragraphs": [ "The allowed SDK hits are described on the plans page. Note that your usage is shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] }, { "title": "Autosuggest API", "level": 2, "paragraphs": [ "Get \"type as you go\" suggestion while searching for a location.", "The Autosuggest API helps users to complete queries faster by adding intelligent search capabilities to your web or mobile app. This API returns a list of results as well as suggested queries as the user types in the search field.", "For live demo click LIVE DEMO", "The Autosuggest helps users to complete queries faster by adding intelligent search capabilities to your iOS mobile app. It takes a human readable query such as place name, address or Mappls Pin and returns a list of results.", "Class used for Autosuggest search is MapplsAutoSuggestManager. Create a MapplsAutoSuggestManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsAutoSuggestManager class.", "To perform auto suggest use MapplsAutoSearchAtlasOptions class to pass query parameter to get auto suggest search with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, It will take default value which is India." ] }, { "title": "Request Parameters", "level": 3, "paragraphs": [ "1. location: Location is required to get location bias autosuggest results. 2. zoom: takes the zoom level of the current scope of the map (min: 4, max: 18). 3. includeTokenizeAddress: On setting value of this property to true it provides the different address attributes in a structured object in response. 4. pod: It takes place type which helps in restricting the results to certain chosen type Below mentioned are the codes for the pod - - Sublocality - Locality - City - Village - Subdistrict - District - State - Subsublocality 5. filter: This helps you restrict the result either by mentioning a bounded area or to certain Mappls Pin. Below mentioned are both types whose instance can be set to this parameter - - (a) MapplsMapplsPinFilter: to filter results on basis of Mappls Pin. - (b) MapplsBoundsFilter: to filter results on basis of geo bound. It accepts a value of type MapplsRectangular", "8. responseLanguage: It is of type string it is use to get the response in specified language." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "In response of auto suggest search either you will receive an error or an object of MapplsAutoSuggestLocationResults(derived from MapplsLocationResults) which contains an array of MapplsAtlasSuggestion (derived from MapplsSuggestion) and an array of suggested searches of type MapplsSearchPrediction.", "Note: As class of response object will be derived from MapplsLocationResults, You will need to cast it into MapplsAutoSuggestLocationResults.", "You will find below useful properties in suggestion object :", "1. type: type of location POI or Country or City 2. mapplsPin: Mappls Pin of the location 6-char alphanumeric. 3. placeAddress: Address of the location. 4. placeName: Name of the location. 5. orderIndex: the order where this result should be placed 6. addressTokens:", "houseNumber: house number of the location.", "houseName: house name of the location." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "For more details visit our api reference documentation." ] }, { "title": "Reverse Geocoding API", "level": 2, "paragraphs": [ "For live demo click LIVE DEMO", "Gets the nearest address for a given lat long combination.", "Reverse Geocoding is a process to give the closest matching address to a provided geographical coordinates (latitude/longitude). Mappls's reverse geocoding API provides real addresses along with nearest popular landmark for any such geo-positions on the map.", "Class used for geocode is MapplsReverseGeocodeManager. Create a MapplsReverseGeocodeManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsReverseGeocodeManager class.", "To perform the translation use MapplsReverseGeocodeOptions class to pass coordinates as parameters to reverse geocode with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, It will take default value which is India." ] }, { "title": "Request Parameters", "level": 3, "paragraphs": [ "• coordinate: - language", "MapplsRegionType is used to validate and get result for different countries." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "In response of geocode search either you will receive an error or an array of MapplsGeocodedPlacemark. Yo will find below useful properties in suggestion object:", "• houseNumber: The house number of the location. - houseName: The name of the location. - poi: The name of the POI if the location is a place of interest (POI). - poiDist: distance from nearest POI in metres. - street: The name of the street of the location. - streetDist: distance from nearest Street in metres. - subSubLocality: The name of the sub-sub-locality where the location exists. - subLocality: The name of the sub-locality where the location exists. - locality: The name of the locality where the location exists. - village: The name of the village if the location exists in a village. - district: The name of the district in which the location exists. - subDistrict: The name of the sub-district in which the location exists. - city: The name of the city in which the location exists. - state: The name of the state in which the location exists. - pincode: The pin code of the location a", "• formattedAddress: The complete human readable address string that is usually the complete postal address of the result. - areaCode: The area code of region. - area: in-case the co-ordinate lies in a country the name of the country would be returned or if the co-ordinate lies in an ocean, the name of the ocean will be returned." ] }, { "title": "Premium Response Parameters (only for India region)", "level": 3, "paragraphs": [ "1. Census Information: (as per last census) - sttCenCd(String): State's census code. - dstCenCd(String): District's census code. - sdbCenCd(String): Subdistrict's census code. - vlgCenCd(String): Village's census code, if address is rural. - twnCenCd(String): Town's census code, if address is within any census town.", "Note: Here town means a census town - an urban agglomeration defined by GoI during census; which is different from a city.", "• twnName(String): Town's name as per last census.", "1. Local Government Directory (LGD Information) - sttLgdCd(String): State's LGD code. - dstLgdCd(String): District's LGD code. - sdbLgdCd(String): Subdistrict's LGD code. - vlgLgdCd(String): Village's LGD code, if address is rural. - twnLgdCd(String): Town's LGD code, if address is within any census town." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "For more details visit our api reference documentation." ] }, { "title": "Nearby API", "level": 2, "paragraphs": [ "For live demo click LIVE DEMO", "Nearby Places API, enables you to add discovery and search of nearby places by searching for a generic keyword used to describe a category of places or via the unique code assigned to that category.", "Class used for nearby search is MapplsNearByManager. Create a MapplsNearByManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsNearByManager class.", "To perform nearby search use MapplsNearbyAtlasOptions class to pass keywords/categories and a reference location as parameters to get Nearby search results with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, It will take default value which is India.", "MapplsRegionType is used to validate and get result for different countries.", "Additionally you can also set location and zoom in object of MapplsNearbyAtlasOptions location coordinate can be set in comma seprated format i.e (\"latitue\", \"longitue\") or location can be Mappls Pin for eg. (\"MMI000\")" ] }, { "title": "Request Parameters", "level": 3, "paragraphs": [ "1. refLocation A location provides the location around which the search will be performed it can be coordinte (latitude, longitude) or Mappls Pin in String format.", "1. page: provides number of the page to provide results from.", "2. sort: provides configured sorting operations for the client on cloud. Below are the available sorts: - dist:asc & dist:desc - will sort data in order of distance from the passed location (default). - name:asc & name:desc - will sort the data on alphabetically bases.", "3. radius (integer): provides the range of distance to search over (default: 1000, min: 500, max: 10000).", "4. sortBy: It is used to sort results based on value provided. It can accept object of MapplsSortBy or MapplsSortByDistanceWithOrder", "5. searchBy: It is used to search places based on preference provided. It is of enum type MapplsSearchByType its value can be either .importance or .distance" ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "You will find below useful properties in suggestion object :", "• distance: provides the distance from the provided location bias in meters. - mapplsPin: Mappls Pin, unique id of the location 6-char alphanumeric. - email: Email for contact.", "• keywords: provides an array of matched keywords or codes. - landlineNo: Email for contact.", "• mobileNo : Phone number for contact. - orderIndex: the order where this result should be placed - placeAddress: Address of the location. - placeName: Name of the location. - type: Type of location POI or Country or City. - city: Name of city. - state: Name of state - pincode: Pincode of area. - categoryCode: Code of category with that result belongs to. - richInfo: A dictionary object with dynamic information - hourOfOperation: A string value which describes hour of operation. - addressTokens: - houseNumber: house number of the location. - houseName: house name of the location. - poi: name of the POI (if applicable) - street: name of the street. (if applicable) - subSubLocality: the sub-sub-locality to which the location belongs. (if applicable) - subLocality: the sub-locality to which the location belongs. (if applicable) - locality: the locality to which the location belongs. (if app" ] }, { "title": "Code Samples", "level": 3, "paragraphs": [ "For more details visit our api reference documentation." ] }, { "title": "Place Detail", "level": 2, "paragraphs": [ "The Mappls Pin is a simple, standardised and precise PAN India digital address system. Every location has been assigned a unique digital address or an Mappls Pin. The Place Detail can be used to extract the details of a place with the help of its Mappls Pin i.e. a 6 digit code.", "Class used for Mappls Pin search is MapplsPlaceDetailManager. Create a MapplsPlaceDetailManager object using your authenticated Mappls's keys or alternatively, you can use the shared instance of MapplsPlaceDetailManager class.", "To perform Place Detail use MapplsPlaceDetailOptions class to pass digital address code (Mappls Pin) as parameters to get detail result with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, it will take default value which is India." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "In response of Mappls Pin search either you will receive an error or an object of MapplsPlaceDetail.", "• mapplsPin: The Mappls Pin assigned for a place in map database. A Mappls Pin is the digital identity for an address or business to identify its unique location. - latitude: The latitude of the location. - longitude: The longitude of the location. - houseNumber: The house number of the location. - houseName: The name of the location. - poi: The name of the POI if the location is a place of interest (POI). - street: The name of the street of the location. - subSubLocality: The name of the sub-sub-locality where the location exists. - subLocality: The name of the sub-locality where the location exists. - locality: The name of the locality where the location exists. - village: The name of the village if the location exists in a village. - district: The name of the district in which the location exists. - subDistrict: The name of the sub-district in which the location exists. - city: The na", "Note: Not all response parameters are available by default. These parameters are available on demand as per mutually agreed use case. For details, please contact Mappls API support." ] }, { "title": "Objective C", "level": 4, "paragraphs": [ "let placeDetailManager = MapplsPlaceDetailManager.shared let placeOptions = MapplsPlaceDetailOptions(mapplsPin: \"mmi000\", withRegion: .india) placeDetailManager.getResults(placeOptions) { (placeDetail, error) in if let error = error { print(error) } else if let placeDetail = placeDetail, let latitude = placeDetail.latitude, let longitude = placeDetail.longitude { print(\"Place Detail : \\(latitude),\\(longitude)\") } else { print(\"No results\") } }", "MapplsAtlasGeocodeManager atlasGeocodeManager = [MapplsAtlasGeocodeManager sharedManager]; // or MapplsAtlasGeocodeManager atlasGeocodeManager = [[MapplsAtlasGeocodeManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];", "MapplsAtlasGeocodeOptions atlasGeocodeOptions = [[MapplsAtlasGeocodeOptions alloc] initWithQuery: @\"237 Mappls\" withRegion:MapplsRegionTypeIndia];", "[atlasGeocodeManager getGeocodeResultsWithOptions:atlasGeocodeOptions completionHandler:^(MapplsAtlasGeocodeAPIResponse Nullable response, NSError Nullable error) { if (error) { NSLog(@\"%@\", error); } else if (response!= nil && response.placemarks.count > 0) { NSLog(@\"Forward Geocode %@%@\", response.placemarks[0].latitude, response.placemarks[0].longitude); } else { NSLog(@\"No results\"); } }];", "let atlasGeocodeManager = MapplsAtlasGeocodeManager.shared // or let atlasGeocodeManager = MapplsAtlasGeocodeManager(restKey: MapplsAccountManager.restAPIKey(), clientId: MapplsAccountManager.atlasClientId(), clientSecret: MapplsAccountManager.atlasClientSecret(), grantType: MapplsAccountManager.atlasGrantType())", "let atlasGeocodeOptions = MapplsAtlasGeocodeOptions(query: \"237 Mappls\", withRegion: .india)" ] } ], "snippets": [ { "language": "Objectivec", "label": "Objective C", "code": "MapplsAutoSuggestManager * autoSuggestManager = [MapplsAutoSuggestManager sharedManager];\n// or\nMapplsAutoSuggestManager *autoSuggestManager = [[MapplsAutoSuggestManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsAutoSearchAtlasOptions * autoSuggestOptions = [[MapplsAutoSearchAtlasOptions alloc] initWithQuery:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\nautoSuggestOptions.location = [[CLLocation alloc] initWithLatitude:28.2323234 longitude:72.3434123];\nautoSuggestOptions.zoom = [[NSNumber alloc] initWithInt:5];\n[autoSuggestManager getAutoSuggestionResultsWithOptions:autoSuggestOptions completionHandler:^(MapplsLocationResults * _Nullable locationResults, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (locationResults) {\n MapplsAutoSuggestLocationResults * results = (MapplsAutoSuggestLocationResults *) locationResults;\n if(results && results.suggestions) {\n for (MapplsAtlasSuggestion * suggestion in results.suggestions) {\n NSLog(@\"Auto Suggest %@%@\", suggestion.latitude, suggestion.longitude);\n }\n }\n if(results && results.suggestedSearches) {\n for (MapplsSearchPrediction * suggestion in results.suggestedSearches) {\n NSLog(@\"Auto Suggest %@\", suggestion.identifier);\n }\n }\n } else {\n NSLog(@\"No Results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let autoSuggestManager = MapplsAutoSuggestManager.shared\n//Or\nlet autoSuggestManager = MapplsAutoSuggestManager(restKey:\nMapplsAccountManager.restAPIKey(), clientId:\nMapplsAccountManager.atlasClientId(), clientSecret:\nMapplsAccountManager.atlasClientSecret(), grantType:\nMapplsAccountManager.atlasGrantType())\n\nlet autoSearchAtlasOptions = MapplsAutoSearchAtlasOptions(query: \"mmi000\",\nwithRegion: .india)\nautoSearchAtlasOptions.location = CLLocation(latitude: 28.2323234, longitude: 72.3434123)\nautoSearchAtlasOptions.zoom = 5\nautoSuggestManager.getAutoSuggestionResults(autoSearchAtlasOptions) { (locationResults, error) in\n if let error = error {\n print(\"error: \\(error.localizedDescription)\")\n } else if let locationResults = locationResults as? MapplsAutoSuggestLocationResults {\n if let suggestions = locationResults.suggestions {\n for suggestion in suggestions {\n print(\"suggestion: \\(suggestion.placeName)\")\n }\n }\n if let suggestions = locationResults.suggestedSearches {\n for suggestion in suggestions {\n print(\"suggestedSearches: \\(suggestion.identifier)\")\n }\n }\n } else {\n print(\"No Results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsReverseGeocodeManager * reverseGeocodeManager = [MapplsReverseGeocodeManager sharedManager];\n//Or\nMapplsReverseGeocodeManager * reverseGeocodeManager = [[MapplsReverseGeocodeManager alloc] initWithClientId:MapplsAccountManager.clientId clientSecret:MapplsAccountManager.clientSecret grantType:nil host:nil scheme:nil];\n \nMapplsReverseGeocodeOptions *revOptions = [[MapplsReverseGeocodeOptions alloc] initWithCoordinate:CLLocationCoordinate2DMake(28.553291, 77.258876) withRegion:MapplsRegionTypeIndia];\n \n[reverseGeocodeManager reverseGeocodeWithOptions:revOptions completionHandler:^(NSArray * _Nullable placemarks, NSString * _Nullable attribution, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (placemarks.count > 0) {\n NSLog(@\"Reverse Geocode %@\",\n placemarks[0].formattedAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let reverseGeocodeManager = MapplsReverseGeocodeManager.shared\n//Or\nlet reverseGeocodeManager = MapplsReverseGeocodeManager(clientId: MapplsAccountManager.clientId(), clientSecret: MapplsAccountManager.clientSecret())\n \nlet revOptions = MapplsReverseGeocodeOptions(coordinate: CLLocationCoordinate2D(latitude: 28.553291, longitude: 77.258876), withRegion: .india)\nreverseGeocodeManager.reverseGeocode(revOptions) { (placemarks, attribution, error) in\n if let error = error {\n print(\"%@\", error)\n } else if let placemarks = placemarks, !placemarks.isEmpty {\n print(\"Reverse Geocode: \\(placemarks[0].formattedAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Request Parameters", "code": "let filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [String,String])" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsNearByManager * nearByManager = [MapplsNearByManager sharedManager];\n//Or\nMapplsNearByManager * nearByManager = [[MapplsNearByManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n \nNSString *refLocation = @\"28.550667, 77.268959\";\n \nMapplsNearbyAtlasOptions *nearByOptions = [[MapplsNearbyAtlasOptions alloc] initWithQuery:@\"EV Charging\" location:refLocation withRegion:MapplsRegionTypeIndia];\n \n[nearByManager getNearBySuggestionsWithOptions:nearByOptions completionHandler:^(MapplsNearbyResult * _Nullable result, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (result.suggestions.count > 0) {\n NSLog(@\"Nearby %@\", result.suggestions[0].placeAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let nearByManager = MapplsNearByManager.shared\n//Or\nlet nearByManager = MapplsNearByManager(restKey: MapplsAccountManager.restAPIKey(), clientId: MapplsAccountManager.atlasClientId(), clientSecret: MapplsAccountManager.atlasClientSecret(), grantType: MapplsAccountManager.atlasGrantType())\n \nvar refLocations: String!\nrefLocations = \"28.543014, 77.242342\"\nlet filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [\"Brand1\", \"Brand2\"])\nlet sortBy = MapplsSortByDistanceWithOrder(orderBy: .ascending)\n\nlet nearByOptions = MapplsNearbyAtlasOptions(query:\"EV Charging\" , location: refLocations, withRegion: .india)\nnearByOptions.filters = [filter]\nnearByOptions.sortBy = sortBy\nnearByOptions.searchBy = .importance\nnearByManager.getNearBySuggestions(nearByOptions) { (result, error) in\n if let error = error {\n print(\"\\(error.localizedDescription)\")\n } else if let result = result, let suggestions = result.suggestions, !suggestions.isEmpty {\n print(\"Near by: \\(suggestions[0].placeAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Code Samples", "code": "let nearByManager = MapplsNearByManager.shared\n//Or\nlet nearByManager = MapplsNearByManager(restKey: MapplsAccountManager.restAPIKey(), clientId: MapplsAccountManager.atlasClientId(), clientSecret: MapplsAccountManager.atlasClientSecret(), grantType: MapplsAccountManager.atlasGrantType())\n let nearByOptions = MapplsNearbyAtlasOptions(query: \"Shoes\", location: \"MMI000\", withRegion: .india)\n\nnearByManager.getNearBySuggestions(nearByOptions) { (result, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let result = result, let suggestions = result.suggestions, !suggestions.isEmpty {\n print(\"Near by: \\(suggestions[0].placeAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsPlaceDetailManager * placeDetailManager = MapplsPlaceDetailManager.shared\n//or\nMapplsPlaceDetailManager * placeDetailManager = [[MapplsPlaceDetailManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsPlaceDetailOptions * placeOptions = [[MapplsPlaceDetailOptions alloc] initWithMapplsPin:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\n\n[placeDetailManager getResultsWithOptions:placeOptions completionHandler:^(MapplsPlaceDetail * _Nullable placeDetail, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if(placeDetail) {\n NSLog(@\"Place DetailL: %@\", placeDetail.address);\n } else {\n NSLog(@\"No results\");\n }\n}];\n\n#### Swift" }, { "language": "Text", "label": "Objective C", "code": "## [Geocoding API](#Geocoding-API)\n\nFor live demo click [LIVE DEMO](https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-atlas-geocoding-rest-api-example)\n\nGet most accurate lat long combination for a given address\n\nAll mapping APIs that are used in mobile or web apps need some geo-position coordinates to refer to any given point on the map. Our Geocoding API converts real addresses into these geographic coordinates (latitude/longitude) to be placed on a map, be it for any street, area, postal code, POI or a house number etc.\n\nClass used for geocode is `MapplsAtlasGeocodeManager`. To create instance of `MapplsAtlasGeocodeManager` initialize using your rest key, clientId, clientSecret , grantType **or** use shared instance of `MapplsAtlasGeocodeManager` after setting key values `MapplsRestKey`, `MapplsAtlasClientId`, `MapplsAtlasClientSecret`, `MapplsAtlasGrantType` in your application’s `Info.plist` file.\n\nTo perform geocode use `getGeocodeResults` method of instance of `MapplsAtlasGeocodeManager` class which accepts an instance of `MapplsAtlasGeocodeOptions` class. To create instance of `MapplsAtlasGeocodeOptions`, pass any address as query parameters to geocode.\n\n### Request Parameters\n\n1. **`query`**: The address of a location (e.g. 237 Okhla Phase-III).\n\nAdditionally you can also set some other parameters in object of `MapplsAtlasGeocodeOptions` to get some specific results. Which are: \n\n2. **`maximumResultCount`**: The number of results which needs to be return in response.\n\n### Response Parameters\n\nIn response of `geocode` search either you will receive an error or an array of `MapplsGeocodedPlacemark`. Yo will find below useful properties in suggestion object :\n\n1. `houseNumber`: The house number of the location.\n2. `houseName`: The name of the location.\n3. `poi`: The name of the POI if the location is a place of interest (POI).\n4. `street`: The name of the street of the location.\n5. `subSubLocality`: The name of the sub-sub-locality where the location exists.\n6. `subLocality`: The name of the sub-locality where the location exists.\n7. `locality`: The name of the locality where the location exists.\n8. `village`: The name of the village if the location exists in a village.\n9. `district`: The name of the district in which the location exists.\n10. `subDistrict`: The name of the sub-district in which the location exists.\n11. `city`: The name of the city in which the location exists.\n12. `state`: The name of the state in which the location exists.\n13. `pincode`: The pin code of the location area.\n14. `latitude`: The latitude of the location.\n15. `longitude`: The longitude of the location.\n16. `formattedAddress`: The complete human readable address string that is usually the complete postal address of the result.\n17. `mapplsPin`: The Mappls Pin assigned for a place in map database. A Mappls Pin is the digital identity for an address or business to identify its unique location. For more information on Mappls Pin, click [here](https://about.mappls.com/app/features/mapplspin/).\n18. `geocodeLevel`: It defines depth level of search for geocode.\n \n### Premium Response Parameters (only for India region)\n1. Census Information: (as per last census)\n - sttCenCd(String): State's census code.\n - dstCenCd(String): District's census code.\n - sdbCenCd(String): Subdistrict's census code.\n - vlgCenCd(String): Village's census code, if address is rural.\n - twnCenCd(String): Town's census code, if address is within any census town.\n\n **Note:** Here town means a census town - an urban agglomeration defined by GoI during census; which is different from a city.\n\n - twnName(String): Town's name as per last census.\n\n1. Local Government Directory (LGD Information)\n - sttLgdCd(String): State's LGD code.\n - dstLgdCd(String): District's LGD code.\n - sdbLgdCd(String): Subdistrict's LGD code.\n - vlgLgdCd(String): Village's LGD code, if address is rural.\n - twnLgdCd(String): Town's LGD code, if address is within any census town.\n\n### Code Samples\n\n#### Objective C" }, { "language": "Text", "label": "Objective C", "code": "For more details visit our [api reference documentation](https://about.mappls.com/api/advanced-maps/doc/geocoding-api#/Geocode%20API/AtlasGeocodeAPI).\n\n\n## [Routing API](#Routing-API)\n\nFor live demo click [LIVE DEMO](https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-route-adv-api-example)\n\nGet optimal & alternate routes between various locations with or without considering live traffic\n\nRouting and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route type(optimal or shortest) and includes delays for traffic congestion.\n\nUse `Directions` to get route between locations. You can use it either by creating object using your rest key **or** use shared instance of `Directions` class by setting rest key in the `MapplsRestKey` key of your application’s `Info.plist` file.\n\n#### Swift" }, { "language": "Text", "label": "Objective C", "code": "#### Objective-C" }, { "language": "Text", "label": "Objective C", "code": "To perform this operation use object of `RouteOptions` class as request to pass source location and destination locations and other parameters.\n\n### Request Parameters\n\nTo use **Route with traffic based ETA** feature, to get duration inclusive of traffic for a distance between locations use parameter resourceIdentifier as described below:\n\n- `resourceIdentifier:` This property is type of enum `MapplsDirectionsResourceIdentifier` with acceptable values `routeAdv`, `routeETA` and `routeTraffic`. The default value of this property is `routeAdv`.\n\nTo choose **Travelling Mode** use parameter profileIdentifier as described below:\n\n- `profileIdentifier:` This property is type of enum `MapplsDirectionsProfileIdentifier` with acceptable values `driving`, `biking`, `walking` and `trucking`. The default value of this property is `driving`.\n\n**Additionally** you can set some more parameters on instance of `RouteOptions` to get filtered/specific results as :\n\n1. `routeType`: It is type of enum `MapplsRouteType` which can accept values `quickest`, `shortest`, `none`. By default its value is `none`.\n2. `region`: It is type of enum `MapplsRegionType`. It is used to validate and get result for different countries. Currently five countries are supported including India which are Sri Lanka, India, Bhutan, Bangladesh, Nepal.\n3. `instructions`: it is of type `boolean` its default value is `false`\n\n**Note**: If you are using **Routing with traffic** `routeType` and `region` values are not considered. Traffic is only available in India and only optimal route calculation is allowed with traffic.\n\n### Steps to get directions\n\n- To get directions create an array of `Waypoint` class, add two objects of `Waypoint` class to this array to get route path. For origin position also set heading of instance of `Waypoint` class.\n- Next create an instance of `RouteOptions` class by passing waypoints created in previous step." }, { "language": "Text", "label": "Objective C", "code": "- Use `Directions` singleton class from `Directions` framework to get available routes.\n- You can plot polylines on map for available routes by using Map framework. \n\n### [Directions Using Mappls Pins](#Directions-Using-MapplsPins)\n\nAn object of Waypoint can be created using coordinate as well as [Mappls Pin](#https://about.mappls.com/app/features/mapplspin/) (unique identifier of place)." } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://auth.mappls.com/console/](https://auth.mappls.com/console/", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-auto-suggest-api-example.php", "https://about.mappls.com/api/advanced-maps/doc/autosuggest-api#/Autosuggest%20API/AutoSuggestAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-reverse-geocoding-rest-api-example", "https://about.mappls.com/api/advanced-maps/doc/reverse-geocoding-api#/Reverse%20Geocode%20API/ReverseGeocodeAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-near-by-api-example", "https://about.mappls.com/api/advanced-maps/doc/nearby-api#/Nearby%20API/AtlasNearbyAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-atlas-geocoding-rest-api-example", "https://about.mappls.com/app/features/mapplspin/).", "https://about.mappls.com/api/advanced-maps/doc/geocoding-api#/Geocode%20API/AtlasGeocodeAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-route-adv-api-example", "https://about.mappls.com/app/features/mapplspin/", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-distance-matrix-api-example" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 103, "endpointCount": 36, "codeSampleCount": 14, "fingerprint": "8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df" } } ``` ## source-reference · [MapplsAPIKit (REST API Kit for iOS)]() - Identity: `source-reference:mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-api-kit-ios-distribution-base - State model: stateless ```json { "slug": "mappls-api-kit-ios-distribution-base", "sourceId": "public-mappls-api-kit-ios-distribution-base", "name": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "summary": "Mappls API Kit Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Objective-C", "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:05:02Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Our APIs, SDKs, and live updating map data available for 200+ countries & territories give developers tools to build better experiences across various platforms.", "1. You can get your authentication information to be used in this document here: https://auth.mappls.com/console/", "2. The sample code is provided to help you understand the basic functionality of Mappls REST APIs working on iOS native development platform." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore. All dependent libraries will be automatically." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Mappls Map SDK for iOS lets you easily add Mappls Map and services to your own iOS app.It supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls Map app for iOS. The SDK handles Map Display along with a bunch of controls and native gestures." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls keys and authenticate before using any Mappls SDK. Please see the reference here." ] }, { "title": "API Usage and Requirements", "level": 2, "paragraphs": [ "The allowed SDK hits are described on the plans page. Note that your usage is shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] }, { "title": "Autosuggest API", "level": 2, "paragraphs": [ "Get \"type as you go\" suggestion while searching for a location.", "The Autosuggest API helps users to complete queries faster by adding intelligent search capabilities to your web or mobile app. This API returns a list of results as well as suggested queries as the user types in the search field.", "For live demo click LIVE DEMO", "The Autosuggest helps users to complete queries faster by adding intelligent search capabilities to your iOS mobile app. It takes a human readable query such as place name, address or Mappls Pin and returns a list of results.", "Class used for Autosuggest search is MapplsAutoSuggestManager. Create a MapplsAutoSuggestManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsAutoSuggestManager class.", "To perform auto suggest use MapplsAutoSearchAtlasOptions class to pass query parameter to get auto suggest search with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, It will take default value which is India." ] }, { "title": "Request Parameters", "level": 3, "paragraphs": [ "1. location: Location is required to get location bias autosuggest results. 2. zoom: takes the zoom level of the current scope of the map (min: 4, max: 18). 3. includeTokenizeAddress: On setting value of this property to true it provides the different address attributes in a structured object in response. 4. pod: It takes place type which helps in restricting the results to certain chosen type Below mentioned are the codes for the pod - - Sublocality - Locality - City - Village - Subdistrict - District - State - Subsublocality 5. filter: This helps you restrict the result either by mentioning a bounded area or to certain Mappls Pin. Below mentioned are both types whose instance can be set to this parameter - - (a) MapplsMapplsPinFilter: to filter results on basis of Mappls Pin. - (b) MapplsBoundsFilter: to filter results on basis of geo bound. It accepts a value of type MapplsRectangular", "8. responseLanguage: It is of type string it is use to get the response in specified language." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "In response of auto suggest search either you will receive an error or an object of MapplsAutoSuggestLocationResults(derived from MapplsLocationResults) which contains an array of MapplsAtlasSuggestion (derived from MapplsSuggestion) and an array of suggested searches of type MapplsSearchPrediction.", "Note: As class of response object will be derived from MapplsLocationResults, You will need to cast it into MapplsAutoSuggestLocationResults.", "You will find below useful properties in suggestion object :", "1. type: type of location POI or Country or City 2. mapplsPin: Mappls Pin of the location 6-char alphanumeric. 3. placeAddress: Address of the location. 4. placeName: Name of the location. 5. orderIndex: the order where this result should be placed 6. addressTokens:", "houseNumber: house number of the location.", "houseName: house name of the location." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "For more details visit our api reference documentation." ] }, { "title": "Reverse Geocoding API", "level": 2, "paragraphs": [ "For live demo click LIVE DEMO", "Gets the nearest address for a given lat long combination.", "Reverse Geocoding is a process to give the closest matching address to a provided geographical coordinates (latitude/longitude). Mappls's reverse geocoding API provides real addresses along with nearest popular landmark for any such geo-positions on the map.", "Class used for geocode is MapplsReverseGeocodeManager. Create a MapplsReverseGeocodeManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsReverseGeocodeManager class.", "To perform the translation use MapplsReverseGeocodeOptions class to pass coordinates as parameters to reverse geocode with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, It will take default value which is India." ] }, { "title": "Request Parameters", "level": 3, "paragraphs": [ "• coordinate: - language", "MapplsRegionType is used to validate and get result for different countries." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "In response of geocode search either you will receive an error or an array of MapplsGeocodedPlacemark. Yo will find below useful properties in suggestion object:", "• houseNumber: The house number of the location. - houseName: The name of the location. - poi: The name of the POI if the location is a place of interest (POI). - poiDist: distance from nearest POI in metres. - street: The name of the street of the location. - streetDist: distance from nearest Street in metres. - subSubLocality: The name of the sub-sub-locality where the location exists. - subLocality: The name of the sub-locality where the location exists. - locality: The name of the locality where the location exists. - village: The name of the village if the location exists in a village. - district: The name of the district in which the location exists. - subDistrict: The name of the sub-district in which the location exists. - city: The name of the city in which the location exists. - state: The name of the state in which the location exists. - pincode: The pin code of the location a", "• formattedAddress: The complete human readable address string that is usually the complete postal address of the result. - areaCode: The area code of region. - area: in-case the co-ordinate lies in a country the name of the country would be returned or if the co-ordinate lies in an ocean, the name of the ocean will be returned." ] }, { "title": "Premium Response Parameters (only for India region)", "level": 3, "paragraphs": [ "1. Census Information: (as per last census) - sttCenCd(String): State's census code. - dstCenCd(String): District's census code. - sdbCenCd(String): Subdistrict's census code. - vlgCenCd(String): Village's census code, if address is rural. - twnCenCd(String): Town's census code, if address is within any census town.", "Note: Here town means a census town - an urban agglomeration defined by GoI during census; which is different from a city.", "• twnName(String): Town's name as per last census.", "1. Local Government Directory (LGD Information) - sttLgdCd(String): State's LGD code. - dstLgdCd(String): District's LGD code. - sdbLgdCd(String): Subdistrict's LGD code. - vlgLgdCd(String): Village's LGD code, if address is rural. - twnLgdCd(String): Town's LGD code, if address is within any census town." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "For more details visit our api reference documentation." ] }, { "title": "Nearby API", "level": 2, "paragraphs": [ "For live demo click LIVE DEMO", "Nearby Places API, enables you to add discovery and search of nearby places by searching for a generic keyword used to describe a category of places or via the unique code assigned to that category.", "Class used for nearby search is MapplsNearByManager. Create a MapplsNearByManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsNearByManager class.", "To perform nearby search use MapplsNearbyAtlasOptions class to pass keywords/categories and a reference location as parameters to get Nearby search results with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, It will take default value which is India.", "MapplsRegionType is used to validate and get result for different countries.", "Additionally you can also set location and zoom in object of MapplsNearbyAtlasOptions location coordinate can be set in comma seprated format i.e (\"latitue\", \"longitue\") or location can be Mappls Pin for eg. (\"MMI000\")" ] }, { "title": "Request Parameters", "level": 3, "paragraphs": [ "1. refLocation A location provides the location around which the search will be performed it can be coordinte (latitude, longitude) or Mappls Pin in String format.", "1. page: provides number of the page to provide results from.", "2. sort: provides configured sorting operations for the client on cloud. Below are the available sorts: - dist:asc & dist:desc - will sort data in order of distance from the passed location (default). - name:asc & name:desc - will sort the data on alphabetically bases.", "3. radius (integer): provides the range of distance to search over (default: 1000, min: 500, max: 10000).", "4. sortBy: It is used to sort results based on value provided. It can accept object of MapplsSortBy or MapplsSortByDistanceWithOrder", "5. searchBy: It is used to search places based on preference provided. It is of enum type MapplsSearchByType its value can be either .importance or .distance" ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "You will find below useful properties in suggestion object :", "• distance: provides the distance from the provided location bias in meters. - mapplsPin: Mappls Pin, unique id of the location 6-char alphanumeric. - email: Email for contact.", "• keywords: provides an array of matched keywords or codes. - landlineNo: Email for contact.", "• mobileNo : Phone number for contact. - orderIndex: the order where this result should be placed - placeAddress: Address of the location. - placeName: Name of the location. - type: Type of location POI or Country or City. - city: Name of city. - state: Name of state - pincode: Pincode of area. - categoryCode: Code of category with that result belongs to. - richInfo: A dictionary object with dynamic information - hourOfOperation: A string value which describes hour of operation. - addressTokens: - houseNumber: house number of the location. - houseName: house name of the location. - poi: name of the POI (if applicable) - street: name of the street. (if applicable) - subSubLocality: the sub-sub-locality to which the location belongs. (if applicable) - subLocality: the sub-locality to which the location belongs. (if applicable) - locality: the locality to which the location belongs. (if app" ] }, { "title": "Code Samples", "level": 3, "paragraphs": [ "For more details visit our api reference documentation." ] }, { "title": "Place Detail", "level": 2, "paragraphs": [ "The Mappls Pin is a simple, standardised and precise PAN India digital address system. Every location has been assigned a unique digital address or an Mappls Pin. The Place Detail can be used to extract the details of a place with the help of its Mappls Pin i.e. a 6 digit code.", "Class used for Mappls Pin search is MapplsPlaceDetailManager. Create a MapplsPlaceDetailManager object using your authenticated Mappls's keys or alternatively, you can use the shared instance of MapplsPlaceDetailManager class.", "To perform Place Detail use MapplsPlaceDetailOptions class to pass digital address code (Mappls Pin) as parameters to get detail result with an option to pass region in parameter withRegion, which is an enum of type MapplsRegionType. If no value is passed for region, it will take default value which is India." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "In response of Mappls Pin search either you will receive an error or an object of MapplsPlaceDetail.", "• mapplsPin: The Mappls Pin assigned for a place in map database. A Mappls Pin is the digital identity for an address or business to identify its unique location. - latitude: The latitude of the location. - longitude: The longitude of the location. - houseNumber: The house number of the location. - houseName: The name of the location. - poi: The name of the POI if the location is a place of interest (POI). - street: The name of the street of the location. - subSubLocality: The name of the sub-sub-locality where the location exists. - subLocality: The name of the sub-locality where the location exists. - locality: The name of the locality where the location exists. - village: The name of the village if the location exists in a village. - district: The name of the district in which the location exists. - subDistrict: The name of the sub-district in which the location exists. - city: The na", "Note: Not all response parameters are available by default. These parameters are available on demand as per mutually agreed use case. For details, please contact Mappls API support." ] }, { "title": "Objective C", "level": 4, "paragraphs": [ "let placeDetailManager = MapplsPlaceDetailManager.shared let placeOptions = MapplsPlaceDetailOptions(mapplsPin: \"mmi000\", withRegion: .india) placeDetailManager.getResults(placeOptions) { (placeDetail, error) in if let error = error { print(error) } else if let placeDetail = placeDetail, let latitude = placeDetail.latitude, let longitude = placeDetail.longitude { print(\"Place Detail : \\(latitude),\\(longitude)\") } else { print(\"No results\") } }", "MapplsAtlasGeocodeManager atlasGeocodeManager = [MapplsAtlasGeocodeManager sharedManager]; // or MapplsAtlasGeocodeManager atlasGeocodeManager = [[MapplsAtlasGeocodeManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];", "MapplsAtlasGeocodeOptions atlasGeocodeOptions = [[MapplsAtlasGeocodeOptions alloc] initWithQuery: @\"237 Mappls\" withRegion:MapplsRegionTypeIndia];", "[atlasGeocodeManager getGeocodeResultsWithOptions:atlasGeocodeOptions completionHandler:^(MapplsAtlasGeocodeAPIResponse Nullable response, NSError Nullable error) { if (error) { NSLog(@\"%@\", error); } else if (response!= nil && response.placemarks.count > 0) { NSLog(@\"Forward Geocode %@%@\", response.placemarks[0].latitude, response.placemarks[0].longitude); } else { NSLog(@\"No results\"); } }];", "let atlasGeocodeManager = MapplsAtlasGeocodeManager.shared // or let atlasGeocodeManager = MapplsAtlasGeocodeManager(restKey: MapplsAccountManager.restAPIKey(), clientId: MapplsAccountManager.atlasClientId(), clientSecret: MapplsAccountManager.atlasClientSecret(), grantType: MapplsAccountManager.atlasGrantType())", "let atlasGeocodeOptions = MapplsAtlasGeocodeOptions(query: \"237 Mappls\", withRegion: .india)" ] } ], "snippets": [ { "language": "Objectivec", "label": "Objective C", "code": "MapplsAutoSuggestManager * autoSuggestManager = [MapplsAutoSuggestManager sharedManager];\n// or\nMapplsAutoSuggestManager *autoSuggestManager = [[MapplsAutoSuggestManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsAutoSearchAtlasOptions * autoSuggestOptions = [[MapplsAutoSearchAtlasOptions alloc] initWithQuery:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\nautoSuggestOptions.location = [[CLLocation alloc] initWithLatitude:28.2323234 longitude:72.3434123];\nautoSuggestOptions.zoom = [[NSNumber alloc] initWithInt:5];\n[autoSuggestManager getAutoSuggestionResultsWithOptions:autoSuggestOptions completionHandler:^(MapplsLocationResults * _Nullable locationResults, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (locationResults) {\n MapplsAutoSuggestLocationResults * results = (MapplsAutoSuggestLocationResults *) locationResults;\n if(results && results.suggestions) {\n for (MapplsAtlasSuggestion * suggestion in results.suggestions) {\n NSLog(@\"Auto Suggest %@%@\", suggestion.latitude, suggestion.longitude);\n }\n }\n if(results && results.suggestedSearches) {\n for (MapplsSearchPrediction * suggestion in results.suggestedSearches) {\n NSLog(@\"Auto Suggest %@\", suggestion.identifier);\n }\n }\n } else {\n NSLog(@\"No Results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let autoSuggestManager = MapplsAutoSuggestManager.shared\n//Or\nlet autoSuggestManager = MapplsAutoSuggestManager(restKey:\nMapplsAccountManager.restAPIKey(), clientId:\nMapplsAccountManager.atlasClientId(), clientSecret:\nMapplsAccountManager.atlasClientSecret(), grantType:\nMapplsAccountManager.atlasGrantType())\n\nlet autoSearchAtlasOptions = MapplsAutoSearchAtlasOptions(query: \"mmi000\",\nwithRegion: .india)\nautoSearchAtlasOptions.location = CLLocation(latitude: 28.2323234, longitude: 72.3434123)\nautoSearchAtlasOptions.zoom = 5\nautoSuggestManager.getAutoSuggestionResults(autoSearchAtlasOptions) { (locationResults, error) in\n if let error = error {\n print(\"error: \\(error.localizedDescription)\")\n } else if let locationResults = locationResults as? MapplsAutoSuggestLocationResults {\n if let suggestions = locationResults.suggestions {\n for suggestion in suggestions {\n print(\"suggestion: \\(suggestion.placeName)\")\n }\n }\n if let suggestions = locationResults.suggestedSearches {\n for suggestion in suggestions {\n print(\"suggestedSearches: \\(suggestion.identifier)\")\n }\n }\n } else {\n print(\"No Results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsReverseGeocodeManager * reverseGeocodeManager = [MapplsReverseGeocodeManager sharedManager];\n//Or\nMapplsReverseGeocodeManager * reverseGeocodeManager = [[MapplsReverseGeocodeManager alloc] initWithClientId:MapplsAccountManager.clientId clientSecret:MapplsAccountManager.clientSecret grantType:nil host:nil scheme:nil];\n \nMapplsReverseGeocodeOptions *revOptions = [[MapplsReverseGeocodeOptions alloc] initWithCoordinate:CLLocationCoordinate2DMake(28.553291, 77.258876) withRegion:MapplsRegionTypeIndia];\n \n[reverseGeocodeManager reverseGeocodeWithOptions:revOptions completionHandler:^(NSArray * _Nullable placemarks, NSString * _Nullable attribution, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (placemarks.count > 0) {\n NSLog(@\"Reverse Geocode %@\",\n placemarks[0].formattedAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let reverseGeocodeManager = MapplsReverseGeocodeManager.shared\n//Or\nlet reverseGeocodeManager = MapplsReverseGeocodeManager(clientId: MapplsAccountManager.clientId(), clientSecret: MapplsAccountManager.clientSecret())\n \nlet revOptions = MapplsReverseGeocodeOptions(coordinate: CLLocationCoordinate2D(latitude: 28.553291, longitude: 77.258876), withRegion: .india)\nreverseGeocodeManager.reverseGeocode(revOptions) { (placemarks, attribution, error) in\n if let error = error {\n print(\"%@\", error)\n } else if let placemarks = placemarks, !placemarks.isEmpty {\n print(\"Reverse Geocode: \\(placemarks[0].formattedAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Request Parameters", "code": "let filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [String,String])" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsNearByManager * nearByManager = [MapplsNearByManager sharedManager];\n//Or\nMapplsNearByManager * nearByManager = [[MapplsNearByManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n \nNSString *refLocation = @\"28.550667, 77.268959\";\n \nMapplsNearbyAtlasOptions *nearByOptions = [[MapplsNearbyAtlasOptions alloc] initWithQuery:@\"EV Charging\" location:refLocation withRegion:MapplsRegionTypeIndia];\n \n[nearByManager getNearBySuggestionsWithOptions:nearByOptions completionHandler:^(MapplsNearbyResult * _Nullable result, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (result.suggestions.count > 0) {\n NSLog(@\"Nearby %@\", result.suggestions[0].placeAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let nearByManager = MapplsNearByManager.shared\n//Or\nlet nearByManager = MapplsNearByManager(restKey: MapplsAccountManager.restAPIKey(), clientId: MapplsAccountManager.atlasClientId(), clientSecret: MapplsAccountManager.atlasClientSecret(), grantType: MapplsAccountManager.atlasGrantType())\n \nvar refLocations: String!\nrefLocations = \"28.543014, 77.242342\"\nlet filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [\"Brand1\", \"Brand2\"])\nlet sortBy = MapplsSortByDistanceWithOrder(orderBy: .ascending)\n\nlet nearByOptions = MapplsNearbyAtlasOptions(query:\"EV Charging\" , location: refLocations, withRegion: .india)\nnearByOptions.filters = [filter]\nnearByOptions.sortBy = sortBy\nnearByOptions.searchBy = .importance\nnearByManager.getNearBySuggestions(nearByOptions) { (result, error) in\n if let error = error {\n print(\"\\(error.localizedDescription)\")\n } else if let result = result, let suggestions = result.suggestions, !suggestions.isEmpty {\n print(\"Near by: \\(suggestions[0].placeAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Code Samples", "code": "let nearByManager = MapplsNearByManager.shared\n//Or\nlet nearByManager = MapplsNearByManager(restKey: MapplsAccountManager.restAPIKey(), clientId: MapplsAccountManager.atlasClientId(), clientSecret: MapplsAccountManager.atlasClientSecret(), grantType: MapplsAccountManager.atlasGrantType())\n let nearByOptions = MapplsNearbyAtlasOptions(query: \"Shoes\", location: \"MMI000\", withRegion: .india)\n\nnearByManager.getNearBySuggestions(nearByOptions) { (result, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let result = result, let suggestions = result.suggestions, !suggestions.isEmpty {\n print(\"Near by: \\(suggestions[0].placeAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsPlaceDetailManager * placeDetailManager = MapplsPlaceDetailManager.shared\n//or\nMapplsPlaceDetailManager * placeDetailManager = [[MapplsPlaceDetailManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsPlaceDetailOptions * placeOptions = [[MapplsPlaceDetailOptions alloc] initWithMapplsPin:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\n\n[placeDetailManager getResultsWithOptions:placeOptions completionHandler:^(MapplsPlaceDetail * _Nullable placeDetail, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if(placeDetail) {\n NSLog(@\"Place DetailL: %@\", placeDetail.address);\n } else {\n NSLog(@\"No results\");\n }\n}];\n\n#### Swift" }, { "language": "Text", "label": "Objective C", "code": "## [Geocoding API](#Geocoding-API)\n\nFor live demo click [LIVE DEMO](https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-atlas-geocoding-rest-api-example)\n\nGet most accurate lat long combination for a given address\n\nAll mapping APIs that are used in mobile or web apps need some geo-position coordinates to refer to any given point on the map. Our Geocoding API converts real addresses into these geographic coordinates (latitude/longitude) to be placed on a map, be it for any street, area, postal code, POI or a house number etc.\n\nClass used for geocode is `MapplsAtlasGeocodeManager`. To create instance of `MapplsAtlasGeocodeManager` initialize using your rest key, clientId, clientSecret , grantType **or** use shared instance of `MapplsAtlasGeocodeManager` after setting key values `MapplsRestKey`, `MapplsAtlasClientId`, `MapplsAtlasClientSecret`, `MapplsAtlasGrantType` in your application’s `Info.plist` file.\n\nTo perform geocode use `getGeocodeResults` method of instance of `MapplsAtlasGeocodeManager` class which accepts an instance of `MapplsAtlasGeocodeOptions` class. To create instance of `MapplsAtlasGeocodeOptions`, pass any address as query parameters to geocode.\n\n### Request Parameters\n\n1. **`query`**: The address of a location (e.g. 237 Okhla Phase-III).\n\nAdditionally you can also set some other parameters in object of `MapplsAtlasGeocodeOptions` to get some specific results. Which are: \n\n2. **`maximumResultCount`**: The number of results which needs to be return in response.\n\n### Response Parameters\n\nIn response of `geocode` search either you will receive an error or an array of `MapplsGeocodedPlacemark`. Yo will find below useful properties in suggestion object :\n\n1. `houseNumber`: The house number of the location.\n2. `houseName`: The name of the location.\n3. `poi`: The name of the POI if the location is a place of interest (POI).\n4. `street`: The name of the street of the location.\n5. `subSubLocality`: The name of the sub-sub-locality where the location exists.\n6. `subLocality`: The name of the sub-locality where the location exists.\n7. `locality`: The name of the locality where the location exists.\n8. `village`: The name of the village if the location exists in a village.\n9. `district`: The name of the district in which the location exists.\n10. `subDistrict`: The name of the sub-district in which the location exists.\n11. `city`: The name of the city in which the location exists.\n12. `state`: The name of the state in which the location exists.\n13. `pincode`: The pin code of the location area.\n14. `latitude`: The latitude of the location.\n15. `longitude`: The longitude of the location.\n16. `formattedAddress`: The complete human readable address string that is usually the complete postal address of the result.\n17. `mapplsPin`: The Mappls Pin assigned for a place in map database. A Mappls Pin is the digital identity for an address or business to identify its unique location. For more information on Mappls Pin, click [here](https://about.mappls.com/app/features/mapplspin/).\n18. `geocodeLevel`: It defines depth level of search for geocode.\n \n### Premium Response Parameters (only for India region)\n1. Census Information: (as per last census)\n - sttCenCd(String): State's census code.\n - dstCenCd(String): District's census code.\n - sdbCenCd(String): Subdistrict's census code.\n - vlgCenCd(String): Village's census code, if address is rural.\n - twnCenCd(String): Town's census code, if address is within any census town.\n\n **Note:** Here town means a census town - an urban agglomeration defined by GoI during census; which is different from a city.\n\n - twnName(String): Town's name as per last census.\n\n1. Local Government Directory (LGD Information)\n - sttLgdCd(String): State's LGD code.\n - dstLgdCd(String): District's LGD code.\n - sdbLgdCd(String): Subdistrict's LGD code.\n - vlgLgdCd(String): Village's LGD code, if address is rural.\n - twnLgdCd(String): Town's LGD code, if address is within any census town.\n\n### Code Samples\n\n#### Objective C" }, { "language": "Text", "label": "Objective C", "code": "For more details visit our [api reference documentation](https://about.mappls.com/api/advanced-maps/doc/geocoding-api#/Geocode%20API/AtlasGeocodeAPI).\n\n\n## [Routing API](#Routing-API)\n\nFor live demo click [LIVE DEMO](https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-route-adv-api-example)\n\nGet optimal & alternate routes between various locations with or without considering live traffic\n\nRouting and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route type(optimal or shortest) and includes delays for traffic congestion.\n\nUse `Directions` to get route between locations. You can use it either by creating object using your rest key **or** use shared instance of `Directions` class by setting rest key in the `MapplsRestKey` key of your application’s `Info.plist` file.\n\n#### Swift" }, { "language": "Text", "label": "Objective C", "code": "#### Objective-C" }, { "language": "Text", "label": "Objective C", "code": "To perform this operation use object of `RouteOptions` class as request to pass source location and destination locations and other parameters.\n\n### Request Parameters\n\nTo use **Route with traffic based ETA** feature, to get duration inclusive of traffic for a distance between locations use parameter resourceIdentifier as described below:\n\n- `resourceIdentifier:` This property is type of enum `MapplsDirectionsResourceIdentifier` with acceptable values `routeAdv`, `routeETA` and `routeTraffic`. The default value of this property is `routeAdv`.\n\nTo choose **Travelling Mode** use parameter profileIdentifier as described below:\n\n- `profileIdentifier:` This property is type of enum `MapplsDirectionsProfileIdentifier` with acceptable values `driving`, `biking`, `walking` and `trucking`. The default value of this property is `driving`.\n\n**Additionally** you can set some more parameters on instance of `RouteOptions` to get filtered/specific results as :\n\n1. `routeType`: It is type of enum `MapplsRouteType` which can accept values `quickest`, `shortest`, `none`. By default its value is `none`.\n2. `region`: It is type of enum `MapplsRegionType`. It is used to validate and get result for different countries. Currently five countries are supported including India which are Sri Lanka, India, Bhutan, Bangladesh, Nepal.\n3. `instructions`: it is of type `boolean` its default value is `false`\n\n**Note**: If you are using **Routing with traffic** `routeType` and `region` values are not considered. Traffic is only available in India and only optimal route calculation is allowed with traffic.\n\n### Steps to get directions\n\n- To get directions create an array of `Waypoint` class, add two objects of `Waypoint` class to this array to get route path. For origin position also set heading of instance of `Waypoint` class.\n- Next create an instance of `RouteOptions` class by passing waypoints created in previous step." }, { "language": "Text", "label": "Objective C", "code": "- Use `Directions` singleton class from `Directions` framework to get available routes.\n- You can plot polylines on map for available routes by using Map framework. \n\n### [Directions Using Mappls Pins](#Directions-Using-MapplsPins)\n\nAn object of Waypoint can be created using coordinate as well as [Mappls Pin](#https://about.mappls.com/app/features/mapplspin/) (unique identifier of place)." } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://auth.mappls.com/console/](https://auth.mappls.com/console/", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-auto-suggest-api-example.php", "https://about.mappls.com/api/advanced-maps/doc/autosuggest-api#/Autosuggest%20API/AutoSuggestAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-reverse-geocoding-rest-api-example", "https://about.mappls.com/api/advanced-maps/doc/reverse-geocoding-api#/Reverse%20Geocode%20API/ReverseGeocodeAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-near-by-api-example", "https://about.mappls.com/api/advanced-maps/doc/nearby-api#/Nearby%20API/AtlasNearbyAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-atlas-geocoding-rest-api-example", "https://about.mappls.com/app/features/mapplspin/).", "https://about.mappls.com/api/advanced-maps/doc/geocoding-api#/Geocode%20API/AtlasGeocodeAPI).", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-route-adv-api-example", "https://about.mappls.com/app/features/mapplspin/", "https://about.mappls.com/api/advanced-maps/doc/sample/mapmyindia-maps-distance-matrix-api-example" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 85, "endpointCount": 35, "codeSampleCount": 14, "fingerprint": "fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927" } } ``` ## source-reference · Mappls App Widgets - Identity: `source-reference:mappls-app-widgets` - Canonical: https://developer.mappls.com/reference/mappls-app-widgets - State model: stateless ```json { "slug": "mappls-app-widgets", "sourceId": "public-mappls-app-widgets", "name": "mappls-app-widgets", "title": "Mappls App Widgets", "summary": "Using Mappls App Widgets, you can embed latest features of Mappls app in a universal, cross-platform mechanism and perform visualization of a place, get immersive 3D metaverse visuals, and display Realviews - panoramic images. You don't need a Mappls API credential to use most of these Mappls App widgets.", "kind": "Deep link", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "search-places", "widgets-deep-links" ], "platforms": [ "Widgets/Deep links" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-app-widgets", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-app-widgets/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-app-widgets/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-17T10:13:18Z", "localCandidates": [], "prerequisites": [], "sections": [ { "title": "mappls-app-widgets", "level": 1, "paragraphs": [ "Using Mappls App Widgets, you can embed latest features of Mappls app in a universal, cross-platform mechanism and perform visualization of a place, get immersive 3D metaverse visuals, and display Realviews - panoramic images. You don't need a Mappls API credential to use most of these Mappls App widgets." ] } ], "snippets": [], "endpointEvidence": [], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 1, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177" } } ``` ## source-reference · MapplsCamera SDK for iOS - Identity: `source-reference:mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-camera-ios-distribution - State model: stateless ```json { "slug": "mappls-camera-ios-distribution", "sourceId": "public-mappls-camera-ios-distribution", "name": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS", "summary": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, offline automotive, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "api-key", "signed-request" ], "languages": [ "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:06:25Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsCamera SDK is a powerful, ready-to-use camera unit for iOS that automatically captures and embeds rich geospatial metadata into photos and videos. It handles complex tasks like reverse geocoding, GPS overlay rendering, and EXIF/XMP metadata management, allowing you to integrate high-quality, geotagged media capture with minimal effort." ] }, { "title": "Features", "level": 2, "paragraphs": [ "• Rich Geotagged Photos: Captures images with configurable GPS/Address/Timestamp overlays - Geotagged Video Recording: Records video with real-time location metadata updates - QR Code Scanning: Built-in QR mode for asset identification or URL scanning - Mappls PIN Integration: Automatically retrieves Mappls PINs (eLocs) for capture locations - Advanced Metadata: Embeds metadata into EXIF, XMP (custom namespace), and IPTC headers - Deeply Customizable: Extensive UI configuration options for overlays, branding, and camera controls - Developer Friendly: Robust delegate-based event handling and error reporting" ] }, { "title": "Dependencies", "level": 2, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using Swift Package Manager.", "Below are list of dependencies which are required to run this SDK: - MapplsAPICore - Authorization and Authentcation - MapplsAPIKit - Core API functionality - MapplsMap - Map display and location services" ] }, { "title": "Swift Package Manager", "level": 3, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Requirements", "level": 2, "paragraphs": [ "• iOS: 13.0 or higher - Xcode: 14.0 or higher - Mappls API Keys: You must have a valid Mappls API key to use the location and mapping features" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls authentication information to use any Mappls SDK. Please refer the documentation here" ] }, { "title": "Required Permissions", "level": 3, "paragraphs": [ "Ensure you add the following keys to your app's Info.plist to request necessary permissions:", "| Key | Description | | NSCameraUsageDescription | Required for taking photos and recording videos | | NSMicrophoneUsageDescription | Required for recording audio in videos | | NSLocationWhenInUseUsageDescription | Required to geotag your media and show your location on the map | | NSPhotoLibraryUsageDescription | Required if saveToDeviceGallery is enabled | | NSPhotoLibraryAddUsageDescription | Required to save captured media to the user's gallery |" ] }, { "title": "Sample Code", "level": 2, "paragraphs": [ "The package includes multiple ways to test and use the SDK:" ] }, { "title": "Option 1: Use Sample Library", "level": 3, "paragraphs": [ "Sample code is available as a library for integration:" ] }, { "title": "Option 2: Configuration Presets", "level": 3, "paragraphs": [ "Pre-built configurations for common use cases:", "| Method | Description | Use Case | | basic() | Default settings | Quick start | | photoOnly() | Photo mode only | Image documentation | | videoOnly() | Video mode only | Video surveys | | highAccuracy() | Requires GPS ≤10m | Precision mapping | | fieldSurvey() | All metadata + grid | Field work | | qrScanner() | QR code mode | Asset tracking | | highQuality() | 4K, max quality | Professional use | | minimalUI() | Hidden controls | Embedded use | | privacyFocused() | Minimal metadata | Privacy apps |" ] }, { "title": "Sample Resources", "level": 3, "paragraphs": [ "| Guide | Time | Best For | | RUNEXECUTABLESAMPLE.md | 5 min | See all features immediately | | QUICKSTARTSAMPLE.md | 5 min | First-time integration | | HOWTORUNSAMPLE.md | 10 min | Complete integration guide | | SAMPLEUSAGE.md | 15 min | Detailed usage examples |" ] }, { "title": "Configuration API Reference", "level": 2, "paragraphs": [ "MapplsCameraViewController provides a wide range of properties to customize the capture experience." ] }, { "title": "General Configuration", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | minimumAccuracyMetres | Float | 50.0 | Minimum GPS accuracy required to allow capture | | blockCaptureOnPoorAccuracy | Bool | false | If true, prevents capture when accuracy is worse than threshold | | saveToDeviceGallery | Bool | true | Automatically save captured media to the iOS Photo Library | | enablePinchToZoom | Bool | true | Enable or disable the pinch-to-zoom gesture | | maxZoomFactor | Float | 8.0 | Maximum zoom level allowed |" ] }, { "title": "Button Visibility", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | isFlashButtonHidden | Bool | false | Hide the flash toggle button | | isLocationPickerButtonHidden | Bool | false | Hide the nearby places / location picker button | | isMuteButtonHidden | Bool | false | Hide the audio mute button in video mode | | isGalleryButtonHidden | Bool | false | Hide the gallery / album shortcut button | | isSwitchCameraButtonHidden | Bool | false | Hide the front/rear camera switch button | | isQRScanModeHidden | Bool | false | Hide the QR scan mode toggle | | isVideoModeEnable | Bool | false | Disable video recording mode | | isPhotoModeEnable | Bool | false | Disable photo capture mode | | allowModeSwitching | Bool | true | Show/hide the mode selector (Photo/Video/QR) |" ] }, { "title": "Overlay Content", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | showAddressOverlay | Bool | true | Display reverse geocoded address on media | | showCoordinatesOverlay | Bool | true | Display Latitude/Longitude on media | | showDateTimeOverlay | Bool | true | Display capture timestamp on media | | showMapThumbnail | Bool | true | Display a map preview of the location | | showElocationOverlay | Bool | true | Display the Mappls PIN (eLoc) on media | | showQRCodeOverlay | Bool | true | Display a QR code containing location info | | showAccuracyIndicator | Bool | true | Show GPS accuracy value on the overlay | | showAltitudeOverlay | Bool | false | Show altitude (elevation) on the overlay | | showCompassBearingOverlay | Bool | false | Show compass heading on the overlay | | showMapplsLogo | Bool | true | Show the Mappls watermark logo | | showGridLines | Bool | false | Display 3x3 grid lines for composition |" ] }, { "title": "UI Styling", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | overlayPosition | Enum | .bottom | Position of the metadata view (.top or .bottom) | | overlayOpacity | Float | 0.8 | Background opacity of the metadata overlay (0.0 to 1.0) | | overlayBackgroundColour | UIColor| .white | Background color of the metadata overlay | | overlayTextColour | UIColor| .black | Color of the text in the metadata overlay | | overlayCornerRadius | Float | 8.0 | Corner radius for the metadata overlay background | | mapThumbnailStyle | Enum | .standard | Style of the map thumbnail (.standard, .satellite, .hybrid) | | brandingLogo | UIImage? | nil | Custom logo image to display on the metadata overlay |" ] }, { "title": "Media Settings", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | cameraFacing | Enum | .rear | Initial camera to use (.front or .rear) | | defaultMediaMode | Enum | .photo | Initial capture mode (.photo, .video, .qr) | | imageOutputFormat | Enum | .jpeg | Format for saved photos (.jpeg or .png) | | imageCompressionQuality| Float | 0.92 | Compression quality for JPEG (0.0 to 1.0) | | videoResolution | Enum | .hd1080p | Quality for video (.hd720p, .hd1080p, .uhd4k) | | timerDelay | Enum | .none | Countdown delay (.none, .threeSeconds, .tenSeconds) | | maxVideoDuration | Int | 0 | Maximum recording time in seconds (0 = unlimited) | | videoOverlayRefreshInterval| Int | 5 | How often (in seconds) to update GPS info during video |" ] }, { "title": "Advanced Settings", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | addressLanguage | String | \"en\" | Language for reverse geocoded addresses (e.g., \"en\", \"hi\") |" ] }, { "title": "MapplsCameraResult", "level": 3, "paragraphs": [ "The result object passed to delegate methods contains comprehensive metadata:", "| Property | Type | Description | | mediaType | Enum | .image or .video | | filePath | String | Local path to the captured file | | latitude | Double | Decimal latitude coordinate | | longitude | Double | Decimal longitude coordinate | | formattedAddress | String | Human-readable reverse geocoded address | | eloc | String | Mappls unique identifier for the location | | timestampFormatted | String | Formatted date and time string | | accuracyMetres | Float | GPS horizontal accuracy at time of capture | | cameraFacing | Enum | .front or .rear | | tamperHash | String | A digital signature to verify media integrity |" ] }, { "title": "Error Handling", "level": 2, "paragraphs": [ "Implement the delegate method to handle potential issues:" ] }, { "title": "Additional Resources", "level": 2, "paragraphs": [ "• API Configuration Guide: APICONFIGURATION.md - Dependencies Information: DEPENDENCIES.md - Integration Guide: INTEGRATIONGUIDE.md - Mappls API Console: https://auth.mappls.com/console/" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2025 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Text", "label": "Swift Package Manager", "code": "https://github.com/mappls-api/mappls-camera-ios-distribution.git" }, { "language": "Swift", "label": "1. Import the SDK", "code": "import MapplsCamera" }, { "language": "Swift", "label": "2. Initialize and Present", "code": "let cameraVC = MapplsCameraViewController()\ncameraVC.cameraDelegate = self\ncameraVC.modalPresentationStyle = .fullScreen\nself.present(cameraVC, animated: true)" }, { "language": "Swift", "label": "3. Implement the Delegate", "code": "extension YourViewController: MapplsCameraDelegate {\n func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {\n print(\"Captured image at: \\(result.filePath)\")\n print(\"Location: \\(result.latitude), \\(result.longitude)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {\n print(\"Recorded video at: \\(result.filePath)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {\n // Handle real-time location updates\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {\n // Handle nearby places/PINs\n }\n\n\n}" }, { "language": "Swift", "label": "Option 1: Use Sample Library", "code": "import MapplsCamera\nimport MapplsCameraSample\n\n// Use the sample view controller\nlet sampleVC = SampleCameraViewController()\npresent(sampleVC, animated: true)\n\n// Or use configuration presets\nlet cameraVC = CameraConfigurations.photoOnly()\ncameraVC.cameraDelegate = self\npresent(cameraVC, animated: true)" }, { "language": "Swift", "label": "Error Handling", "code": "func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n switch error {\n case .cameraPermissionDenied:\n // Handle no camera access\n case .locationPermissionDenied:\n // Handle no location access\n case .poorAccuracy:\n // GPS accuracy was below minimumAccuracyMetres threshold\n default:\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mappls-ios-sdk", "https://github.com/mappls-api/mappls-map-ios", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-camera-ios-distribution.git", "https://github.com/mappls-api/mappls-ios-sdk/blob/main/docs/v2.0.1/MapplsAPICore.md", "https://auth.mappls.com/console/](https://auth.mappls.com/console/", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 33, "endpointCount": 23, "codeSampleCount": 6, "fingerprint": "5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50" } } ``` ## source-reference · Mappls Camera SDK - Identity: `source-reference:mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/reference/mappls-camera-sdk-android - State model: stateless ```json { "slug": "mappls-camera-sdk-android", "sourceId": "public-mappls-camera-sdk-android", "name": "mappls-camera-sdk-android", "title": "Mappls Camera SDK", "summary": "A Mappls sdk for maps, search places, tracking telematics, workforce, widgets deep links, offline automotive, capture feedback across Android.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "platforms": [ "Android" ], "authSignals": [ "api-key" ], "languages": [ "Kotlin", "Groovy" ], "repositoryUrl": "https://github.com/mappls-api/mappls-camera-sdk-android", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-camera-sdk-android/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-camera-sdk-android/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-08T05:20:16Z", "localCandidates": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Table of Contents", "level": 1, "paragraphs": [ "1. Introduction 2. Primary Objectives & Overview 3. Key Use Cases 4. Android SDK Integration 5. Product Overview 6. Overlay Components 7. SDK Configuration Attributes 8. Nearby Mappls PIN Selection 9. Output & Data Return Mechanism" ] }, { "title": "1. Introduction & Background", "level": 2, "paragraphs": [ "The Mappls Camera SDK is a camera-based plugin designed for seamless integration into mobile application. It augments standard device camera functionality with rich, accurate geo-information derived from Mappls's location intelligence stack — including reverse geocoding, Mappls PINs (eLoc), and map-based visual context.", "Despite providing its own default UI, the SDK is designed to be highly customizable so that consuming applications can tailor both the visual presentation and the data returned. It supports both static image capture and video recording.", "Data is surfaced to the consuming application through two complementary mechanisms:" ] }, { "title": "2. Primary Objectives", "level": 2, "paragraphs": [ "The primary objective of the Mappls Camera SDK is to embed accurate, trustworthy geo-information within images and videos at the point of capture — making that media a verifiable record of both what was captured and where (and when) it was captured.", "This serves two high-level needs:", "1. Geo-tagged Media as Evidence: Enable organisations to validate that field personnel, field visits, or events actually occurred at the claimed location, thereby combating fraud and errors in downstream services. 2. Location Intelligence Enrichment: Augment any use case involving photo/video capture with precise, human-readable, and machine-readable location data from the Mappls platform." ] }, { "title": "3.1 Field Visit Validation", "level": 3, "paragraphs": [ "Organisations deploying field agents (e.g., financial institutions, insurance companies, logistics providers, government services) can embed geo-information in photos captured at the point of visit. This creates an auditable, tamper-evident record validating that the field agent was physically present at the correct location.", "Example: A bank agent photographs a customer's premises. The captured image contains the precise coordinates, reverse-geocoded address, Mappls PIN, and timestamp. The bank's backend system can automatically verify this against the expected address on record." ] }, { "title": "3.2 Digital KYC & Self-Verification", "level": 3, "paragraphs": [ "During self-service Digital KYC flows, users capture photos or videos of themselves or their documents. Embedding live geo-information ensures the self-KYC was completed from the expected location, reducing fraud risk." ] }, { "title": "3.3 Face-Recognition Login with Location Intelligence", "level": 3, "paragraphs": [ "Consuming apps implementing face-recognition-based login can use the SDK to simultaneously capture location data alongside the biometric. This merges biometric security with location intelligence — the app knows not only who logged in but where they logged in from." ] }, { "title": "3.4 Asset & Infrastructure Surveys", "level": 3, "paragraphs": [ "Field teams conducting surveys of assets, infrastructure, or real estate can capture geo-tagged photos and videos as a reliable ground-truth record that is easily indexed and audited." ] }, { "title": "3.5 Delivery & Logistics Proof-of-Delivery", "level": 3, "paragraphs": [ "Delivery agents can capture geo-tagged photos at the point of delivery, providing end-to-end traceability that links the delivery record to the physical location." ] }, { "title": "3.6 Insurance Claims Documentation", "level": 3, "paragraphs": [ "Claims investigators can capture geo-tagged photos of damage sites, providing insurers with credible, location-verified documentation." ] }, { "title": "Add the dependency", "level": 3, "paragraphs": [ "• Add below dependency in your app-level build.gradle" ] }, { "title": "Kotlin", "level": 4, "paragraphs": [ "kotlin val option = MapplsCameraOption.Builder() .setCameraFacing(CameraFacing.REAR) .setFlashMode(FlashMode.AUTO) .setDefaultMediaMode(MediaMode.PHOTO) .build() mBinding.camera.initialize(option.build())" ] }, { "title": "5.1 Media Output Types", "level": 3, "paragraphs": [ "| Output Type | Description | | Static Image | Single captured photo with geo-information overlay and embedded metadata | | Video | Recorded video with real-time geo-information overlay rendered onto frames and metadata embedded in the video container |" ] }, { "title": "5.2 Default UI", "level": 3, "paragraphs": [ "The SDK ships with a ready-to-use default camera UI that includes:", "• Live camera viewfinder - Photo / Video mode toggle - Capture button - Camera switch button (front / rear) - Flash toggle (rear camera only) - Real-time geo-information overlay on the viewfinder - Nearby Mappls PIN selector panel (swipe-up sheet) - Branding logo area (top-right, configurable by consuming app)", "All UI elements are customisable by the consuming application via configuration parameters and theming APIs." ] }, { "title": "6.1.1 Map Thumbnail", "level": 4, "paragraphs": [ "• A small static map image (approximately 80×80dp) showing the current location pinned on the map. - The map style should match Mappls's standard map style with a green marker pin at the current location. - The Mappls logo is rendered in the bottom-left corner of the thumbnail. - The thumbnail is positioned in the bottom-left of the overlay panel." ] }, { "title": "6.1.2 Mappls PIN (eLoc) URL", "level": 4, "paragraphs": [ "• Displayed as a formatted URL: mappls.com/{eloc} - Example: mappls.com/mmi000 - The eLoc portion is rendered in the Mappls brand colour (teal/green) to visually distinguish it. - Rendered in the overlay panel header row." ] }, { "title": "6.1.3 Reverse-Geocoded Address", "level": 4, "paragraphs": [ "• Human-readable address derived from real-time reverse geocoding of the current coordinates via the Mappls Reverse Geocoding API. - Displayed in 2–3 lines to maintain readability. - Should include: building/place name (if available), street/area, city, state, PIN code. - Example: 237, Okhla Industrial Estate Phase 3, Near Modi Mill, New Delhi, Delhi, 110020" ] }, { "title": "6.1.4 Coordinates", "level": 4, "paragraphs": [ "• Displayed as decimal degrees: {latitude},{longitude} - Example: 28.550697, 77.268890 - Precision: 6 decimal places." ] }, { "title": "6.1.5 Date & Time", "level": 4, "paragraphs": [ "• Format: DD-MM-YYYY, HH:MM:SS (24-hour clock). - The timestamp is captured at the moment of image shutter release or continually updated from the start of video recording, and is NOT frozen (updated continuously mid-video). - Example: 08-04-2026, 17:25:11" ] }, { "title": "6.1.6 QR Code", "level": 4, "paragraphs": [ "• A small QR code (approximately 64×64dp) positioned in the bottom-right of the overlay panel. - The QR code can be configured to encode either: - The Mappls PIN URL: https://mappls.com/{eloc} (default) - The coordinate-based Mappls portal URL: https://mappls.com/@{latitude},{longitude} - Example: https://mappls.com/@28.5503,77.2502 - Scanning the QR code should take the user directly to the location on Mappls." ] }, { "title": "6.1.7 Branding Logo (Consuming App)", "level": 4, "paragraphs": [ "• A configurable logo supplied by the consuming application. - Positioned in the top-right corner of the image/video frame (outside the geo-information overlay panel). - Recommended maximum size: 100×40dp. - Supports PNG with transparency." ] }, { "title": "6.1.8 Accuracy Indicator (Recommended Addition)", "level": 4, "paragraphs": [ "• Display the GPS accuracy radius in metres (e.g., ± 4 m) alongside the coordinates. - Helps reviewers assess location confidence. A colour-coded indicator (green: ≤ 10 m, amber: 10–50 m, red: > 50 m) can be rendered as a small icon." ] }, { "title": "6.1.9 Network/Data Source Indicator (Recommended Addition)", "level": 4, "paragraphs": [ "• A small icon indicating the location source: GPS, Network, or Fused. - Adds transparency about how the location was determined." ] }, { "title": "6.1.10 Altitude (Recommended Addition)", "level": 4, "paragraphs": [ "• Display altitude in metres above sea level where available. - Particularly valuable for multi-storey building verification and infrastructure surveys. - Example: Alt: 212 m" ] }, { "title": "6.1.11 Device Heading / Compass Bearing (Recommended Addition)", "level": 4, "paragraphs": [ "• Display compass bearing (0°–360°) at the time of capture. - Useful for directional documentation (e.g., photograph was taken facing north-east)." ] } ], "snippets": [ { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "implementation(\"com.mappls.sdk:mappls-camera:1.0.0\")" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "implementation 'com.mappls.sdk:mappls-camera:1.0.0'" }, { "language": "Kotlin", "label": "Android — Interface: MapplsCameraCallback", "code": "interface MapplsCameraCallback {\n fun onCaptureCancelled(){}\n fun onImageCaptured(result: MapplsCameraResult)\n fun onVideoCaptured(result: MapplsCameraResult)\n fun onError(errorCode: Int, errorMessage: String)\n\n fun onCancel()\n fun onLocationUpdated(latitude: Double, longitude: Double, accuracyMetres: Float)\n fun permissionResultCallback(cameraGranted: Boolean, audioGranted:Boolean,locationGranted: Boolean){}\n fun onNearbyPINsLoaded(pins: List){}\n fun onCameraZoomChanged(newValue: Float){}\n}" }, { "language": "Kotlin", "label": "Android (MapplsCamera object)", "code": "MapplsCamera.getLastCapturedResult(): MapplsCameraResult?\nMapplsCamera.getLastLocation(): Location?\nMapplsCamera.getLastEloc(): String?\nMapplsCamera.getLastFormattedAddress(): String?" } ], "endpointEvidence": [ "https://mappls.com/%7Beloc%7D", "https://mappls.com/@%7Blatitude%7D,%7Blongitude%7D", "https://mappls.com/@28.5503,77.2502", "https://mappls.com/mmi000", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 48, "endpointCount": 19, "codeSampleCount": 4, "fingerprint": "7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306" } } ``` ## source-reference · MapplsCamera SDK for iOS - Identity: `source-reference:mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/reference/mappls-camera-sdk-ios - State model: stateless ```json { "slug": "mappls-camera-sdk-ios", "sourceId": "public-mappls-camera-sdk-ios", "name": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS", "summary": "A Mappls sdk for maps, search places, tracking telematics, offline automotive, capture feedback, identity platform across iOS.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "api-key", "signed-request" ], "languages": [ "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T09:07:18Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsCamera SDK is a powerful, ready-to-use camera unit for iOS that automatically captures and embeds rich geospatial metadata into photos and videos. It handles complex tasks like reverse geocoding, GPS overlay rendering, and EXIF/XMP metadata management, allowing you to integrate high-quality, geotagged media capture with minimal effort." ] }, { "title": "Features", "level": 2, "paragraphs": [ "• Rich Geotagged Photos: Captures images with configurable GPS/Address/Timestamp overlays - Geotagged Video Recording: Records video with real-time location metadata updates - QR Code Scanning: Built-in QR mode for asset identification or URL scanning - Mappls PIN Integration: Automatically retrieves Mappls PINs (eLocs) for capture locations - Advanced Metadata: Embeds metadata into EXIF, XMP (custom namespace), and IPTC headers - Deeply Customizable: Extensive UI configuration options for overlays, branding, and camera controls - Developer Friendly: Robust delegate-based event handling and error reporting" ] }, { "title": "Dependencies", "level": 2, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using Swift Package Manager.", "Below are list of dependencies which are required to run this SDK: - MapplsAPICore - Authorization and Authentcation - MapplsAPIKit - Core API functionality - MapplsMap - Map display and location services" ] }, { "title": "Swift Package Manager", "level": 3, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Requirements", "level": 2, "paragraphs": [ "• iOS: 13.0 or higher - Xcode: 14.0 or higher - Mappls API Keys: You must have a valid Mappls API key to use the location and mapping features" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls authentication information to use any Mappls SDK. Please refer the documentation here" ] }, { "title": "Required Permissions", "level": 3, "paragraphs": [ "Ensure you add the following keys to your app's Info.plist to request necessary permissions:", "| Key | Description | | NSCameraUsageDescription | Required for taking photos and recording videos | | NSMicrophoneUsageDescription | Required for recording audio in videos | | NSLocationWhenInUseUsageDescription | Required to geotag your media and show your location on the map | | NSPhotoLibraryUsageDescription | Required if saveToDeviceGallery is enabled | | NSPhotoLibraryAddUsageDescription | Required to save captured media to the user's gallery |" ] }, { "title": "Sample Code", "level": 2, "paragraphs": [ "The package includes multiple ways to test and use the SDK:" ] }, { "title": "Option 1: Use Sample Library", "level": 3, "paragraphs": [ "Sample code is available as a library for integration:" ] }, { "title": "Option 2: Configuration Presets", "level": 3, "paragraphs": [ "Pre-built configurations for common use cases:", "| Method | Description | Use Case | | basic() | Default settings | Quick start | | photoOnly() | Photo mode only | Image documentation | | videoOnly() | Video mode only | Video surveys | | highAccuracy() | Requires GPS ≤10m | Precision mapping | | fieldSurvey() | All metadata + grid | Field work | | qrScanner() | QR code mode | Asset tracking | | highQuality() | 4K, max quality | Professional use | | minimalUI() | Hidden controls | Embedded use | | privacyFocused() | Minimal metadata | Privacy apps |" ] }, { "title": "Sample Resources", "level": 3, "paragraphs": [ "| Guide | Time | Best For | | RUNEXECUTABLESAMPLE.md | 5 min | See all features immediately | | QUICKSTARTSAMPLE.md | 5 min | First-time integration | | HOWTORUNSAMPLE.md | 10 min | Complete integration guide | | SAMPLEUSAGE.md | 15 min | Detailed usage examples |" ] }, { "title": "Configuration API Reference", "level": 2, "paragraphs": [ "MapplsCameraViewController provides a wide range of properties to customize the capture experience." ] }, { "title": "General Configuration", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | minimumAccuracyMetres | Float | 50.0 | Minimum GPS accuracy required to allow capture | | blockCaptureOnPoorAccuracy | Bool | false | If true, prevents capture when accuracy is worse than threshold | | saveToDeviceGallery | Bool | true | Automatically save captured media to the iOS Photo Library | | enablePinchToZoom | Bool | true | Enable or disable the pinch-to-zoom gesture | | maxZoomFactor | Float | 8.0 | Maximum zoom level allowed |" ] }, { "title": "Button Visibility", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | isFlashButtonHidden | Bool | false | Hide the flash toggle button | | isLocationPickerButtonHidden | Bool | false | Hide the nearby places / location picker button | | isMuteButtonHidden | Bool | false | Hide the audio mute button in video mode | | isGalleryButtonHidden | Bool | false | Hide the gallery / album shortcut button | | isSwitchCameraButtonHidden | Bool | false | Hide the front/rear camera switch button | | isQRScanModeHidden | Bool | false | Hide the QR scan mode toggle | | isVideoModeEnable | Bool | false | Disable video recording mode | | isPhotoModeEnable | Bool | false | Disable photo capture mode | | allowModeSwitching | Bool | true | Show/hide the mode selector (Photo/Video/QR) |" ] }, { "title": "Overlay Content", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | showAddressOverlay | Bool | true | Display reverse geocoded address on media | | showCoordinatesOverlay | Bool | true | Display Latitude/Longitude on media | | showDateTimeOverlay | Bool | true | Display capture timestamp on media | | showMapThumbnail | Bool | true | Display a map preview of the location | | showElocationOverlay | Bool | true | Display the Mappls PIN (eLoc) on media | | showQRCodeOverlay | Bool | true | Display a QR code containing location info | | showAccuracyIndicator | Bool | true | Show GPS accuracy value on the overlay | | showAltitudeOverlay | Bool | false | Show altitude (elevation) on the overlay | | showCompassBearingOverlay | Bool | false | Show compass heading on the overlay | | showMapplsLogo | Bool | true | Show the Mappls watermark logo | | showGridLines | Bool | false | Display 3x3 grid lines for composition |" ] }, { "title": "UI Styling", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | overlayPosition | Enum | .bottom | Position of the metadata view (.top or .bottom) | | overlayOpacity | Float | 0.8 | Background opacity of the metadata overlay (0.0 to 1.0) | | overlayBackgroundColour | UIColor| .white | Background color of the metadata overlay | | overlayTextColour | UIColor| .black | Color of the text in the metadata overlay | | overlayCornerRadius | Float | 8.0 | Corner radius for the metadata overlay background | | mapThumbnailStyle | Enum | .standard | Style of the map thumbnail (.standard, .satellite, .hybrid) | | brandingLogo | UIImage? | nil | Custom logo image to display on the metadata overlay |" ] }, { "title": "Media Settings", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | cameraFacing | Enum | .rear | Initial camera to use (.front or .rear) | | defaultMediaMode | Enum | .photo | Initial capture mode (.photo, .video, .qr) | | imageOutputFormat | Enum | .jpeg | Format for saved photos (.jpeg or .png) | | imageCompressionQuality| Float | 0.92 | Compression quality for JPEG (0.0 to 1.0) | | videoResolution | Enum | .hd1080p | Quality for video (.hd720p, .hd1080p, .uhd4k) | | timerDelay | Enum | .none | Countdown delay (.none, .threeSeconds, .tenSeconds) | | maxVideoDuration | Int | 0 | Maximum recording time in seconds (0 = unlimited) | | videoOverlayRefreshInterval| Int | 5 | How often (in seconds) to update GPS info during video |" ] }, { "title": "Advanced Settings", "level": 3, "paragraphs": [ "| Property | Type | Default | Description | | addressLanguage | String | \"en\" | Language for reverse geocoded addresses (e.g., \"en\", \"hi\") |" ] }, { "title": "MapplsCameraResult", "level": 3, "paragraphs": [ "The result object passed to delegate methods contains comprehensive metadata:", "| Property | Type | Description | | mediaType | Enum | .image or .video | | filePath | String | Local path to the captured file | | latitude | Double | Decimal latitude coordinate | | longitude | Double | Decimal longitude coordinate | | formattedAddress | String | Human-readable reverse geocoded address | | eloc | String | Mappls unique identifier for the location | | timestampFormatted | String | Formatted date and time string | | accuracyMetres | Float | GPS horizontal accuracy at time of capture | | cameraFacing | Enum | .front or .rear | | tamperHash | String | A digital signature to verify media integrity |" ] }, { "title": "Error Handling", "level": 2, "paragraphs": [ "Implement the delegate method to handle potential issues:" ] }, { "title": "Additional Resources", "level": 2, "paragraphs": [ "• API Configuration Guide: APICONFIGURATION.md - Dependencies Information: DEPENDENCIES.md - Integration Guide: INTEGRATIONGUIDE.md - Mappls API Console: https://auth.mappls.com/console/" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2025 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Text", "label": "Swift Package Manager", "code": "https://github.com/mappls-api/mappls-camera-ios-distribution.git" }, { "language": "Swift", "label": "1. Import the SDK", "code": "import MapplsCamera" }, { "language": "Swift", "label": "2. Initialize and Present", "code": "let cameraVC = MapplsCameraViewController()\ncameraVC.cameraDelegate = self\ncameraVC.modalPresentationStyle = .fullScreen\nself.present(cameraVC, animated: true)" }, { "language": "Swift", "label": "3. Implement the Delegate", "code": "extension YourViewController: MapplsCameraDelegate {\n func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {\n print(\"Captured image at: \\(result.filePath)\")\n print(\"Location: \\(result.latitude), \\(result.longitude)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {\n print(\"Recorded video at: \\(result.filePath)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {\n // Handle real-time location updates\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {\n // Handle nearby places/PINs\n }\n\n\n}" }, { "language": "Swift", "label": "Option 1: Use Sample Library", "code": "import MapplsCamera\nimport MapplsCameraSample\n\n// Use the sample view controller\nlet sampleVC = SampleCameraViewController()\npresent(sampleVC, animated: true)\n\n// Or use configuration presets\nlet cameraVC = CameraConfigurations.photoOnly()\ncameraVC.cameraDelegate = self\npresent(cameraVC, animated: true)" }, { "language": "Swift", "label": "Error Handling", "code": "func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n switch error {\n case .cameraPermissionDenied:\n // Handle no camera access\n case .locationPermissionDenied:\n // Handle no location access\n case .poorAccuracy:\n // GPS accuracy was below minimumAccuracyMetres threshold\n default:\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mappls-ios-sdk", "https://github.com/mappls-api/mappls-map-ios", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-camera-ios-distribution.git", "https://github.com/mappls-api/mappls-ios-sdk/blob/main/docs/v2.0.1/MapplsAPICore.md", "https://auth.mappls.com/console/](https://auth.mappls.com/console/", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 33, "endpointCount": 23, "codeSampleCount": 6, "fingerprint": "be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302" } } ``` ## source-reference · MapplsDirectionUI for iOS - Identity: `source-reference:mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-direction-ui-ios-distribution - State model: hybrid ```json { "slug": "mappls-direction-ui-ios-distribution", "sourceId": "public-mappls-direction-ui-ios-distribution", "name": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS", "summary": "Mappls Direction UI Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "direction-ui" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Objective-C", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-09T10:37:21Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsDirectionUI SDK provides the UI components to quickly integrate Route API from MapplsAPIKit framework in iOS application. It offers the following basic functionalities:", "1. Takes support of Mappls's Place search for searching locations of origin, destinations and via points. 2. It allows to use origin and destinations in Mappls's digital address (semicolon separated) Mappls Pin or WGS 84 geographical coordinates both. 3. The ability to set the vehicle profile like driving, and biking. 4. Easily set the resource for traffic and ETA information.", "For details, please contact apisupport@mappls.com." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps - MapplsUIWidgets" ] }, { "title": "Usage", "level": 2, "paragraphs": [ "The MapplsDirectionUI makes it easy to integrate Route from MapplsAPIKit SDK to your iOS application. It gives you all the tools you need to add Directions related UI components to your application." ] }, { "title": "MapplsDirectionsViewController", "level": 3, "paragraphs": [ "MapplsDirectionsViewController is type of UIViewController which you can use to show screen for getting input from user to choose origin and destination and show routes after that.", "As from above code you can see it requires an array of object type MapplsDirectionLocation. It can be an blank array to launch screen without any chosen locations.", "Also you can pass fixed locations and launch instnace of MapplsDirectionViewController, as shown in below code:" ] }, { "title": "Configuration", "level": 4, "paragraphs": [ "Here are the properties use to configure MapplsDirectionViewController route.", "##### Profile Identifier It is instance of enum DirectionsProfileIdentifier which can accepts values driving, walking, biking, trucking. By default its value is driving.", "##### Resource Identifier It is instance of enum DirectionsResourceIdentifier which can accepts values routeAdv, routeETA. By default its value is routeAdv.", "Note: To use RouteETA ‘resourceIdentifier’ should be routeETA and ‘profileIdentifier’ should be driving. In response of RouteETA a unique identifier to that request will be received which can be get using parameter routeIdentifier of object Route.", "##### AttributeOptions AttributeOptions for the route. Any combination of AttributeOptions can be specified. By default, no attribute options are specified.", "##### IncludesAlternativeRoutes A Boolean value indicating whether alternative routes should be included in the response. The default value of this property is true." ] }, { "title": "showDottedPolylineForWalkingProfile", "level": 4, "paragraphs": [ "showDottedPolylineForWalkingProfile is boolean a propery to show dotted or plain polyline for walking profile. Its default value is true.", "MapplsDirectionViewController is created using several UI components whose appearance can be changed according to user requirements. Some of them are listed as below:", "• MapplsDirectionTopBannerView - MapplsDirectionBottomBannerView" ] }, { "title": "MapplsDirectionViewControllerDelegates", "level": 3, "paragraphs": [ "It is a protocol class which will be used for callback methods as shown below:" ] }, { "title": "MapplsDirectionTopBannerView", "level": 3, "paragraphs": [ "MapplsDirectionTopBannerView is type of UIView which show the source, destination and viapoint locations at the top of MapplsDirectionViewController", "This class accepts array of MapplsDirectionLocation from which it set value of source, destination and viapoint." ] }, { "title": "MapplsDirectionBottomBannerView", "level": 3, "paragraphs": [ "MapplsDirectionBottomBannerView is class of type UIView, it used for showing the route information i.e ArivalTime, DistanceRemening, TimeRemening.", "To use this class it takes we need to call a function updateBottomBanner which accepts three parameters i.e route, selectedRoute, locationModel.", "• route: It is an array of the Routes which is required to update bottom banner view. - selectedRoute: If you have multiple routes then it will give the selected route in Integer - locationModel: LocationModel is an array of the type MapplsDirectionLocation which is required to manage bottom banner view." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "let directionVC = MapplsDirectionViewController(for: [MapplsDirectionLocation]())\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "var locationModels = [MapplsDirectionLocation]()\nlet source = MapplsDirectionLocation(location: \"77.2639,28.5354\", displayName: \"Govindpuri\", displayAddress: \"\", locationType: .suggestion)\n \nlet viaPoint = MapplsDirectionLocation(location: \"12269L\", displayName: \"Sitamarhi\", displayAddress: \"\", locationType: .suggestion)\n \nlet destination = MapplsDirectionLocation(location: \"1T182A\", displayName: \"Majorganj\", displayAddress: \"\", locationType: .suggestion)\n \nself.locationModels.append(source)\nself.locationModels.append(viaPoint)\nself.locationModels.append(destination)\nlet directionVC = MapplsDirectionViewController(for: self.locationModels)\ndirectionVC.profileIdentifier = .driving\ndirectionVC.attributationOptions = [.congestionLevel]\ndirectionVC.resourceIdentifier = .routeETA\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "MapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]init];\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];\n\nOR\n\nMapplsDirectionLocation* source = [[MapplsDirectionLocation alloc] initWithLocation:@\"78.00,28.00\" displayName:@\"haridwar\" displayAddress:@\"\" locationType:0];\nMapplsDirectionLocation* destination = [[MapplsDirectionLocation alloc] initWithLocation:@\"1T182A\" displayName:@\"Majorganj\" displayAddress:@\"\" locationType:1];\n\nNSArray* locations = [[NSArray alloc] initWithObjects:current,destination, nil];\n\nMapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]initFor:locations style:nil];\n\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowDrivingModeSelector = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowRouteReportSummary = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowTollCostEstimation = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.isShowCongestionDelayOnRoute = false" }, { "language": "Swift", "label": "Configuration", "code": "let directionVC = MapplsDirectionViewController()\ndirectionVC.shouldAllowToAddViapoint = true" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// This meathod will be called when back button is clicked in `TopBannerView`\n1. didRequestForGoBack(for view: MapplsDirectionTopBannerView, controller: UIViewController)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// The meathod will be called when add viapoint button will clicked in `TopBannerView`.\n2. didRequestForAddViapoint(_ sender: UIButton,for isEditMode: Bool)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// The meathod will be called when Directions button will clicked in `BottomBannerView`.\n3. didRequestDirections()" }, { "language": "Swift", "label": "Call Back Handler", "code": "//The meathod will be called when start button will clicked in `BottomBannerView`.\n4. didRequestForStartNavigation(for routes: [Route], viewController: UIViewController, locations: [MapplsDirectionLocation], selectedRouteIndex: Int, error: NSError)" }, { "language": "Swift", "label": "Call Back Handler", "code": "// The meathod will be called when user click on auto search result\n5. didDirectionsAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType)" }, { "language": "Swift", "label": "Call Back Handler", "code": "// The meathod will be called when user click on auto search favourite places\n6. didDirectionsAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 19, "codeSampleCount": 14, "fingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878" } } ``` ## source-reference · MapplsDirectionUI for iOS - Identity: `source-reference:mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-direction-ui-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-direction-ui-ios-distribution-base", "sourceId": "public-mappls-direction-ui-ios-distribution-base", "name": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS", "summary": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "direction-ui" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Objective-C", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-14T10:28:33Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsDirectionUI SDK provides the UI components to quickly integrate Route API from MapplsAPIKit framework in iOS application. It offers the following basic functionalities:", "1. Takes support of Mappls's Place search for searching locations of origin, destinations and via points. 2. It allows to use origin and destinations in Mappls's digital address (semicolon separated) Mappls Pin or WGS 84 geographical coordinates both. 3. The ability to set the vehicle profile like driving, and biking. 4. Easily set the resource for traffic and ETA information.", "For details, please contact apisupport@mappls.com." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps - MapplsUIWidgets" ] }, { "title": "Usage", "level": 2, "paragraphs": [ "The MapplsDirectionUI makes it easy to integrate Route from MapplsAPIKit SDK to your iOS application. It gives you all the tools you need to add Directions related UI components to your application." ] }, { "title": "MapplsDirectionsViewController", "level": 3, "paragraphs": [ "MapplsDirectionsViewController is type of UIViewController which you can use to show screen for getting input from user to choose origin and destination and show routes after that.", "As from above code you can see it requires an array of object type MapplsDirectionLocation. It can be an blank array to launch screen without any chosen locations.", "Also you can pass fixed locations and launch instnace of MapplsDirectionViewController, as shown in below code:" ] }, { "title": "Configuration", "level": 4, "paragraphs": [ "Here are the properties use to configure MapplsDirectionViewController route.", "##### Profile Identifier It is instance of enum DirectionsProfileIdentifier which can accepts values driving, walking, biking, trucking. By default its value is driving.", "##### Resource Identifier It is instance of enum DirectionsResourceIdentifier which can accepts values routeAdv, routeETA. By default its value is routeAdv.", "Note: To use RouteETA ‘resourceIdentifier’ should be routeETA and ‘profileIdentifier’ should be driving. In response of RouteETA a unique identifier to that request will be received which can be get using parameter routeIdentifier of object Route.", "##### AttributeOptions AttributeOptions for the route. Any combination of AttributeOptions can be specified. By default, no attribute options are specified.", "##### IncludesAlternativeRoutes A Boolean value indicating whether alternative routes should be included in the response. The default value of this property is true." ] }, { "title": "showDottedPolylineForWalkingProfile", "level": 4, "paragraphs": [ "showDottedPolylineForWalkingProfile is boolean a propery to show dotted or plain polyline for walking profile. Its default value is true.", "MapplsDirectionViewController is created using several UI components whose appearance can be changed according to user requirements. Some of them are listed as below:", "• MapplsDirectionTopBannerView - MapplsDirectionBottomBannerView" ] }, { "title": "MapplsDirectionViewControllerDelegates", "level": 3, "paragraphs": [ "It is a protocol class which will be used for callback methods as shown below:" ] }, { "title": "MapplsDirectionTopBannerView", "level": 3, "paragraphs": [ "MapplsDirectionTopBannerView is type of UIView which show the source, destination and viapoint locations at the top of MapplsDirectionViewController", "This class accepts array of MapplsDirectionLocation from which it set value of source, destination and viapoint." ] }, { "title": "MapplsDirectionBottomBannerView", "level": 3, "paragraphs": [ "MapplsDirectionBottomBannerView is class of type UIView, it used for showing the route information i.e ArivalTime, DistanceRemening, TimeRemening.", "To use this class it takes we need to call a function updateBottomBanner which accepts three parameters i.e route, selectedRoute, locationModel.", "• route: It is an array of the Routes which is required to update bottom banner view. - selectedRoute: If you have multiple routes then it will give the selected route in Integer - locationModel: LocationModel is an array of the type MapplsDirectionLocation which is required to manage bottom banner view." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "let directionVC = MapplsDirectionViewController(for: [MapplsDirectionLocation]())\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "var locationModels = [MapplsDirectionLocation]()\nlet source = MapplsDirectionLocation(location: \"77.2639,28.5354\", displayName: \"Govindpuri\", displayAddress: \"\", locationType: .suggestion)\n \nlet viaPoint = MapplsDirectionLocation(location: \"12269L\", displayName: \"Sitamarhi\", displayAddress: \"\", locationType: .suggestion)\n \nlet destination = MapplsDirectionLocation(location: \"1T182A\", displayName: \"Majorganj\", displayAddress: \"\", locationType: .suggestion)\n \nself.locationModels.append(source)\nself.locationModels.append(viaPoint)\nself.locationModels.append(destination)\nlet directionVC = MapplsDirectionViewController(for: self.locationModels)\ndirectionVC.profileIdentifier = .driving\ndirectionVC.attributationOptions = [.congestionLevel]\ndirectionVC.resourceIdentifier = .routeETA\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "MapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]init];\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];\n\nOR\n\nMapplsDirectionLocation* source = [[MapplsDirectionLocation alloc] initWithLocation:@\"78.00,28.00\" displayName:@\"haridwar\" displayAddress:@\"\" locationType:0];\nMapplsDirectionLocation* destination = [[MapplsDirectionLocation alloc] initWithLocation:@\"1T182A\" displayName:@\"Majorganj\" displayAddress:@\"\" locationType:1];\n\nNSArray* locations = [[NSArray alloc] initWithObjects:current,destination, nil];\n\nMapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]initFor:locations style:nil];\n\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowDrivingModeSelector = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowRouteReportSummary = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowTollCostEstimation = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.isShowCongestionDelayOnRoute = false" }, { "language": "Swift", "label": "Configuration", "code": "let directionVC = MapplsDirectionViewController()\ndirectionVC.shouldAllowToAddViapoint = true" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// This meathod will be called when back button is clicked in `TopBannerView`\n1. didRequestForGoBack(for view: MapplsDirectionTopBannerView, controller: UIViewController)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// The meathod will be called when add viapoint button will clicked in `TopBannerView`.\n2. didRequestForAddViapoint(_ sender: UIButton,for isEditMode: Bool)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// The meathod will be called when Directions button will clicked in `BottomBannerView`.\n3. didRequestDirections()" }, { "language": "Swift", "label": "Call Back Handler", "code": "//The meathod will be called when start button will clicked in `BottomBannerView`.\n4. didRequestForStartNavigation(for routes: [Route], viewController: UIViewController, locations: [MapplsDirectionLocation], selectedRouteIndex: Int, error: NSError)" }, { "language": "Swift", "label": "Call Back Handler", "code": "// The meathod will be called when user click on auto search result\n5. didDirectionsAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType)" }, { "language": "Swift", "label": "Call Back Handler", "code": "// The meathod will be called when user click on auto search favourite places\n6. didDirectionsAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 19, "codeSampleCount": 14, "fingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878" } } ``` ## source-reference · MapplsDrivingRangePlugin for iOS - Identity: `source-reference:mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-drivingrange-plugin-ios-distribution - State model: stateless ```json { "slug": "mappls-drivingrange-plugin-ios-distribution", "sourceId": "public-mappls-drivingrange-plugin-ios-distribution", "name": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS", "summary": "Mappls Driving Range Plugin Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T12:01:43Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The MapplsDrivingRangePlugin allows you to plot driving range area to drive based on time or distance on Mappls's vector map component.", "The plugin offers the following basic functionalities:", "• Get and Plot driving range as polygon on map.", "• Update driving range on map.", "• Clear already plotted driving range on map.", "This can be done by following simple steps." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPIKit - MapplsMap" ] }, { "title": "MapplsAPICore", "level": 4, "paragraphs": [ "It is required to set Mappls keys to use any MAPPL's SDK. Please refer the documenatation here." ] }, { "title": "MapplsDrivingRangePlugin", "level": 3, "paragraphs": [ "MapplsDrivingRange is the main class which is need to initialize to use different functionality of plugin. It requires an instance of MapplsMapView.", "It allows you to plot driving range area to drive based on time or distance." ] }, { "title": "Get And Plot Driving Range", "level": 2, "paragraphs": [ "A function getAndPlotDrivingRange of instance of MapplsDrivingRange will be used to get driving range and plot on map. This function will accept an instance of MapplsDrivingRangeOptions as request to get driving range.", "Below is code for reference:" ] }, { "title": "Clear Driving Range", "level": 3, "paragraphs": [ "Plotted driving range on Map can be removed by calling function clearDrivingRangeFromMap.", "Below is line of code to use it:" ] }, { "title": "Update Driving Range", "level": 3, "paragraphs": [ "Plotted driving range on map can be upated by calling function getAndPlotDrivingRange again with new request object (instance of MapplsDrivingRangeOptions).", "Below is some code for reference:" ] }, { "title": "MapplsDrivingRangeDelegate", "level": 3, "paragraphs": [ "It is a protocol class which provides different callbacks of events of MapplsDrivingRange.", "Below are different callback functions avaialble:" ] }, { "title": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "level": 4, "paragraphs": [ "Called when the plugin fails to get and plot driving range.", "• plugin:- The plugin that has calculated a driving range.", "• error:- An error raised during the process of obtaining a new route." ] }, { "title": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "level": 4, "paragraphs": [ "Called when the plugin succeed to get and plot driving range on map.", "• plugin:- The plugin that has calculated a driving range." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "MapplsDrivingRangePlugin", "code": "var drivingRangePlugin = MapplsDrivingRange(mapView: self.mapView)\n\nself.drivingRangePlugin.delegate = self // optional" }, { "language": "Swift", "label": "Get And Plot Driving Range", "code": "let location = CLLocation(latitude: 28.551060, longitude: 77.268989)\n \nlet contours = [MapplsDrivingRangeContours(value: 2)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .distance, contours: contours)\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "Clear Driving Range", "code": "drivingRangePlugin.clearDrivingRangeFromMap()" }, { "language": "Swift", "label": "Update Driving Range", "code": "let location = CLLocation(latitude: 28.612972, longitude: 77.233529)\n \nlet contours = [MapplsDrivingRangeContour(value: 15)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .time, contours: contours)\n \nlet speedInfo = MapplsDrivingRangeOptimalSpeed()\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo, speedTypeInfo: speedInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "code": "optional func drivingRange(_ plugin: MapplsDrivingRange, didFailToGetAndPlotDrivingRange error: Error)" }, { "language": "Text", "label": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "code": "@objc optional func drivingRangeDidSuccessToGetAndPlotDrivingRange(_ plugin: MapplsDrivingRange)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 18, "codeSampleCount": 6, "fingerprint": "ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3" } } ``` ## source-reference · MapplsDrivingRangePlugin for iOS - Identity: `source-reference:mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-drivingrange-plugin-ios-distribution-base - State model: stateless ```json { "slug": "mappls-drivingrange-plugin-ios-distribution-base", "sourceId": "public-mappls-drivingrange-plugin-ios-distribution-base", "name": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin 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", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T10:35:11Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The MapplsDrivingRangePlugin allows you to plot driving range area to drive based on time or distance on Mappls's vector map component.", "The plugin offers the following basic functionalities:", "• Get and Plot driving range as polygon on map.", "• Update driving range on map.", "• Clear already plotted driving range on map.", "This can be done by following simple steps." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library requires the following dependencies:", "• MapplsAPICore - MapplsAPIKit - MapplsMap", "Please ensure these packages are added to your project." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPIKit - MapplsMap" ] }, { "title": "MapplsAPICore", "level": 4, "paragraphs": [ "It is required to set Mappls keys to use any MAPPL's SDK. Please refer the documenatation here." ] }, { "title": "MapplsDrivingRangePlugin", "level": 3, "paragraphs": [ "MapplsDrivingRange is the main class which is need to initialize to use different functionality of plugin. It requires an instance of MapplsMapView.", "It allows you to plot driving range area to drive based on time or distance." ] }, { "title": "Get And Plot Driving Range", "level": 2, "paragraphs": [ "A function getAndPlotDrivingRange of instance of MapplsDrivingRange will be used to get driving range and plot on map. This function will accept an instance of MapplsDrivingRangeOptions as request to get driving range.", "Below is code for reference:" ] }, { "title": "Clear Driving Range", "level": 3, "paragraphs": [ "Plotted driving range on Map can be removed by calling function clearDrivingRangeFromMap.", "Below is line of code to use it:" ] }, { "title": "Update Driving Range", "level": 3, "paragraphs": [ "Plotted driving range on map can be upated by calling function getAndPlotDrivingRange again with new request object (instance of MapplsDrivingRangeOptions).", "Below is some code for reference:" ] }, { "title": "MapplsDrivingRangeDelegate", "level": 3, "paragraphs": [ "It is a protocol class which provides different callbacks of events of MapplsDrivingRange.", "Below are different callback functions avaialble:" ] }, { "title": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "level": 4, "paragraphs": [ "Called when the plugin fails to get and plot driving range.", "• plugin:- The plugin that has calculated a driving range.", "• error:- An error raised during the process of obtaining a new route." ] }, { "title": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "level": 4, "paragraphs": [ "Called when the plugin succeed to get and plot driving range on map.", "• plugin:- The plugin that has calculated a driving range." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "MapplsDrivingRangePlugin", "code": "var drivingRangePlugin = MapplsDrivingRange(mapView: self.mapView)\n\nself.drivingRangePlugin.delegate = self // optional" }, { "language": "Swift", "label": "Get And Plot Driving Range", "code": "let location = CLLocation(latitude: 28.551060, longitude: 77.268989)\n \nlet contours = [MapplsDrivingRangeContours(value: 2)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .distance, contours: contours)\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "Clear Driving Range", "code": "drivingRangePlugin.clearDrivingRangeFromMap()" }, { "language": "Swift", "label": "Update Driving Range", "code": "let location = CLLocation(latitude: 28.612972, longitude: 77.233529)\n \nlet contours = [MapplsDrivingRangeContour(value: 15)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .time, contours: contours)\n \nlet speedInfo = MapplsDrivingRangeOptimalSpeed()\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo, speedTypeInfo: speedInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "code": "optional func drivingRange(_ plugin: MapplsDrivingRange, didFailToGetAndPlotDrivingRange error: Error)" }, { "language": "Text", "label": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "code": "@objc optional func drivingRangeDidSuccessToGetAndPlotDrivingRange(_ plugin: MapplsDrivingRange)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-api-core-ios-distribution.git", "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base.git", "https://github.com/mappls-api/mappls-map-ios-distribution-base.git", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 19, "endpointCount": 21, "codeSampleCount": 6, "fingerprint": "d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9" } } ``` ## source-reference · MapplsFeedbackKit for iOS - Identity: `source-reference:mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-feedback-kit-ios-distribution - State model: hybrid ```json { "slug": "mappls-feedback-kit-ios-distribution", "sourceId": "public-mappls-feedback-kit-ios-distribution", "name": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS", "summary": "Mappls Feedback Kit Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "feedback" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T09:43:26Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Feedback Kit for IOS is a wrapper SDK for Mappls's feedback API. It allows developers to integrate feedback module in their application. Using feedback module user can submit location related feedback to Mappls's server.", "Note: Sample for UI view controllers with source code is also provided by Mappls which user can directly use to show feedback screen. Information about how to use UI sample is also provided in this documentation.", "If you don't want to implement own logic and use sample from Mappls Jump to Sample UI Kit section." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "Steps to submit feedback:", "1. An authoraization key i.e moduleId (provided by Mappls) against which feedback will be submitted wiil be required to use this SDK .", "1. List of categories need to be fetched first under which feedback will be submitted. For more informatatio see here.", "• Fetched report categories can be saved for offline use or to prevent fetching report categories multiple times.", "• It will require to separate out them on basis of parentId i.e Separate as Parent and Child Categories, where if parent Id is null means they are parent categories otherwise child of some parent category. Note: ParentId of a child category is reportId of parent category.", "1. On basis of parent and child categories, different User Interfaces or scenarios can be designed as per requirements." ] }, { "title": "Get Report Categories", "level": 2, "paragraphs": [ "Categories for reporting can be fetched using getReportCategories method of MapplsFeedBackKitManager class by using shared instance. In response you will receive an error or an array of MapplsReportCategories. Yo will find below useful properties in reportCategories object which is an array of ParentCategories:", "• ParentCategories", "• SubChildCategories" ] }, { "title": "Submit Feedback", "level": 2, "paragraphs": [ "To submit feedback to Mappls's server you can use saveUserData function of MapplsSaveUserDataAPIManager class by using shared instance.", "saveUserData function will accept an object of MapplsSaveUserDataOptions class.", "To create instance of MapplsSaveUserDataOptions user provide following parameters." ] }, { "title": "Mandatory Parameters", "level": 3, "paragraphs": [ "1. location(String) : It can be either Mappls Pin (The 6-digit alphanumeric code for any location) or coordinate (latitude, longitude) in string format. 1. parentCategory(Integer) : Parent category of the report. 1. childCategory (Integer) : Child category of the report." ] }, { "title": "Optional Parameters", "level": 3, "paragraphs": [ "1. placeName(string) : Name of the place where the event is taking place. It should be derived on the basis of Mappls Pin and coordinates. 2. desription(String) : A description about your event. Min length 10 characters and Max length 250 characters. 3. subChildCategory(Integer)(Internal) : Sub Child category of the report. 4. flag(Integer) : If navroute is active then 1 else 0. 5. speed(Integer) : User's speed in kilometers. 6. alt(Integer) : Altitude of the user’s location, in meters. 7. quality(Integer) : Quality of user's location. 8. bearing(Integer) : Bearing of the user’s location, in degrees. 9. accuracy(Integer) : Accuracy of user's location. 10. utc(Long) : Date time in unix timestamp format. 11. expiry(Long) : Date time in unix timestamp format to set expiry for the report. 12. zeroId(String) : to be used only incase of NAVIMAPS . 13. pushEvent(Boolean)(internal) : to be used " ] }, { "title": "Callbacks", "level": 2, "paragraphs": [ "Different events can be tracked by subscribing to different notificaitons.", "feedbackSubmitSuccessNotification:", "Subscribe to this notification to get callback when report submitted successfully.", "feedbackSubmitFailedNotification:", "Subscribe to this notification to get callback when report submission get failed.", "reportCategoriesFetchSuccessNotification:" ] }, { "title": "Mappls Feedback UI Kit", "level": 1, "paragraphs": [ "A UI control MapplsFeedbackUIKit is available to use SDK MapplsFeedbackKit. To know more about it see here." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Get Report Categories", "code": "MapplsFeedBackKitManager.shared.getReportCategories { (reportCategories, error) in\n if let error = error {\n print(error.localizedDescription)\n self.dismiss(animated: true, completion: nil)\n } else {\n let categories = reportCategories ?? [ParentCategories]()\n if categories.count > 0 {\n self.allReportCategories = categories\n print(self.allReportCategories.first?.id)\n self.currentStep = 1\n } else {\n print(\"No report categories found\")\n self.dismiss(animated: true, completion: nil)\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "let saveOptions = MapplsSaveUserDataOptions(location: \"MMI000\", parentCategory: parentCategory.id ?? 0, childCategory: childCategory.id ?? 0, description: \"This is descriptions\", subChildCategory: self.selectedSubChildCategories?.id, accuracy: 3)\n\nMapplsSaveUserDataAPIManager.shared.saveUserData(saveOptions, { (isSucess, error) in\n\n if let error = error {\n print(error.localizedDescription)\n } else if isSucess {\n print(\"feedback submited successfully\")\n self.dismiss(animated: true, completion: nil)\n } else {\n print(\"No results\")\n }\n})" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackSubmit), name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackFailed), name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchSuccess), name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchFailed), name: .reportCategoriesFetchFailedNotification, object: nil)" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.removeObserver(self, name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchFailedNotification, object: nil)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 12, "endpointCount": 19, "codeSampleCount": 4, "fingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db" } } ``` ## source-reference · MapplsFeedbackKit for iOS - Identity: `source-reference:mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-feedback-kit-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-feedback-kit-ios-distribution-base", "sourceId": "public-mappls-feedback-kit-ios-distribution-base", "name": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS", "summary": "A versioned iOS distribution package used to integrate search places, tracking telematics, widgets deep links, offline automotive, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "feedback" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T07:56:22Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Feedback Kit for IOS is a wrapper SDK for Mappls's feedback API. It allows developers to integrate feedback module in their application. Using feedback module user can submit location related feedback to Mappls's server.", "Note: Sample for UI view controllers with source code is also provided by Mappls which user can directly use to show feedback screen. Information about how to use UI sample is also provided in this documentation.", "If you don't want to implement own logic and use sample from Mappls Jump to Sample UI Kit section." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "Steps to submit feedback:", "1. An authoraization key i.e moduleId (provided by Mappls) against which feedback will be submitted wiil be required to use this SDK .", "1. List of categories need to be fetched first under which feedback will be submitted. For more informatatio see here.", "• Fetched report categories can be saved for offline use or to prevent fetching report categories multiple times.", "• It will require to separate out them on basis of parentId i.e Separate as Parent and Child Categories, where if parent Id is null means they are parent categories otherwise child of some parent category. Note: ParentId of a child category is reportId of parent category.", "1. On basis of parent and child categories, different User Interfaces or scenarios can be designed as per requirements." ] }, { "title": "Get Report Categories", "level": 2, "paragraphs": [ "Categories for reporting can be fetched using getReportCategories method of MapplsFeedBackKitManager class by using shared instance. In response you will receive an error or an array of MapplsReportCategories. Yo will find below useful properties in reportCategories object which is an array of ParentCategories:", "• ParentCategories", "• SubChildCategories" ] }, { "title": "Submit Feedback", "level": 2, "paragraphs": [ "To submit feedback to Mappls's server you can use saveUserData function of MapplsSaveUserDataAPIManager class by using shared instance.", "saveUserData function will accept an object of MapplsSaveUserDataOptions class.", "To create instance of MapplsSaveUserDataOptions user provide following parameters." ] }, { "title": "Mandatory Parameters", "level": 3, "paragraphs": [ "1. location(String) : It can be either Mappls Pin (The 6-digit alphanumeric code for any location) or coordinate (latitude, longitude) in string format. 1. parentCategory(Integer) : Parent category of the report. 1. childCategory (Integer) : Child category of the report." ] }, { "title": "Optional Parameters", "level": 3, "paragraphs": [ "1. placeName(string) : Name of the place where the event is taking place. It should be derived on the basis of Mappls Pin and coordinates. 2. desription(String) : A description about your event. Min length 10 characters and Max length 250 characters. 3. subChildCategory(Integer)(Internal) : Sub Child category of the report. 4. flag(Integer) : If navroute is active then 1 else 0. 5. speed(Integer) : User's speed in kilometers. 6. alt(Integer) : Altitude of the user’s location, in meters. 7. quality(Integer) : Quality of user's location. 8. bearing(Integer) : Bearing of the user’s location, in degrees. 9. accuracy(Integer) : Accuracy of user's location. 10. utc(Long) : Date time in unix timestamp format. 11. expiry(Long) : Date time in unix timestamp format to set expiry for the report. 12. zeroId(String) : to be used only incase of NAVIMAPS . 13. pushEvent(Boolean)(internal) : to be used " ] }, { "title": "Callbacks", "level": 2, "paragraphs": [ "Different events can be tracked by subscribing to different notificaitons.", "feedbackSubmitSuccessNotification:", "Subscribe to this notification to get callback when report submitted successfully.", "feedbackSubmitFailedNotification:", "Subscribe to this notification to get callback when report submission get failed.", "reportCategoriesFetchSuccessNotification:" ] }, { "title": "Mappls Feedback UI Kit", "level": 1, "paragraphs": [ "A UI control MapplsFeedbackUIKit is available to use SDK MapplsFeedbackKit. To know more about it see here." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Get Report Categories", "code": "MapplsFeedBackKitManager.shared.getReportCategories { (reportCategories, error) in\n if let error = error {\n print(error.localizedDescription)\n self.dismiss(animated: true, completion: nil)\n } else {\n let categories = reportCategories ?? [ParentCategories]()\n if categories.count > 0 {\n self.allReportCategories = categories\n print(self.allReportCategories.first?.id)\n self.currentStep = 1\n } else {\n print(\"No report categories found\")\n self.dismiss(animated: true, completion: nil)\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "let saveOptions = MapplsSaveUserDataOptions(location: \"MMI000\", parentCategory: parentCategory.id ?? 0, childCategory: childCategory.id ?? 0, description: \"This is descriptions\", subChildCategory: self.selectedSubChildCategories?.id, accuracy: 3)\n\nMapplsSaveUserDataAPIManager.shared.saveUserData(saveOptions, { (isSucess, error) in\n\n if let error = error {\n print(error.localizedDescription)\n } else if isSucess {\n print(\"feedback submited successfully\")\n self.dismiss(animated: true, completion: nil)\n } else {\n print(\"No results\")\n }\n})" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackSubmit), name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackFailed), name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchSuccess), name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchFailed), name: .reportCategoriesFetchFailedNotification, object: nil)" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.removeObserver(self, name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchFailedNotification, object: nil)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 12, "endpointCount": 19, "codeSampleCount": 4, "fingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db" } } ``` ## source-reference · MapplsFeedbackUIKit for iOS - Identity: `source-reference:mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-feedback-uikit-ios-distribution - State model: hybrid ```json { "slug": "mappls-feedback-uikit-ios-distribution", "sourceId": "public-mappls-feedback-uikit-ios-distribution", "name": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS", "summary": "Mappls Feedback UI Kit Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "feedback" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T10:19:46Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "FeedbackUI Kit for IOS is a UI kit to use wrapper for Mappls's feedback API. It allows developers to integrate feedback module in their application. Using feedback module user can submit location related feedback to Mappls's server.", "Note: Sample for UI view controllers with source code is also provided by Mappls which user can directly use to show feedback screen. Information about how to use UI sample is also provided in this documentation.", "If you don’t want to implement own logic and use sample from Mappls Jump to Sample UI Kit section." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "MapplsFeedbackUIKitManager is the class which will help to use this UI Control.Access shared instance of that class and call getViewController method to get instance of ViewController and present or push according to requirement." ] }, { "title": "Push Controller", "level": 3, "paragraphs": [ "MapplsFeedbackUIKit implicitly uses functionalities of MapplsFeedBackKitManager module and provides a beautiful user expereience to submit feedback." ] }, { "title": "Theme", "level": 2, "paragraphs": [ "Feedback UI also supports different themes. Avaialable options are Day, Night and Auto. In case of Auto it will behave as per system settings.", "Below is code to initialize feedback ui with theme:", "Also different colors of Day and Night theme are configurable by accessing shared instance of class DayThemeColors and NightThemeColors respectively. Available properties to set are as below:", "• backgroundColor - backgroundColor1 - foregroundColor1 - foregroundColor2 - primaryColor - secondryColor" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Present Navigation Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .night)\n\nself.present(navVC, animated: true, completion: nil)" }, { "language": "Swift", "label": "Push Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .auto)\n navVC.modalPresentationStyle = .fullScreen\nself.navigationController?.pushViewController(navVC, animated: true)" }, { "language": "Swift", "label": "Theme", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude), theme: MapplsFeedbackTheme.auto)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 19, "codeSampleCount": 3, "fingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688" } } ``` ## source-reference · MapplsFeedbackUIKit for iOS - Identity: `source-reference:mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-feedback-uikit-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-feedback-uikit-ios-distribution-base", "sourceId": "public-mappls-feedback-uikit-ios-distribution-base", "name": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit 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", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "feedback" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T07:40:43Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "FeedbackUI Kit for IOS is a UI kit to use wrapper for Mappls's feedback API. It allows developers to integrate feedback module in their application. Using feedback module user can submit location related feedback to Mappls's server.", "Note: Sample for UI view controllers with source code is also provided by Mappls which user can directly use to show feedback screen. Information about how to use UI sample is also provided in this documentation.", "If you don’t want to implement own logic and use sample from Mappls Jump to Sample UI Kit section." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "MapplsFeedbackUIKitManager is the class which will help to use this UI Control.Access shared instance of that class and call getViewController method to get instance of ViewController and present or push according to requirement." ] }, { "title": "Push Controller", "level": 3, "paragraphs": [ "MapplsFeedbackUIKit implicitly uses functionalities of MapplsFeedBackKitManager module and provides a beautiful user expereience to submit feedback." ] }, { "title": "Theme", "level": 2, "paragraphs": [ "Feedback UI also supports different themes. Avaialable options are Day, Night and Auto. In case of Auto it will behave as per system settings.", "Below is code to initialize feedback ui with theme:", "Also different colors of Day and Night theme are configurable by accessing shared instance of class DayThemeColors and NightThemeColors respectively. Available properties to set are as below:", "• backgroundColor - backgroundColor1 - foregroundColor1 - foregroundColor2 - primaryColor - secondryColor" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Present Navigation Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .night)\n\nself.present(navVC, animated: true, completion: nil)" }, { "language": "Swift", "label": "Push Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .auto)\n navVC.modalPresentationStyle = .fullScreen\nself.navigationController?.pushViewController(navVC, animated: true)" }, { "language": "Swift", "label": "Theme", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude), theme: MapplsFeedbackTheme.auto)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 19, "codeSampleCount": 3, "fingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688" } } ``` ## source-reference · Mappls Flutter SDK - Identity: `source-reference:mappls-flutter-sdk` - Canonical: https://developer.mappls.com/reference/mappls-flutter-sdk - State model: stateless ```json { "slug": "mappls-flutter-sdk", "sourceId": "public-mappls-flutter-sdk", "name": "mappls-flutter-sdk", "title": "Mappls Flutter SDK", "summary": "This SDK is wrapper for Flutter on Native Map SDK to support on Android and iOS.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Flutter" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-flutter-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-flutter-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-flutter-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T03:24:01Z", "localCandidates": [], "prerequisites": [ "A Flutter project with Android and iOS platform configuration", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch." ] }, { "title": "Mappls Flutter SDK", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Android Applications", "Powered with India's most comprehensive and robust mapping functionalities.", "1. You can get your api key to be used in this document here: Mappls Dashboard", "2. The sample code is provided to help you understand the basic functionality of Mappls maps & REST APIs working on Flutter development platform.", "4. Explore through 200+ countries & territories with Global Search, Routing and Mapping APIs & SDKs by Mappls." ] }, { "title": "Table of Contents", "level": 2, "paragraphs": [ "• Getting Started - Installation - Android Setup - iOS Setup - Web Setup - Mappls Map SDK - Version History - Import Flutter Map - Add Flutter Mappls Map - Map Gestures - Target - Tilt - Bearing - Zoom - Map Camera - Camera Position - Set Camera Position On Map - Camera Animations - Move Camera - Ease Camera - Animate Camera - Camera Control - Move To Target - Move To Target with Zoom - Move To Bound - Zoom To - Zoom By - Zoom In - Zoom Out - Map Events - Map Click Event - Map Long Click Event - Camera Movement Ended - Map Overlays - Marker - Add Marker - Custom Marker - Remove Marker - Polyline - Add Polyline - Remove Polyline - Polygon - Add Polygon - Remove Polygon - Show Current Location - Show/Hide Current Location On Map - Location Update Callback - Tracking Mode - Render Mode - Map UI Settings - Compass Settings - Enable/Disable Compass - Gravity of Compass - Margins of Compass - ", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-flutter-sdk/tree/main", "https://github.com/mappls-api/mappls-flutter-sdk/tree/auth-legacy", "https://www.mapmyindia.com/api", "https://auth.mappls.com/console", "https://github.com/mappls-api/mappls-rest-apis/blob/main/docs/countryISO.md", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d" } } ``` ## source-reference · MapplsGeoanalytics Plugin for iOS - Identity: `source-reference:mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-geoanalytics-ios-distribution - State model: stateless ```json { "slug": "mappls-geoanalytics-ios-distribution", "sourceId": "public-mappls-geoanalytics-ios-distribution", "name": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS", "summary": "Mappls Geoanalytics Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-11T12:19:50Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsGeoanalytics is a plugin over Mappls's GeoAnalytics APIs. Geoanalytics APIs gives the users the power to display, style, and edit the data which is archived in Mappls's Database and overlay it on the user created maps.", "• Enables data selection, visualization, queries & styling with rich base map available at various level of granularity - Build maps quickly and easily without coordinates, using country, pin codes or simply place names - Drill and analyze different type of map layers such as districts, pincode, villages, city etc at Pan India level or restricted to limited bound /Area of interest - Allows user to set their own styling parameters such as label color scheme, geometry color schemes, opacity, width, stroke etc. - Allows to create rich thematic visuals using combination of value ranges", "This plugin gets the layer specified which is stored in Mappls’s Database and gives a WMS layer as an output with any filters or styles specified by the user." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "Geoanalytics Layer Types", "level": 3, "paragraphs": [ "An enum MapplsGeoanalyticsLayerType can be used to get different types of layers. Below are different types which are available:", "1. MapplsGeoanalyticsLayerTypeState 2. MapplsGeoanalyticsLayerTypeDistrict 3. MapplsGeoanalyticsLayerTypeSubDistrict 4. MapplsGeoanalyticsLayerTypeCity 5. MapplsGeoanalyticsLayerTypeTown 6. MapplsGeoanalyticsLayerTypeLocality 7. MapplsGeoanalyticsLayerTypeSubLocality 8. MapplsGeoanalyticsLayerTypeSubSubLocality 9. MapplsGeoanalyticsLayerTypePanchayat 10. MapplsGeoanalyticsLayerTypeVillage 11. MapplsGeoanalyticsLayerTypeWard 12. MapplsGeoanalyticsLayerTypePincode 13. MapplsGeoanalyticsLayerTypeBlock", "Now that you’re all caught up with the features, let's get down right to them and look at how you can integrate our GeoAnalytics plugin to add data on your map in few simple steps." ] }, { "title": "Use of GeoAnalytics API", "level": 2, "paragraphs": [ "Use instance of MapplsGeoanalyticsPlugin to show response of GeoAnalytics API as Map Layers.", "For infomation about GeoAnalytics API go here." ] }, { "title": "Step 1 - Get GeoAnalytics layers", "level": 3, "paragraphs": [ "To get response of GeoAnalytics API, Create an instance of MapplsGeoanalyticsLayerRequest. Below is code snipet for this." ] }, { "title": "MapplsGeoanalyticsLayerRequest", "level": 4, "paragraphs": [ "Below are parameters of MapplsGeoanalyticsLayerRequest class.", "• geoboundType (mandatory): It is of type String. It accepts type of geographical extents on which data would be bound. eg. \"India\", \"State\", \"District\" etc.", "• geobound (mandatory): It is an array of type MapplsGeoanalyticsGeobound. For more info see here.", "• propertyName (mandatory): It is an array of type String. eg. [\"sttnme\"], [\"sttid\"], [\"tp\"].", "• layerType (mandatory): It is the type of layer that user want to show on map it is an enum of type MapplsGeoanalyticsLayerType.", "The following are optional parameters" ] }, { "title": "MapplsGeoanalyticsGeobound", "level": 4, "paragraphs": [ "Instance of MapplsGeoanalyticsGeobound is used as a parameter in class MapplsGeoanalyticsLayerRequest. It has two properties geobound and appearance(optional). Where appearance is of type GeoanalyticsLayerAppearance.", "##### GeoanalyticsLayerAppearance:", "This is the class used to set the appearance of the layer, i.e layerColor, textColor, border color etc. it has following properties: - fillColor - fillOpacity - labelColor - labelSize - strokeColor - strokeWidth" ] }, { "title": "Step 2 - Adding GeoAnalytics layer on Map", "level": 3, "paragraphs": [ "A function showGeoanalyticsLayer available in MapplsGeoanalyticsPlugin which accepts a parameter of type MapplsGeoanalyticsLayerRequest. Plugin internally consume that request to get response and plot layer on Map accordingly." ] }, { "title": "Other Methods Available:", "level": 3, "paragraphs": [ "1. Remove GeoAnalytics Layer", "removeGeonalyticsLayer is a function which accepts request of type MapplsGeoanalyticsLayerRequest to remove related layer from map.", "2. GeoAnalytics Layer Info", "A delegate function can be used for information of layer where map is tapped. Below is the delegate function which returns response of feature info api.", "A popup will be shown for information of layer where map is tapped. There is a property shouldShowPopupForGeoanalyticsLayer available to enable or disable that popup. It is of type Bool by default its value is false.", "A delegate function can be used to show custom popup for layer information. Below is delegate function for the same." ] }, { "title": "Introduction:", "level": 3, "paragraphs": [ "MapplsGeoanalytics plugin contains a manager class to consume Mappls's Listing API. Listing API is an API that gives the user's information on the different layers & attributes available within Geo-Analytics Core APIs. This API acts as an assisting API to quickly get the necessary details that are required to accurately fetch the required overlays from the core Geo-Analytics APIs.", "It provides list of attributes along with unique ID. User can get bounding box of the required feature/area as well.", "For more information about Listing API see here." ] }, { "title": "Step 1 - Create Request", "level": 3, "paragraphs": [ "First create an instance of GeoanalyticsListingAPIRequest as shown below.", "Possible request parameters in class of GeoanalyticsListingAPIRequest are listed below." ] }, { "title": "GeoanalyticsListingAPIRequest", "level": 4, "paragraphs": [ "• geoboundType: It is of type string which accepts the type of geobound. - geobound: Single valued parent type, for example: sttnme, dstnme, sdbnme etc. Note: For parent type reference, contact apisupport@Mappls.com - attribute: field name/bounding Box requested w.r.t api (api) & parent type (geoboundtype). Bounding box can be requested as \"bbox\" variable. - api: It is an enum of type MapplsGeoanalyticsLayerType which specifie type of listing api." ] }, { "title": "Step 2 - Send Request", "level": 3, "paragraphs": [ "Use shared instance of MapplsGeoanalyticsListingManager and call getListingInfo method which accepts request parameter of type GeoanalyticsListingAPIRequest as created in previous step. Method getListingInfo returns response of type GeoanalyticsListingAPIsResponse and error of type NSError in completion code block." ] }, { "title": "GeoanalyticsListingAPIsResponse", "level": 4, "paragraphs": [ "GeoanalyticsListingAPIsResponse contains following properties.", "• responseCode: It is of type NSString", "• version: It is the response attribute of type NSString", "• totalFeatureCount: IT is the response attribute of type NSString.", "• results: It is the response parameter which is of type GeoanalyticsListingAPIsResult.", "GeoanalyticsListingAPIsResult is the class which contains following property." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Initialization MapplsGeoanalyticsPlugin", "code": "var geoanalyticsPlugin : MapplsGeoanalyticsPlugin = MapplsGeoanalyticsPlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 1 - Get GeoAnalytics layers", "code": "let apperenceState = GeoanalyticsLayerAppearance()\napperenceState.fillColor = \"42a5f4\"\napperenceState.fillOpacity = \"0.5\"\napperenceState.labelColor = \"000000\"\napperenceState.labelSize = \"10\"\napperenceState.strokeColor = \"000000\"\napperenceState.strokeWidth = \"0\"\n \nlet geoboundArray = [MapplsGeoanalyticsGeobound(geobound: \"HARYANA\", appearance: apperenceState), MapplsGeoanalyticsGeobound(geobound: \"UTTAR PRADESH\", appearance: apperenceState),MapplsGeoanalyticsGeobound(geobound: \"KERALA\", appearance: apperenceState)]\n \nlet layerRequestState = MapplsGeoanalyticsLayerRequest(geoboundType: \"stt_nme\", geobound: geoboundArray, propertyName: [\"stt_nme\",\"stt_id\",\"t_p\"], layerType: .state)\n\nlayerRequestState.attribute = \"t_p\";\nlayerRequestState.query = \">0\";\nlayerRequestState.transparent = true;" }, { "language": "Swift", "label": "Step 2 - Adding GeoAnalytics layer on Map", "code": "self.geoanalyticsPlugin.showGeoanalyticsLayer(layerRequestState)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.removeGeoanalyticsLayer(layerRequestState))" }, { "language": "Swift", "label": "Other Methods Available:", "code": "func didGetFeatureInfoResponse(_ featureInfoResponse:GeoanalyticsGetFeatureInfoResponse) {\n print(featureInfoResponse.features)\n}" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.shouldShowPopupForGeoanalyticsLayer = true" }, { "language": "Swift", "label": "Other Methods Available:", "code": "// To show default popup return nil.\nfunc view(forGeoanalyticsInfo response: GeoanalyticsGetFeatureInfoResponse) -> UIView? {\n return nil\n}" }, { "language": "Swift", "label": "Step 1 - Create Request", "code": "let listingRequest = GeoanalyticsListingAPIRequest(geoboundType: \"stt_nme\", geobound: [\"HARYANA\",\"UTTAR PRADESH\",\"ANDHRA PRADESH\",\"KERALA\"], attribute: \"b_box\", api: .state)" }, { "language": "Swift", "label": "Step 2 - Send Request", "code": "let listingManager = MapplsGeoanalyticsListingManager.shared()\nlistingManager.getListingInfo(listingRequest) { (response, error) in\n if (error != nil) {\n print(error.code) \n } else {\n print(response)\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPIKit.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsMap.md", "https://about.mappls.com/api/advanced-maps/geoanalytics-web-js/geo-analytics-mapmyindia-js).**", "https://www.mappls.com/api/advanced-maps/geoanalytics-web-js/listingapi).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 24, "endpointCount": 24, "codeSampleCount": 9, "fingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a" } } ``` ## source-reference · MapplsGeoanalytics Plugin for iOS - Identity: `source-reference:mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-geoanalytics-ios-distribution-base - State model: stateless ```json { "slug": "mappls-geoanalytics-ios-distribution-base", "sourceId": "public-mappls-geoanalytics-ios-distribution-base", "name": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS", "summary": "Mappls Geoanalytics Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T06:18:16Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsGeoanalytics is a plugin over Mappls's GeoAnalytics APIs. Geoanalytics APIs gives the users the power to display, style, and edit the data which is archived in Mappls's Database and overlay it on the user created maps.", "• Enables data selection, visualization, queries & styling with rich base map available at various level of granularity - Build maps quickly and easily without coordinates, using country, pin codes or simply place names - Drill and analyze different type of map layers such as districts, pincode, villages, city etc at Pan India level or restricted to limited bound /Area of interest - Allows user to set their own styling parameters such as label color scheme, geometry color schemes, opacity, width, stroke etc. - Allows to create rich thematic visuals using combination of value ranges", "This plugin gets the layer specified which is stored in Mappls’s Database and gives a WMS layer as an output with any filters or styles specified by the user." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed on using SPM.", "Below are list of dependcies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "Geoanalytics Layer Types", "level": 3, "paragraphs": [ "An enum MapplsGeoanalyticsLayerType can be used to get different types of layers. Below are different types which are available:", "1. MapplsGeoanalyticsLayerTypeState 2. MapplsGeoanalyticsLayerTypeDistrict 3. MapplsGeoanalyticsLayerTypeSubDistrict 4. MapplsGeoanalyticsLayerTypeCity 5. MapplsGeoanalyticsLayerTypeTown 6. MapplsGeoanalyticsLayerTypeLocality 7. MapplsGeoanalyticsLayerTypeSubLocality 8. MapplsGeoanalyticsLayerTypeSubSubLocality 9. MapplsGeoanalyticsLayerTypePanchayat 10. MapplsGeoanalyticsLayerTypeVillage 11. MapplsGeoanalyticsLayerTypeWard 12. MapplsGeoanalyticsLayerTypePincode 13. MapplsGeoanalyticsLayerTypeBlock", "Now that you’re all caught up with the features, let's get down right to them and look at how you can integrate our GeoAnalytics plugin to add data on your map in few simple steps." ] }, { "title": "Use of GeoAnalytics API", "level": 2, "paragraphs": [ "Use instance of MapplsGeoanalyticsPlugin to show response of GeoAnalytics API as Map Layers.", "For infomation about GeoAnalytics API go here." ] }, { "title": "Step 1 - Get GeoAnalytics layers", "level": 3, "paragraphs": [ "To get response of GeoAnalytics API, Create an instance of MapplsGeoanalyticsLayerRequest. Below is code snipet for this." ] }, { "title": "MapplsGeoanalyticsLayerRequest", "level": 4, "paragraphs": [ "Below are parameters of MapplsGeoanalyticsLayerRequest class.", "• geoboundType (mandatory): It is of type String. It accepts type of geographical extents on which data would be bound. eg. \"India\", \"State\", \"District\" etc.", "• geobound (mandatory): It is an array of type MapplsGeoanalyticsGeobound. For more info see here.", "• propertyName (mandatory): It is an array of type String. eg. [\"sttnme\"], [\"sttid\"], [\"tp\"].", "• layerType (mandatory): It is the type of layer that user want to show on map it is an enum of type MapplsGeoanalyticsLayerType.", "The following are optional parameters" ] }, { "title": "MapplsGeoanalyticsGeobound", "level": 4, "paragraphs": [ "Instance of MapplsGeoanalyticsGeobound is used as a parameter in class MapplsGeoanalyticsLayerRequest. It has two properties geobound and appearance(optional). Where appearance is of type GeoanalyticsLayerAppearance.", "##### GeoanalyticsLayerAppearance:", "This is the class used to set the appearance of the layer, i.e layerColor, textColor, border color etc. it has following properties: - fillColor - fillOpacity - labelColor - labelSize - strokeColor - strokeWidth" ] }, { "title": "Step 2 - Adding GeoAnalytics layer on Map", "level": 3, "paragraphs": [ "A function showGeoanalyticsLayer available in MapplsGeoanalyticsPlugin which accepts a parameter of type MapplsGeoanalyticsLayerRequest. Plugin internally consume that request to get response and plot layer on Map accordingly." ] }, { "title": "Other Methods Available:", "level": 3, "paragraphs": [ "1. Remove GeoAnalytics Layer", "removeGeonalyticsLayer is a function which accepts request of type MapplsGeoanalyticsLayerRequest to remove related layer from map.", "2. GeoAnalytics Layer Info", "A delegate function can be used for information of layer where map is tapped. Below is the delegate function which returns response of feature info api.", "A popup will be shown for information of layer where map is tapped. There is a property shouldShowPopupForGeoanalyticsLayer available to enable or disable that popup. It is of type Bool by default its value is false.", "A delegate function can be used to show custom popup for layer information. Below is delegate function for the same." ] }, { "title": "Introduction:", "level": 3, "paragraphs": [ "MapplsGeoanalytics plugin contains a manager class to consume Mappls's Listing API. Listing API is an API that gives the user's information on the different layers & attributes available within Geo-Analytics Core APIs. This API acts as an assisting API to quickly get the necessary details that are required to accurately fetch the required overlays from the core Geo-Analytics APIs.", "It provides list of attributes along with unique ID. User can get bounding box of the required feature/area as well.", "For more information about Listing API see here." ] }, { "title": "Step 1 - Create Request", "level": 3, "paragraphs": [ "First create an instance of GeoanalyticsListingAPIRequest as shown below.", "Possible request parameters in class of GeoanalyticsListingAPIRequest are listed below." ] }, { "title": "GeoanalyticsListingAPIRequest", "level": 4, "paragraphs": [ "• geoboundType: It is of type string which accepts the type of geobound. - geobound: Single valued parent type, for example: sttnme, dstnme, sdbnme etc. Note: For parent type reference, contact apisupport@Mappls.com - attribute: field name/bounding Box requested w.r.t api (api) & parent type (geoboundtype). Bounding box can be requested as \"bbox\" variable. - api: It is an enum of type MapplsGeoanalyticsLayerType which specifie type of listing api." ] }, { "title": "Step 2 - Send Request", "level": 3, "paragraphs": [ "Use shared instance of MapplsGeoanalyticsListingManager and call getListingInfo method which accepts request parameter of type GeoanalyticsListingAPIRequest as created in previous step. Method getListingInfo returns response of type GeoanalyticsListingAPIsResponse and error of type NSError in completion code block." ] }, { "title": "GeoanalyticsListingAPIsResponse", "level": 4, "paragraphs": [ "GeoanalyticsListingAPIsResponse contains following properties.", "• responseCode: It is of type NSString", "• version: It is the response attribute of type NSString", "• totalFeatureCount: IT is the response attribute of type NSString.", "• results: It is the response parameter which is of type GeoanalyticsListingAPIsResult.", "GeoanalyticsListingAPIsResult is the class which contains following property." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Initialization MapplsGeoanalyticsPlugin", "code": "var geoanalyticsPlugin : MapplsGeoanalyticsPlugin = MapplsGeoanalyticsPlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 1 - Get GeoAnalytics layers", "code": "let apperenceState = GeoanalyticsLayerAppearance()\napperenceState.fillColor = \"42a5f4\"\napperenceState.fillOpacity = \"0.5\"\napperenceState.labelColor = \"000000\"\napperenceState.labelSize = \"10\"\napperenceState.strokeColor = \"000000\"\napperenceState.strokeWidth = \"0\"\n \nlet geoboundArray = [MapplsGeoanalyticsGeobound(geobound: \"HARYANA\", appearance: apperenceState), MapplsGeoanalyticsGeobound(geobound: \"UTTAR PRADESH\", appearance: apperenceState),MapplsGeoanalyticsGeobound(geobound: \"KERALA\", appearance: apperenceState)]\n \nlet layerRequestState = MapplsGeoanalyticsLayerRequest(geoboundType: \"stt_nme\", geobound: geoboundArray, propertyName: [\"stt_nme\",\"stt_id\",\"t_p\"], layerType: .state)\n\nlayerRequestState.attribute = \"t_p\";\nlayerRequestState.query = \">0\";\nlayerRequestState.transparent = true;" }, { "language": "Swift", "label": "Step 2 - Adding GeoAnalytics layer on Map", "code": "self.geoanalyticsPlugin.showGeoanalyticsLayer(layerRequestState)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.removeGeoanalyticsLayer(layerRequestState))" }, { "language": "Swift", "label": "Other Methods Available:", "code": "func didGetFeatureInfoResponse(_ featureInfoResponse:GeoanalyticsGetFeatureInfoResponse) {\n print(featureInfoResponse.features)\n}" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.shouldShowPopupForGeoanalyticsLayer = true" }, { "language": "Swift", "label": "Other Methods Available:", "code": "// To show default popup return nil.\nfunc view(forGeoanalyticsInfo response: GeoanalyticsGetFeatureInfoResponse) -> UIView? {\n return nil\n}" }, { "language": "Swift", "label": "Step 1 - Create Request", "code": "let listingRequest = GeoanalyticsListingAPIRequest(geoboundType: \"stt_nme\", geobound: [\"HARYANA\",\"UTTAR PRADESH\",\"ANDHRA PRADESH\",\"KERALA\"], attribute: \"b_box\", api: .state)" }, { "language": "Swift", "label": "Step 2 - Send Request", "code": "let listingManager = MapplsGeoanalyticsListingManager.shared()\nlistingManager.getListingInfo(listingRequest) { (response, error) in\n if (error != nil) {\n print(error.code) \n } else {\n print(response)\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPIKit.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsMap.md", "https://about.mappls.com/api/advanced-maps/geoanalytics-web-js/geo-analytics-mapmyindia-js).**", "https://www.mappls.com/api/advanced-maps/geoanalytics-web-js/listingapi).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 24, "endpointCount": 24, "codeSampleCount": 9, "fingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a" } } ``` ## source-reference · MapplsGeofenceUI Plugin for iOS - Identity: `source-reference:mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-geofence-ui-ios-distribution - State model: hybrid ```json { "slug": "mappls-geofence-ui-ios-distribution", "sourceId": "public-mappls-geofence-ui-ios-distribution", "name": "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", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "geofence" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-10T10:55:54Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Mappls Geofence Plugin SDK provides the functionalities to create a geofence in circle and polygon shape." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Anyone can integrate the Mappls Geofence Plugin by following simple steps.Please note that this Plugin for iOS supports iOS SDK 9.0 and above.", "To integrate Geofence SDK, it is important to pass an object of MapplsMapView which is part of Mappls's MapplsMap SDK." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls keys to use any MAPPL's SDK. Please refer the documentatation here." ] }, { "title": "Step 3 :- Initialization of GeofenceViewUI", "level": 2, "paragraphs": [ "To Initialize, add MapplsGeofenceUI and MapplsMap Framework in your controller File.", "User must implement the MapplsGeofenceViewDelegate protocol class to use delegate methods of MapplsGeofenceView", "Thats All! The plugin is added in your application.", "This highly customizable plugin offers a wide range of properties can be edited based on the requirements of the users. Lets have alook at them." ] }, { "title": "Customizing the Geofence using various properties:", "level": 2, "paragraphs": [ "1. Set Geofence Mode: To set Geofence mode as a circle or a polygon", "2. Show/Hide Default Slider: To show/hide CircleSlider. Defaults to true.", "3. Mode Panel: To show/hide modePanel for Circle and Polygon. Defaults to true.", "4. Polygon Delete Button Image: To change PolygonDelete button default image", "5. Polygon Drag Point To Move DeleteImage: To change polygonDeleteImage while dragging to any point.", "6. Circle Fill Color: To set fill color of circle" ] }, { "title": "Sample App", "level": 1, "paragraphs": [ "In the Sample Version 0.5.0, we have added some more functionalities like:" ] }, { "title": "1. Polygon points Check (Anticlockwise or Clockwise)", "level": 4, "paragraphs": [ "To see if the polygon points are drawn clockwise or antoclockwise, draw polygon points in sampleApp. We have one button that shows direction in top right corner of custom geofence class." ] }, { "title": "2. Draw Geofence Shape View", "level": 4, "paragraphs": [ "To view your geofence created shape by clicking on Apply button(In customGeofenceVC Class). When the user clicks on Apply button, it will navigate to related list in class(DrawCircleVC)." ] }, { "title": "3. Edit Geofence Shape", "level": 4, "paragraphs": [ "In Class (DrawCircle) we are showing one option to edit on click. It will navigate to the related geofence screen with current shape, here, user can modified it.", "After clicking Apply button, it will reflect in (DrawCircleVCClass)." ] }, { "title": "4. Delete Geofence Shape", "level": 4, "paragraphs": [ "We have provided a delete button in (rawCircleVC Class). Clicking on this, will delete the current shape in the list." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "import MapplsMap\nimport MapplsGeofenceUI\nvar geofenceView: MapplsGeofenceView!\n override func viewDidLoad() {\n super.viewDidLoad()\n // If you're on a background thread and want to execute code on the main thread, you need to call async()\n DispatchQueue.main.async {\nlet geofenceInstance: MapplsGeofenceView = {\ngeofenceView = MapplsGeofenceView.init(geofenceframe: self.view.bounds)\ngeofenceView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n return geofenceView\n}()\ngeofenceInstance.delegate = self\nself.view.addSubview(geofenceInstance)\n}\n}" }, { "language": "Text", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "geofenceInstance.delegate = self" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.setMode(mode: .circle)" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultSliderForCircle = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultModePanel = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDefaultImage = UIImage(named: \"\")" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDeleteImage = UIImage(named: \"\")" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.circlefillColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.circleStrokeColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.polygonFillColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.polygonStrokeColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.toolTipBackgroundColor = .blue" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.markerFillColor = .blue" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.markerStrokeColor = .blue" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc" } } ``` ## source-reference · MapplsGeofenceUI Plugin for iOS - Identity: `source-reference:mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-geofence-ui-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-geofence-ui-ios-distribution-base", "sourceId": "public-mappls-geofence-ui-ios-distribution-base", "name": "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", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "geofence" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T07:26:09Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Mappls Geofence Plugin SDK provides the functionalities to create a geofence in circle and polygon shape." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Anyone can integrate the Mappls Geofence Plugin by following simple steps.Please note that this Plugin for iOS supports iOS SDK 9.0 and above.", "To integrate Geofence SDK, it is important to pass an object of MapplsMapView which is part of Mappls's MapplsMap SDK." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls keys to use any MAPPL's SDK. Please refer the documentatation here." ] }, { "title": "Step 3 :- Initialization of GeofenceViewUI", "level": 2, "paragraphs": [ "To Initialize, add MapplsGeofenceUI and MapplsMap Framework in your controller File.", "User must implement the MapplsGeofenceViewDelegate protocol class to use delegate methods of MapplsGeofenceView", "Thats All! The plugin is added in your application.", "This highly customizable plugin offers a wide range of properties can be edited based on the requirements of the users. Lets have alook at them." ] }, { "title": "Customizing the Geofence using various properties:", "level": 2, "paragraphs": [ "1. Set Geofence Mode: To set Geofence mode as a circle or a polygon", "2. Show/Hide Default Slider: To show/hide CircleSlider. Defaults to true.", "3. Mode Panel: To show/hide modePanel for Circle and Polygon. Defaults to true.", "4. Polygon Delete Button Image: To change PolygonDelete button default image", "5. Polygon Drag Point To Move DeleteImage: To change polygonDeleteImage while dragging to any point.", "6. Circle Fill Color: To set fill color of circle" ] }, { "title": "Sample App", "level": 1, "paragraphs": [ "In the Sample Version 0.5.0, we have added some more functionalities like:" ] }, { "title": "1. Polygon points Check (Anticlockwise or Clockwise)", "level": 4, "paragraphs": [ "To see if the polygon points are drawn clockwise or antoclockwise, draw polygon points in sampleApp. We have one button that shows direction in top right corner of custom geofence class." ] }, { "title": "2. Draw Geofence Shape View", "level": 4, "paragraphs": [ "To view your geofence created shape by clicking on Apply button(In customGeofenceVC Class). When the user clicks on Apply button, it will navigate to related list in class(DrawCircleVC)." ] }, { "title": "3. Edit Geofence Shape", "level": 4, "paragraphs": [ "In Class (DrawCircle) we are showing one option to edit on click. It will navigate to the related geofence screen with current shape, here, user can modified it.", "After clicking Apply button, it will reflect in (DrawCircleVCClass)." ] }, { "title": "4. Delete Geofence Shape", "level": 4, "paragraphs": [ "We have provided a delete button in (rawCircleVC Class). Clicking on this, will delete the current shape in the list." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "import MapplsMap\nimport MapplsGeofenceUI\nvar geofenceView: MapplsGeofenceView!\n override func viewDidLoad() {\n super.viewDidLoad()\n // If you're on a background thread and want to execute code on the main thread, you need to call async()\n DispatchQueue.main.async {\nlet geofenceInstance: MapplsGeofenceView = {\ngeofenceView = MapplsGeofenceView.init(geofenceframe: self.view.bounds)\ngeofenceView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n return geofenceView\n}()\ngeofenceInstance.delegate = self\nself.view.addSubview(geofenceInstance)\n}\n}" }, { "language": "Text", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "geofenceInstance.delegate = self" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.setMode(mode: .circle)" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultSliderForCircle = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultModePanel = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDefaultImage = UIImage(named: \"\")" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDeleteImage = UIImage(named: \"\")" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.circlefillColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.circleStrokeColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.polygonFillColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.polygonStrokeColor = .red" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.toolTipBackgroundColor = .blue" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.markerFillColor = .blue" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.markerStrokeColor = .blue" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 18, "codeSampleCount": 14, "fingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc" } } ``` ## source-reference · Mappls Insight Embeddable Visualizations - Identity: `source-reference:mappls-insight-sdk` - Canonical: https://developer.mappls.com/reference/mappls-insight-sdk - State model: stateless ```json { "slug": "mappls-insight-sdk", "sourceId": "public-mappls-insight-sdk", "name": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations", "summary": "Mappls advanced analytics engine: Insight transforms raw data into impactful visualizations and interactive dashboards, easily shared and embedded.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "gis-analytics", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "Web" ], "authSignals": [ "oauth2" ], "languages": [ "HTML" ], "repositoryUrl": "https://github.com/mappls-api/mappls-insight-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-insight-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-insight-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2024-05-03T10:20:13Z", "localCandidates": [], "prerequisites": [ "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "Mappls Insight Embeddable Visualizations", "level": 1, "paragraphs": [ "Your ultimate geospatially enabled Business Intelligence Solution.", "Insight empowers decision-making with actionable data streamlining operations and fueling growth." ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "Unleash the power of your data With Insight, unleash your data's full potential. Our intuitive interface seamlessly connects to diverse data sources, including databases, spreadsheets, and the cloud. Our advanced analytics engine then transforms raw data into impactful visualizations and interactive dashboards, easily shared and embedded." ] }, { "title": "Note", "level": 4, "paragraphs": [ "These visuals are access controlled and a paid service." ] }, { "title": "Getting Access", "level": 2, "paragraphs": [ "Before using our SDKs or APIs in your solution, please ensure that the related access is enabled in the Mappls API Console.", "Mappls SDKs & APIs follow OAuth2 based security. Access Tokens can be generated using Token Generation API. To know more on how to create your access tokens, please use our authorization API URL. More details available here. The access token is valid by default for 24 hours from the time of generation. This can be configured by you in the API console." ] }, { "title": "Step 1: Connect to the Data source", "level": 3, "paragraphs": [ "In Insight, users can seamlessly access diverse data sources, ranging from APIs and PostgreSQL databases to mGlS and Excel/CSV files. This extensive array of options empowers users to integrate and analyze data from various sources within a unified platform, facilitating comprehensive insights and informed decision-making." ] }, { "title": "Step 2: Create Reusable Widgets", "level": 3, "paragraphs": [ "Users can create reusable widgets in Insight, streamlining data visualization and dashboard customization. Easily configure and save widgets for future use, ensuring consistency across multiple dashboards. Select data sources, choose from a wide range of widgets, and quickly build insightful displays tailored to specific needs." ] }, { "title": "Step 3: Collate Widgets and create Shareable Dashboards", "level": 3, "paragraphs": [ "After creating widgets, users can add, resize, and arrange them on the dashboard as desired. They can configure filters and control fields to refine the displayed data. Dashboards can also be set to refresh at specified intervals to stay updated with data changes." ] }, { "title": "Step 4: Share the dashboard by creating an embeddable link", "level": 3, "paragraphs": [ "Easily preview and share the dashboards using a URL, which can be embedded into your existing applications." ] }, { "title": "Getting Access", "level": 2, "paragraphs": [ "Before using our SDKs or API in your solution, please ensure that the related access is enabled in the Mappls API Console.", "Mappls SDKs & APIs follow OAuth2 based security. Access Tokens can be generated using Token Generation API. To know more on how to create your access tokens, please use our authorization API URL. More details available here. The access token is valid by default for 24 hours from the time of generation. This can be configured by you in the API console." ] }, { "title": "Sample Output", "level": 4, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2024 CE Info Systems Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "HTML", "label": "Sample code for Insight Dashboard", "code": "\n\n\n\n\n

Insight Iframes

\n

You can use the iframe to embed your created dashboards:

\n\n \n\n\n\n" } ], "endpointEvidence": [ "https://about.mappls.com/api/", "https://apis.mappls.com/console).", "https://developer.mappls.com/mapping/tokenGeneration).", "https://insight.mappls.com/insight-public/app/dashboard/1acd40ddac8028f81c9fb4f2dfb3976](https://insight.mappls.com/insight-public/app/dashboard/1acd40ddac8028f81c9fb4f2dfb3976", "https://insight.mappls.com/insight-public/app/dashboard/1acd40ddac8028f81c9fb4f2dfb3976", "https://about.mappls.com/contact/", "https://forum.mappls.com/)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 20, "codeSampleCount": 1, "fingerprint": "0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898" } } ``` ## source-reference · Mappls Intouch Android SDK - Identity: `source-reference:mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-intouch-android-sdk - State model: stateful ```json { "slug": "mappls-intouch-android-sdk", "sourceId": "public-mappls-intouch-android-sdk", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android" ], "authSignals": [ "oauth2", "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-05-18T07:43:00Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-android-sdk" ], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Mappls Intouch Android SDK", "level": 1, "paragraphs": [ "Get Real-Time Location Tracking for your apps with Mappls InTouch SDK. Track a user's live location with our simplified InTouch SDK integration (for Android), highly customizable to your specific needs.", "The InTouch SDK comes with a variety of events that enable better control and power over your tracking needs. Get ready made events to create,, Geo-Fences, Event Alerts, and Trails of telematics/ phone devices. Also get location benefits built for various applications including logistics, delivery tracking, employee tracking, and live location sharing.", "To get started, explore the InTouch Demo App.", "Already have an application? Give it a boost with the powerful features of InTouch. Learn how to Integrate the InTouch SDK", "• Setup: Please contact apisupport@mappls.com to get the Intouch SDK authorisation for your Client ID and Client Secret. - Quick Start: Start with a ready-to-go app - Integrate the SDK: Integrate the SDK into your app - Dashboard: See all your devices' locations on Mappls InTouch Dashboard - InTouch Telematics APIs: Use InTouch APIs to get the details of the devices." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• InTouch Android SDK", "• Add your API keys to the SDK", "• Add a Mappls InTouch Sdk to your application", "• Intouch Telematics API's Device Details Event's Data Drive's Data GeoFences Alarms Trips - Tracking Error - Utility Methods - InTouch Constants - Mappls BLE Plugin - Road Detail Event", "For any queries and support, please contact:", "Email us at apisupport@mappls.com" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mappls-intouch-android-sdk#intouchdemo-app):", "https://github.com/mdakram", "https://github.com/saksham66", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 20, "codeSampleCount": 0, "fingerprint": "47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4" } } ``` ## source-reference · Mappls Intouch IOS Distribution - Identity: `source-reference:mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-intouch-ios-distribution - State model: stateful ```json { "slug": "mappls-intouch-ios-distribution", "sourceId": "public-mappls-intouch-ios-distribution", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution", "sourceDocumentUrl": null, "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-05-20T06:43:25Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-ios-sdk" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [], "snippets": [], "endpointEvidence": [], "coverage": { "sourceDocumentAvailable": false, "readmeAvailable": false, "headingCount": 0, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c" } } ``` ## source-reference · Mappls Intouch IOS Distribution Base - Identity: `source-reference:mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-intouch-ios-distribution-base - State model: stateful ```json { "slug": "mappls-intouch-ios-distribution-base", "sourceId": "public-mappls-intouch-ios-distribution-base", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution-base", "sourceDocumentUrl": null, "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-08-12T11:38:55Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [], "snippets": [], "endpointEvidence": [], "coverage": { "sourceDocumentAvailable": false, "readmeAvailable": false, "headingCount": 0, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" } } ``` ## source-reference · [Mappls Intouch SDK]() - Identity: `source-reference:mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/reference/mappls-intouch-ios-sdk - State model: stateful ```json { "slug": "mappls-intouch-ios-sdk", "sourceId": "public-mappls-intouch-ios-sdk", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "capture-feedback" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-23T13:28:47Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-ios-sdk" ], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Mappls Intouch will enable the live tracking functionality in your mobile app and allows you to get the powerful features from Intouch IoT platform for your telematics devices. Inotuch SDK for iOS lets you easily add Mappls Telematics cloud services to your own iOS application.", "Using this SDK, Your app shall fetch the live location from the end user mobile phone at the predefined condition, It could be based on the movement of the user, or fixed time interval or the combination of both. You can customize the data polling conditions. Along with that you can get the details about your other telematics device live locaion and analytics around that.", "You will get seemless location benifits which caterted to different domains like logistics, delivery tracking , Employee tracking , live location sharing etc.", "To get started, explore the InTouch Demo App.", "• Setup: Please contact apisupport@mappls.com to get the Intouch SDK authorisation for your Client ID and Client Secret. - Quick Start: Start with a ready-to-go app - Integrate the SDK: Integrate the SDK into your app - Dashboard See all your devices' locations on Mappls Intouch Dashboard", "Run pod repo update && pod install and open the resulting Xcode workspace." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Mappls Intoch Core[](#Mappls-Intouch-Core) Getting Started Installation Initialization Configuarions", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mappls.com/api", "https://github.com/mappls-api/mappls-intouch-ios-sdk/blob/main/readme.md):", "https://intouch.mappls.com/nextgen/#/home/dashboard", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 18, "codeSampleCount": 0, "fingerprint": "d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0" } } ``` ## source-reference · Mappls Intouch REST Apis - Identity: `source-reference:mappls-intouch-rest-apis` - Canonical: https://developer.mappls.com/reference/mappls-intouch-rest-apis - State model: stateful ```json { "slug": "mappls-intouch-rest-apis", "sourceId": "public-mappls-intouch-rest-apis", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "REST" ], "authSignals": [ "oauth2" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-intouch-rest-apis", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-intouch-rest-apis/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-rest-apis/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-30T05:37:38Z", "localCandidates": [ "contenthub/dochub/mapmyindia-intouch-rest-apis" ], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project" ], "sections": [ { "title": "Prerequisites for Using InTouch APIs", "level": 1, "paragraphs": [ "Before consuming the InTouch APIs, ensure the following prerequisites are met:" ] }, { "title": "Mappls Console Login", "level": 3, "paragraphs": [ "Developers must log in to the Mappls Console to manage subscriptions and API access. - If the developer already has a registered email ID, they can directly log in to the Mappls Console. - From the console, developers can click the subscribe to InTouch button from the credentials tab inside the Project." ] }, { "title": "Client Credentials (CI & CS)", "level": 3, "paragraphs": [ "After subscribing to InTouch, developers get access to the InTouch APIs and can be accessed using: - Client ID (CI) - Client Secret (CS)", "These credentials are mandatory for authenticating and accessing the InTouch APIs. They also provide access to the default enabled APIs." ] }, { "title": "API Access Mapping", "level": 3, "paragraphs": [ "• Each Client ID and Client Secret is mapped to a specific project and can only consume APIs associated with that project. - API requests will be rejected if the requested endpoint is not enabled for the associated CI/CS. - Ensure all required APIs are properly mapped before starting integration." ] }, { "title": "API Usage Limits", "level": 3, "paragraphs": [ "• Some APIs come with default hit limits, which define how many times an API can be accessed within a given period." ] }, { "title": "Credential Issuance & Validation", "level": 3, "paragraphs": [ "Asset allocation, limit enhancement, and default access–related concerns are managed by the API team. For requesting, validating, or resolving issues related to CI/CS, please contact. apisupport@mapmyindia.com or apisupport@mappls.com" ] }, { "title": "Authentication Token Generation", "level": 3, "paragraphs": [ "• InTouch APIs use Bearer Token–based authentication. - developers must generate a valid Bearer Token using their Client ID and Client Secret through the authentication endpoint by invoking the Token Generation API. - Tokens are time-bound (24 hours) and must be regenerated upon expiration." ] }, { "title": "InTouch Fleet Management APIs", "level": 1, "paragraphs": [ "This repository contains documentation for Intouch APIs, designed to streamline and optimize fleet management operations. With a focus on real-time tracking, reporting, and performance optimization, these APIs help businesses simplify logistics operations. They integrate critical data such as trip details, device statuses, alarms, historical events, device drive details, device groups, routes and route assignments, geofences, video telematics, charging events, and push event notifications, enabling seamless communication and better decision-making.", "By leveraging Intouch APIs, companies can automate complex workflows, improve operational efficiency, and gain valuable insights for proactive fleet management. Whether it is monitoring charging events, receiving push-based event notifications, or tracking driver behavior, these APIs provide a comprehensive solution for managing and monitoring fleets efficiently." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Intouch Alarms APIs - Intouch Charging Events APIs - Intouch Devices APIs - Intouch Drive APIs - Intouch Entities Group APIs - Intouch Events APIs - Intouch Geofence APIs - Intouch Route APIs - Intouch Trip APIs - Intouch Video Telematics APIs - Push Event API", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://about.mappls.com/api/", "https://apis.mappls.com/console).", "https://apis.mappls.com/console/#/freetrial-signup", "https://github.com/mappls-api/mappls-rest-apis/tree/auth-legacy/mappls-token-generation-api).", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 9, "endpointCount": 20, "codeSampleCount": 0, "fingerprint": "06df37d758e9eed1e65f69df10a6cf82963da86e6d1417f56a2ffa7c7d8408c4" } } ``` ## source-reference · Mappls iOS SDK - Identity: `source-reference:mappls-ios-sdk` - Canonical: https://developer.mappls.com/reference/mappls-ios-sdk - State model: stateless ```json { "slug": "mappls-ios-sdk", "sourceId": "public-mappls-ios-sdk", "name": "mappls-ios-sdk", "title": "Mappls iOS SDK", "summary": "A collection of Mappls's Map and others SDKs for Native iOS Development.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "static-key-2025", "oauth2" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-ios-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-ios-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-ios-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T08:39:20Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch." ] }, { "title": "Mappls iOS SDK", "level": 1, "paragraphs": [ "Explore the largest directory of APIs & SDKs for maps, routes and search.", "MAPPLS will be there in every step of the way, building new tools that help you navigate, explore and get things done, wherever you are and users can touch or interact with map features clearly overlaid on your view of the world.", "Our APIs, SDKs, and live updating map data available for 200+ nations and territories give developer-friendly, easy-to-integrate plugins to add capabilities like intelligent search and routes on map, to your web or mobile applications." ] }, { "title": "Authentication", "level": 2, "paragraphs": [ "To initialize and authenticate any Mappls SDK , you must include i.conf and i.olf files in your project bundle:", "You can download the required files from the Auth Console" ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Mappls API Core[](#Mappls-API-Core)", "• Mappls API Kit Autosuggest API Reverse Geocode API Nearby API Place Detail Geocode API Routing API Driving Distance - Time Matrix API POI Along The Route Nearby Reports API Current Weather Condition API Trip Cost Estimation API DIGIPIN", "• Set Country Regions - Country List", "• Mappls Map Getting Started with Mappls Map Setup your Project Usage Add a Mappls Map View SwiftUI Map Interactions Map Features Map Events Map Overlays Polylines Polygons Map Camera Heat Map Miscellaneous Cluster Based Authentication", "• SDK All Methods List", "• Mappls Pin Strategy - Mappls Map" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-ios-sdk/tree/main", "https://github.com/mappls-api/mappls-ios-sdk/tree/auth-legacy", "https://www.mapmyindia.com/api", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS", "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 6, "endpointCount": 22, "codeSampleCount": 0, "fingerprint": "3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce" } } ``` ## source-reference · Mappls LMS IOS Distribution - Identity: `source-reference:mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-lms-ios-distribution - State model: stateless ```json { "slug": "mappls-lms-ios-distribution", "sourceId": "public-mappls-lms-ios-distribution", "name": "mappls-lms-ios-distribution", "title": "Mappls LMS IOS Distribution", "summary": "A versioned iOS distribution package used to integrate Mappls capabilities into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "other" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution/blob/main/Package.swift", "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2026-08-05T12:18:11Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Overview", "level": 1, "paragraphs": [ "// swift-tools-version:5.3 import PackageDescription", "let package = Package( name: \"MapplsLMS\", platforms: [ .iOS(.v13) ], products: [ .library( name: \"MapplsLMS\", targets: [\"MapplsLMSWrapper\"]) ], dependencies: [ .package(url: \"https://github.com/mappls-api/mappls-api-core-ios-distribution.git\", from: \"2.1.3\") ], targets: [ .binaryTarget( name: \"MapplsLMS\", url: \"https://mmi-api-team.s3.amazonaws.com/mappls-sdk-ios/mappls-lms/MapplsLMS.xcframework-2.0.4.zip\", checksum: \"c0ef03ed4fbc2316822139193902a301e4927b3aa27af2c6e46a661a5564fcef\" ), .target( name: \"MapplsLMSWrapper\", dependencies: [ \"MapplsLMS\", .product(name: \"MapplsAPICore\", package: \"mappls-api-core-ios-distribution\") ] ), ] )" ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-api-core-ios-distribution.git", "https://mmi-api-team.s3.amazonaws.com/mappls-sdk-ios/mappls-lms/MapplsLMS.xcframework-2.0.4.zip" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": false, "headingCount": 0, "endpointCount": 2, "codeSampleCount": 0, "fingerprint": "a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9" } } ``` ## source-reference · Mappls LMS IOS Distribution Base - Identity: `source-reference:mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-lms-ios-distribution-base - State model: stateless ```json { "slug": "mappls-lms-ios-distribution-base", "sourceId": "public-mappls-lms-ios-distribution-base", "name": "mappls-lms-ios-distribution-base", "title": "Mappls LMS IOS Distribution Base", "summary": "A versioned iOS distribution package used to integrate Mappls capabilities into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "other" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base/blob/main/Package.swift", "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2026-08-05T12:16:54Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Overview", "level": 1, "paragraphs": [ "// swift-tools-version:5.3 import PackageDescription", "let package = Package( name: \"MapplsLMS\", platforms: [ .iOS(.v13) ], products: [ .library( name: \"MapplsLMS\", targets: [\"MapplsLMS\"]) ], dependencies: [", "], targets: [ .binaryTarget( name: \"MapplsLMS\", url: \"https://mmi-api-team.s3.amazonaws.com/mappls-sdk-ios/mappls-lms/MapplsLMS.xcframework-2.0.4.zip\", checksum: \"c0ef03ed4fbc2316822139193902a301e4927b3aa27af2c6e46a661a5564fcef\" ) ] )" ] } ], "snippets": [], "endpointEvidence": [ "https://mmi-api-team.s3.amazonaws.com/mappls-sdk-ios/mappls-lms/MapplsLMS.xcframework-2.0.4.zip" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": false, "headingCount": 0, "endpointCount": 1, "codeSampleCount": 0, "fingerprint": "c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9" } } ``` ## source-reference · Mappls Location Capture SDK - Identity: `source-reference:mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-location-capture-android-sdk - State model: hybrid ```json { "slug": "mappls-location-capture-android-sdk", "sourceId": "public-mappls-location-capture-android-sdk", "name": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK", "summary": "A lightweight, on-demand location capture SDK for Android that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage. The SDK supports single-shot and subscribed location fetching without continuous tracking.", "kind": "SDK", "maturity": "current", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "location-capture" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android" ], "authSignals": [], "languages": [ "Kotlin", "Groovy", "Java" ], "repositoryUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-12-17T11:23:24Z", "localCandidates": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain" ], "sections": [ { "title": "Getting started", "level": 2, "paragraphs": [ "A lightweight, on-demand location capture SDK for Android that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage. The SDK supports single-shot and subscribed location fetching without continuous tracking." ] }, { "title": "Key Capabilities", "level": 3, "paragraphs": [ "• One-time location capture with accuracy threshold", "• Subscribed mode until accuracy or timeout is reached", "• Automatic termination (no background tracking)", "• Accuracy, timeout, and retry limits", "• Mock location detection", "• Network and GPS state awareness" ] }, { "title": "Add Mappls Repository", "level": 2, "paragraphs": [ "• Add the Mappls repository to your settings.gradle or settings.gradle.kts file:" ] }, { "title": "Adding Mappls Configuration file", "level": 2, "paragraphs": [ "• Download Configuration files for your app (associated with Package Name and Signing Certificate SHA-256 ) - Add Configuration files ( .a.olf and .a.conf) into the module app-level root directory of your app - Add Mappls Service Plugin as a dependency in your project level build.gradle or build.gradle.kts" ] }, { "title": "Groovy (build.gradle)", "level": 4, "paragraphs": [ "• Add Mappls Services Plugin in your app-level build.gradle or build.gradle.kts file" ] }, { "title": "Add the dependency", "level": 3, "paragraphs": [ "• Add below dependency in your app-level build.gradle" ] }, { "title": "Initialization (Required)", "level": 2, "paragraphs": [ "Initialization must be completed before invoking any location fetch method.", "• What happens during initialization", "• Location permissions validation", "• Configuration setup (accuracy, timeout, attempts)", "• Location engine configuration", "• SDK readiness check" ] }, { "title": "Kotlin", "level": 4, "paragraphs": [ "kotlin val mapplsLocationEngineRequest = MapplsLocationEngineRequest.Builder(5000L) .setDisplacement(0f) .setPriority(PRIORITYHIGHACCURACY) .build()", "val option = LocationCaptureConfig.Builder() .setMapplsLocationEngineRequest(mapplsLocationEngineRequest) .setTimeoutValueInSecond(60) .setAccuracy(15.0) .setNumberOfAttempts(5) .build()", "LocationServiceProviderManager.getInstance().initialise(this, object : OnLocationPluginInitialise { public override fun onSuccess() { LocationServiceProviderManager.getInstance().setLocationCaptureConfig(option) }", "public override fun onFailure(code: Int, reason: String) {" ] }, { "title": "Java", "level": 4, "paragraphs": [ "java MapplsLocationEngineRequest mapplsLocationEngineRequest = new MapplsLocationEngineRequest.Builder(5000L) .setDisplacement(0f) .setPriority(PRIORITYHIGHACCURACY) .build();", "LocationCaptureConfig option = new LocationCaptureConfig.Builder() .setMapplsLocationEngineRequest(mapplsLocationEngineRequest) .setTimeoutValueInSecond(60) .setAccuracy(15.0) .setNumberOfAttempts(5) .build(); LocationServiceProviderManager.getInstance().initialise(this, new OnLocationPluginInitialise() { @Override public void onSuccess() { LocationServiceProviderManager.getInstance().setLocationCaptureConfig(option); }", "@Override public void onFailure(int code, String reason) {" ] }, { "title": "LocationCaptureConfig", "level": 4, "paragraphs": [ "| Parameter | Description | Default | | Interval | Preferred location update interval | 5 seconds | | Accuracy | Minimum acceptable accuracy (meters) | 15m | | Timeout | Maximum time SDK attempts location fetch | 60 seconds | | NumberofAttempts | Maximum location packets | 5 |" ] }, { "title": "MapplsLocationEngineRequest", "level": 4, "paragraphs": [ "| Parameter | Description | Default | | Priority | Location priority mode | HIGHACCURACY | | Displacement | Minimum movement required | 0 meters |", "The SDK automatically stops once accuracy OR timeout/attempt limit is reached." ] }, { "title": "1. Single-Shot Location Fetch", "level": 3, "paragraphs": [ "Fetches one valid location snapshot and terminates automatically." ] }, { "title": "Kotlin", "level": 4, "paragraphs": [ "kotlin LocationServiceProviderManager.getInstance() .getOneTimeLocation(object : MapplsLocationListener { override fun onLocation(mapplsLocationData: MapplsLocationData) { val log = \"MapplsLocationData{\" + \"lat=\" + mapplsLocationData.getLocation().getLatitude() + \", lng=\" + mapplsLocationData.getLocation().getLongitude() + \", accuracy=\" + mapplsLocationData.getLocation().getAccuracy() + \", provider=\" + mapplsLocationData.getLocation().getProvider() + \", time=\" + mapplsLocationData.getLocation().getTime() + \", isAcceptable=\" + mapplsLocationData.isAcceptable() + \", isMockLocation=\" + mapplsLocationData.isMockLocation() + \"}\" Log.d(\"location\", log) }", "override fun onError(code: Int, reason: String) { Toast.makeText(this@MainActivity, reason.toString(), Toast.LENGTHSHORT).show() } })" ] }, { "title": "2. Subscribed Location Fetch (Limited)", "level": 3, "paragraphs": [ "Continuously receives location updates until accuracy or timeout is met, then auto-unsubscribes." ] }, { "title": "Output Details", "level": 2, "paragraphs": [ "Each successful callback provides:", "• Latitude & Longitude - Accuracy (meters) - Timestamp - Provider / mode - Mock location flag - Acceptable accuracy flag" ] }, { "title": "During Initialization", "level": 3, "paragraphs": [ "| Error Code | Message | Description | | 10 | UnknownHostException | Returned when there is no internet connectivity during SDK initialization | | 11 | Exception message | Returned for any unexpected exception during the initialization API call |" ] }, { "title": "During Function Calls", "level": 3, "paragraphs": [ "| Error Code | Message | Description | | 12 | LocationPlugin not initialized properly | Function invoked before SDK initialization or before onSuccess() callback | | 13 | Missing location permission | Required location permission not granted by the user | | 14 | GPS is not enabled | Device GPS / location service is disabled |", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [ { "language": "Kotlin", "label": "Kotlin (settings.gradle.kts)", "code": "pluginManagement {\n repositories {\n maven(url = \"https://maven.mappls.com/repository/mappls/\")\n }\n }\n dependencyResolutionManagement {\n repositories {\n google()\n mavenCentral()\n maven(url = \"https://maven.mappls.com/repository/mappls/\")\n }\n }" }, { "language": "Groovy", "label": "Groovy (settings.gradle)", "code": "pluginManagement {\n repositories {\n maven {\n url 'https://maven.mappls.com/repository/mappls/'\n }\n }\n }\n dependencyResolutionManagement { \n repositories { \n google() \n mavenCentral() \n maven { \n url 'https://maven.mappls.com/repository/mappls/' \n } \n } \n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "buildscript {\n dependencies {\n classpath(\"com.mappls.services:mappls-services:1.0.0\")\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n }" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "buildscript {\n dependencies {\n classpath 'com.mappls.services:mappls-services:1.0.0'\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "plugins {\n id(\"com.android.application\")\n // Add the Mappls services Gradle plugin \n id(\"com.mappls.services.android\")\n }" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "plugins {\n id 'com.android.application'\n // Add the Mappls services Gradle plugin\n id 'com.mappls.services.android'\n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "implementation(\"com.mappls.sdk:location-capture-sdk:1.0.0\")" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "implementation 'com.mappls.sdk:location-capture-sdk:1.0.0'" }, { "language": "Java", "label": "Java", "code": "LocationServiceProviderManager.getInstance().getOneTimeLocation(new MapplsLocationListener() {\n @Override\n public void onLocation(MapplsLocationData mapplsLocationData) {\n \n \n }\n\n @Override\n public void onError(int code, String reason) {\n Toast.makeText(MainActivity.this, reason.toString(), Toast.LENGTH_SHORT).show();\n }\n });" }, { "language": "Kotlin", "label": "2. Subscribed Location Fetch (Limited)", "code": "LocationServiceProviderManager.getInstance()\n .subscribeLocationUpdate(object : MapplsLocationListener {\n override fun onLocation(mapplsLocationData: MapplsLocationData) {\n val log = \"MapplsLocationData{\" +\n \"lat=\" + mapplsLocationData.getLocation().getLatitude() +\n \", lng=\" + mapplsLocationData.getLocation().getLongitude() +\n \", accuracy=\" + mapplsLocationData.getLocation().getAccuracy() +\n \", provider=\" + mapplsLocationData.getLocation().getProvider() +\n \", time=\" + mapplsLocationData.getLocation().getTime() +\n \", isAcceptable=\" + mapplsLocationData.isAcceptable() +\n \", isMockLocation=\" + mapplsLocationData.isMockLocation() +\n \"}\"\n Log.d(\"location\", log)\n }\n\n override fun onError(code: Int, reason: String) {\n Toast.makeText(this@MainActivity, reason.toString(), Toast.LENGTH_SHORT).show()\n }\n })" }, { "language": "Java", "label": "Java", "code": "LocationServiceProviderManager.getInstance().subscribeLocationUpdate(new MapplsLocationListener() {\n @Override\n public void onLocation(MapplsLocationData mapplsLocationData) {\n String log = \"MapplsLocationData{\" +\n \"lat=\" + mapplsLocationData.getLocation().getLatitude() +\n \", lng=\" + mapplsLocationData.getLocation().getLongitude() +\n \", accuracy=\" + mapplsLocationData.getLocation().getAccuracy() +\n \", provider=\" + mapplsLocationData.getLocation().getProvider() +\n \", time=\" + mapplsLocationData.getLocation().getTime() +\n \", isAcceptable=\" + mapplsLocationData.isAcceptable() +\n \", isMockLocation=\" + mapplsLocationData.isMockLocation() +\n \"}\";\n Log.d(\"location\",log);\n \n }\n\n @Override\n public void onError(int code, String reason) {\n Toast.makeText(MainActivity.this, reason.toString(), Toast.LENGTH_SHORT).show();\n }\n });" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://maven.mappls.com/repository/mappls/", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 26, "endpointCount": 18, "codeSampleCount": 11, "fingerprint": "b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7" } } ``` ## source-reference · Mappls Location Capture IOS SDK - Identity: `source-reference:mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/reference/mappls-location-capture-ios-sdk - State model: hybrid ```json { "slug": "mappls-location-capture-ios-sdk", "sourceId": "public-mappls-location-capture-ios-sdk", "name": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK", "summary": "A Mappls sdk for capture feedback across iOS.", "kind": "SDK", "maturity": "current", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "location-capture" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "capture-feedback" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-location-capture-ios-sdk", "sourceDocumentUrl": null, "readmeUrl": null, "defaultBranch": "main", "pushedAt": "2025-12-19T11:57:47Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release" ], "sections": [], "snippets": [], "endpointEvidence": [], "coverage": { "sourceDocumentAvailable": false, "readmeAvailable": false, "headingCount": 0, "endpointCount": 0, "codeSampleCount": 0, "fingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" } } ``` ## source-reference · Mappls Location Capture SDK (iOS) - Identity: `source-reference:mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-location-capture-sdk-ios-distribution - State model: hybrid ```json { "slug": "mappls-location-capture-sdk-ios-distribution", "sourceId": "public-mappls-location-capture-sdk-ios-distribution", "name": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS)", "summary": "A versioned iOS distribution package used to integrate tracking telematics, workforce, capture feedback into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "location-capture" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "XML", "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-02-05T13:00:29Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Getting Started", "level": 2, "paragraphs": [ "A lightweight, on-demand location capture SDK for iOS that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage.", "The SDK supports single-shot and subscribed location fetching without continuous tracking." ] }, { "title": "Key Capabilities", "level": 2, "paragraphs": [ "• One-time location capture with accuracy threshold - Subscribed mode until accuracy or timeout is reached - Automatic termination (no background tracking) - Accuracy, timeout, and retry limits - Mock location detection - Lightweight footprint suitable for KYC, attendance, onboarding, check-ins" ] }, { "title": "Add Mappls SDK (iOS)", "level": 3, "paragraphs": [ "Mappls iOS SDK is distributed via Swift Package Manager (SPM)." ] }, { "title": "Using Swift Package Manager (SPM)", "level": 3, "paragraphs": [ "Open Xcode → File → Add Packages → Enter:", "Select MapplsLocationCapture and add it to your target." ] }, { "title": "Permissions (Required)", "level": 3, "paragraphs": [ "Add the following key to your Info.plist:" ] }, { "title": "Initialization (Required)", "level": 3, "paragraphs": [ "Initialization must be completed before invoking any location fetch method. During initialization, the SDK:", "• Validates location permissions - Fetches server-driven configuration (accuracy, timeout, retry mode) - Performs SDK readiness check - Optionally enables logging" ] }, { "title": "SDK Configuration (Optional)", "level": 3, "paragraphs": [ "After initialization, configuration can be customized if allowed by server policy:" ] }, { "title": "1. Single-Shot Location Fetch", "level": 4, "paragraphs": [ "Fetches one valid location snapshot and terminates automatically." ] }, { "title": "2. Subscribed Location Fetch (Limited)", "level": 4, "paragraphs": [ "Continuously receives location updates until accuracy, timeout, or packet limit is reached. Then auto-unsubscribes." ] }, { "title": "LocationCaptureConfig", "level": 4, "paragraphs": [ "| Parameter | Description | Default | | Interval | Preferred location update interval | 5 seconds | | Accuracy | Minimum acceptable accuracy (meters) | 15m | | Timeout | Maximum time SDK attempts location fetch | 60 seconds | | NumberofAttempts | Maximum location packets | 5 |" ] }, { "title": "MapplsLocationEngineRequest", "level": 4, "paragraphs": [ "| Parameter | Description | Default | | Priority | Location priority mode | HIGHACCURACY | | Displacement | Minimum movement required | 0 meters |", "The SDK automatically stops once accuracy OR timeout/attempt limit is reached." ] }, { "title": "Output Details", "level": 3, "paragraphs": [ "Each successful callback provides:", "• Latitude & Longitude - Accuracy (meters) - Altitude, speed, heading (if available) - Timestamps (generated & received) - Acceptable accuracy flag - Mock location flag" ] }, { "title": "Error Handling", "level": 3, "paragraphs": [ "| Error | Description | | permissionDenied | Location permission denied | | sdkNotInitialized | SDK not initialized | | retryModeNotAllowed | Mode not allowed by server | | maxTimeExceeded | Maximum timeout reached | | maxPacketLimitReached | Packet limit exceeded | | mockLocationDetected | Mock / fake location detected | | network | Network failure | | decoding | API response decoding error |" ] }, { "title": "Notes", "level": 3, "paragraphs": [ "• No background tracking - Location updates stop automatically - Server controls retry mode & overrides - Mock locations are rejected" ] } ], "snippets": [ { "language": "Text", "label": "Using Swift Package Manager (SPM)", "code": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution.git" }, { "language": "XML", "label": "Permissions (Required)", "code": "NSLocationWhenInUseUsageDescription\nLocation is required to capture your current position." }, { "language": "Swift", "label": "Initialization (Required)", "code": "LocationServiceProviderManager.shared.initialize() { result in\n switch result {\n case .success:\n print(\"SDK Initialized successfully\")\n case .failure(let error):\n print(\"Initialization failed:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "SDK Configuration (Optional)", "code": "try LocationServiceProviderManager.shared.configure(\n retryMode: .single, // .single or .subscribe\n timeout: 60, // seconds\n accuracy: 15, // meters\n distance: 0, // meters\n maxPacketSize: 5 // applicable for subscribe mode\n)" }, { "language": "Swift", "label": "1. Single-Shot Location Fetch", "code": "LocationServiceProviderManager.shared.getOneTimeLocation { result in\n switch result {\n case .success(let event):\n print(\"\"\"\n Location:\n lat=\\(event.latitude),\n lng=\\(event.longitude),\n accuracy=\\(event.horizontalAccuracy),\n acceptable=\\(event.isAccpectable),\n mock=\\(event.isMockLocation)\n \"\"\")\n case .failure(let error):\n print(\"Error:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "2. Subscribed Location Fetch (Limited)", "code": "try LocationServiceProviderManager.shared.configure(\n retryMode: .subscribe,\n maxPacketSize: 5\n)\n\nLocationServiceProviderManager.shared.subscribeLocationUpdate { result in\n switch result {\n case .success(let event):\n print(\"Location update:\", event)\n case .failure(let error):\n print(\"Stopped:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "Stop Location Updates", "code": "LocationServiceProviderManager.shared.stopLocation()" }, { "language": "Swift", "label": "Unsubscribe & Reset State", "code": "LocationServiceProviderManager.shared.unsubscribe()" } ], "endpointEvidence": [ "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution.git" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 20, "endpointCount": 1, "codeSampleCount": 8, "fingerprint": "aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9" } } ``` ## source-reference · [Mappls Map SDK]() - Identity: `source-reference:mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-map-ios-distribution - State model: stateless ```json { "slug": "mappls-map-ios-distribution", "sourceId": "public-mappls-map-ios-distribution", "name": "mappls-map-ios-distribution", "title": "[Mappls Map SDK]()", "summary": "Mappls Map Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Text", "Swift", "Objective-C" ], "repositoryUrl": "https://github.com/mappls-api/mappls-map-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-map-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-map-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-02T12:03:35Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "This repository contains a sample project of an app built for iOS, which is based on Mappls's Map and other differennt SDKs.", "Welcome to the Mappls iOS SDK", "Explore the largest directory of APIs & SDKs for maps, routes and search.", "Mappls's APIs, SDKs, and live updating map data available for 238 nations give developers tools to build better mapping, navigation, and search experiences across platforms.", "In this section you will find documentation for :-", "• Detailed information about integration of Vector iOS Map. - REST APIs module is a custom module for developers to consume our RESTful APIs within their applications, easily, and without having to develop such functionality from scratch. - Detailed information related to how to integrate Mappls Widgets." ] }, { "title": "Map SDK", "level": 1, "paragraphs": [ "MapplsMap is a SDK to display map, mark locations, enhance with custom data and even draw routes or other shapes on top." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Mappls's Map SDK for iOS lets you easily add Mappls Map and web services to your own iOS app. Mappls's Map SDK for iOS supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls's Maps app for iOS. The SDK handles map tiles download and their display along with a bunch of controls and native gestures." ] }, { "title": "Create a new project in Xcode.", "level": 4, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore, MapplsAPIKit. All dependent libraries will be automatically.", "• For iOS9 or later, make this change to your info.plist (Project target > info.plist > Add row and set keys NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription, NSLocationAlwaysUsageDescription). As follows", "Message should be appropriate, according to use of your application." ] }, { "title": "MapplsMap", "level": 3, "paragraphs": [ "A class MapplsMapAuthenticator can be used to authorize the Map.", "It is recommended to call this method before initilizing MapplsMapView.", "Note: Although authorization of Map is done internally on initilizing MapplsMapView, Using this in advance will reduce map loading time" ] }, { "title": "Add a Mappls Map View", "level": 2, "paragraphs": [ "Map View on view controller can be added either using interface builder or programmatically." ] }, { "title": "By Interface Builder", "level": 4, "paragraphs": [ "In a storyboard, add a view to your View Controller. In the Identity inspector, change its class to MapplsMapView. Note :- Map style url need to be set at the time of load map" ] }, { "title": "By Programmatically", "level": 4, "paragraphs": [ "To add map on view Controller create an instance of MapplsMapView. and add this to view of ViewController." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "Note Also to handle app transport security exception add NSAppTransportSecurity in Info.plist of your project. As follows:" ] }, { "title": "Set Zoom Level", "level": 3, "paragraphs": [ "Set zoom to 4 for country level display and 18 for house number display." ] }, { "title": "Set Map Center", "level": 3, "paragraphs": [ "To set Center of map reference code is below:" ] }, { "title": "Current Location", "level": 3, "paragraphs": [ "To show user's current location on map, use property .showsUserLocation. and set its value to true." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "To get current location, use property .userLocation. its of type MGLUserLocation which contains location property." ] }, { "title": "Tracking Mode", "level": 3, "paragraphs": [ "To move map with user location change use property userTrackingMode. Its an enum property of type .MGLUserTrackingMode.. You can set any value from following:", "• followWithCourse - followWithHeading - none" ] }, { "title": "Map Events", "level": 2, "paragraphs": [ "The Map object should implement the methods of the MapplsMapViewDelegate protocol corresponding to the events you wish it to receive. This delegate can also be used to detect map overlays selection. Delegate handles gesture events, tap on annotation (marker) and map center coordinates." ] }, { "title": "-authorizationCompleted:withError:", "level": 4, "paragraphs": [ "This delegate function will be called whenever authorization process of map completed. It gives either sucess or error" ] }, { "title": "-mapViewWillStartLoadingMap:", "level": 4, "paragraphs": [ "Tells the delegate that the map view will begin to load.", "This method is called whenever the map view starts loading, including when a new style has been set and the map must reload." ] }, { "title": "-mapViewDidFinishLoadingMap:", "level": 4, "paragraphs": [ "Tells the delegate that the map view has finished loading.", "This method is called whenever the map view finishes loading, either after the initial load or after a style change has forced a reload." ] }, { "title": "-mapViewDidFailLoadingMap:withError:", "level": 4, "paragraphs": [ "Tells the delegate that the map view was unable to load data needed for displaying the map.", "This method may be called for a variety of reasons, including a network connection failure or a failure to fetch the style from the server. You can use the given error message to notify the user that map data is unavailable." ] }, { "title": "-mapViewWillStartRenderingFrame:", "level": 4, "paragraphs": [ "Tells the delegate that the map view is about to redraw.", "This method is called any time the map view needs to redraw due to a change in the viewpoint or style property transition. This method may be called very frequently. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting performance." ] }, { "title": "-mapViewDidFinishRenderingFrame:fullyRendered:", "level": 4, "paragraphs": [ "Tells the delegate that the map view has just redrawn.", "This method is called any time the map view needs to redraw due to a change in the viewpoint or style property transition. This method may be called very frequently. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting performance." ] }, { "title": "-mapViewDidBecomeIdle:", "level": 4, "paragraphs": [ "Tells the delegate that the map view is entering an idle state, and no more drawing will be necessary until new data is loaded or there is some interaction with the map." ] }, { "title": "-mapView:didFinishLoadingStyle:", "level": 4, "paragraphs": [ "Tells the delegate that the map has just finished loading a style.", "This method is called during the initialization of the map view and after any subsequent loading of a new style." ] } ], "snippets": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" }, { "language": "Objectivec", "label": "Objective C", "code": "[mapView setZoom:4];" }, { "language": "Swift", "label": "Swift", "code": "mapView.zoomLevel = 4" }, { "language": "Objectivec", "label": "Objective C", "code": "[self.mapView setCenterCoordinate: CLLocationCoordinate2DMake(28.551438, 77.265119)];" }, { "language": "Swift", "label": "Swift", "code": "mapView.centerCoordinate = CLLocationCoordinate2DMake(28.551438, 77.265119)" }, { "language": "Objectivec", "label": "Objective C", "code": "mapView.showsUserLocation = YES;" }, { "language": "Swift", "label": "Swift", "code": "mapView.showsUserLocation = true" }, { "language": "Swift", "label": "Swift", "code": "let userLocation: CLLocation = mapView.userLocation?.location" }, { "language": "Objectivec", "label": "Objective C", "code": "self.mapView.userTrackingMode = MGLUserTrackingModeFollowWithCourse;" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/Mappls-Safety-Strip).", "https://developer.apple.com/documentation/swiftui/uiviewrepresentable", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 107, "endpointCount": 21, "codeSampleCount": 14, "fingerprint": "fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b" } } ``` ## source-reference · [Mappls Map SDK]() - Identity: `source-reference:mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-map-ios-distribution-base - State model: stateless ```json { "slug": "mappls-map-ios-distribution-base", "sourceId": "public-mappls-map-ios-distribution-base", "name": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK]()", "summary": "Mappls Map Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Text", "Swift", "Objective-C" ], "repositoryUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-02T11:23:55Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "This repository contains a sample project of an app built for iOS, which is based on Mappls's Map and other differennt SDKs.", "Welcome to the Mappls iOS SDK", "Explore the largest directory of APIs & SDKs for maps, routes and search.", "Mappls's APIs, SDKs, and live updating map data available for 238 nations give developers tools to build better mapping, navigation, and search experiences across platforms.", "In this section you will find documentation for :-", "• Detailed information about integration of Vector iOS Map. - REST APIs module is a custom module for developers to consume our RESTful APIs within their applications, easily, and without having to develop such functionality from scratch. - Detailed information related to how to integrate Mappls Widgets." ] }, { "title": "Map SDK", "level": 1, "paragraphs": [ "MapplsMap is a SDK to display map, mark locations, enhance with custom data and even draw routes or other shapes on top." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Mappls's Map SDK for iOS lets you easily add Mappls Map and web services to your own iOS app. Mappls's Map SDK for iOS supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls's Maps app for iOS. The SDK handles map tiles download and their display along with a bunch of controls and native gestures." ] }, { "title": "Create a new project in Xcode.", "level": 4, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore, MapplsAPIKit. All dependent libraries will be automatically.", "• For iOS9 or later, make this change to your info.plist (Project target > info.plist > Add row and set keys NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription, NSLocationAlwaysUsageDescription). As follows", "Message should be appropriate, according to use of your application." ] }, { "title": "MapplsMap", "level": 3, "paragraphs": [ "A class MapplsMapAuthenticator can be used to authorize the Map.", "It is recommended to call this method before initilizing MapplsMapView.", "Note: Although authorization of Map is done internally on initilizing MapplsMapView, Using this in advance will reduce map loading time" ] }, { "title": "Add a Mappls Map View", "level": 2, "paragraphs": [ "Map View on view controller can be added either using interface builder or programmatically." ] }, { "title": "By Interface Builder", "level": 4, "paragraphs": [ "In a storyboard, add a view to your View Controller. In the Identity inspector, change its class to MapplsMapView. Note :- Map style url need to be set at the time of load map" ] }, { "title": "By Programmatically", "level": 4, "paragraphs": [ "To add map on view Controller create an instance of MapplsMapView. and add this to view of ViewController." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "Note Also to handle app transport security exception add NSAppTransportSecurity in Info.plist of your project. As follows:" ] }, { "title": "Set Zoom Level", "level": 3, "paragraphs": [ "Set zoom to 4 for country level display and 18 for house number display." ] }, { "title": "Set Map Center", "level": 3, "paragraphs": [ "To set Center of map reference code is below:" ] }, { "title": "Current Location", "level": 3, "paragraphs": [ "To show user's current location on map, use property .showsUserLocation. and set its value to true." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "To get current location, use property .userLocation. its of type MGLUserLocation which contains location property." ] }, { "title": "Tracking Mode", "level": 3, "paragraphs": [ "To move map with user location change use property userTrackingMode. Its an enum property of type .MGLUserTrackingMode.. You can set any value from following:", "• followWithCourse - followWithHeading - none" ] }, { "title": "Map Events", "level": 2, "paragraphs": [ "The Map object should implement the methods of the MapplsMapViewDelegate protocol corresponding to the events you wish it to receive. This delegate can also be used to detect map overlays selection. Delegate handles gesture events, tap on annotation (marker) and map center coordinates." ] }, { "title": "-authorizationCompleted:withError:", "level": 4, "paragraphs": [ "This delegate function will be called whenever authorization process of map completed. It gives either sucess or error" ] }, { "title": "-mapViewWillStartLoadingMap:", "level": 4, "paragraphs": [ "Tells the delegate that the map view will begin to load.", "This method is called whenever the map view starts loading, including when a new style has been set and the map must reload." ] }, { "title": "-mapViewDidFinishLoadingMap:", "level": 4, "paragraphs": [ "Tells the delegate that the map view has finished loading.", "This method is called whenever the map view finishes loading, either after the initial load or after a style change has forced a reload." ] }, { "title": "-mapViewDidFailLoadingMap:withError:", "level": 4, "paragraphs": [ "Tells the delegate that the map view was unable to load data needed for displaying the map.", "This method may be called for a variety of reasons, including a network connection failure or a failure to fetch the style from the server. You can use the given error message to notify the user that map data is unavailable." ] }, { "title": "-mapViewWillStartRenderingFrame:", "level": 4, "paragraphs": [ "Tells the delegate that the map view is about to redraw.", "This method is called any time the map view needs to redraw due to a change in the viewpoint or style property transition. This method may be called very frequently. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting performance." ] }, { "title": "-mapViewDidFinishRenderingFrame:fullyRendered:", "level": 4, "paragraphs": [ "Tells the delegate that the map view has just redrawn.", "This method is called any time the map view needs to redraw due to a change in the viewpoint or style property transition. This method may be called very frequently. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting performance." ] }, { "title": "-mapViewDidBecomeIdle:", "level": 4, "paragraphs": [ "Tells the delegate that the map view is entering an idle state, and no more drawing will be necessary until new data is loaded or there is some interaction with the map." ] }, { "title": "-mapView:didFinishLoadingStyle:", "level": 4, "paragraphs": [ "Tells the delegate that the map has just finished loading a style.", "This method is called during the initialization of the map view and after any subsequent loading of a new style." ] } ], "snippets": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" }, { "language": "Objectivec", "label": "Objective C", "code": "[mapView setZoom:4];" }, { "language": "Swift", "label": "Swift", "code": "mapView.zoomLevel = 4" }, { "language": "Objectivec", "label": "Objective C", "code": "[self.mapView setCenterCoordinate: CLLocationCoordinate2DMake(28.551438, 77.265119)];" }, { "language": "Swift", "label": "Swift", "code": "mapView.centerCoordinate = CLLocationCoordinate2DMake(28.551438, 77.265119)" }, { "language": "Objectivec", "label": "Objective C", "code": "mapView.showsUserLocation = YES;" }, { "language": "Swift", "label": "Swift", "code": "mapView.showsUserLocation = true" }, { "language": "Swift", "label": "Swift", "code": "let userLocation: CLLocation = mapView.userLocation?.location" }, { "language": "Objectivec", "label": "Objective C", "code": "self.mapView.userTrackingMode = MGLUserTrackingModeFollowWithCourse;" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/Mappls-Safety-Strip).", "https://developer.apple.com/documentation/swiftui/uiviewrepresentable", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 107, "endpointCount": 21, "codeSampleCount": 14, "fingerprint": "c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b" } } ``` ## source-reference · [Mappls Map SDK]() - Identity: `source-reference:mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-map-move-ios-distribution-base - State model: stateless ```json { "slug": "mappls-map-move-ios-distribution-base", "sourceId": "public-mappls-map-move-ios-distribution-base", "name": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK]()", "summary": "mappls-map-move-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "oauth2", "api-key" ], "languages": [ "Text", "Swift", "Objective-C" ], "repositoryUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-01T08:08:30Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "This repository contains a sample project of an app built for iOS, which is based on Mappls's Map and other differennt SDKs.", "Welcome to the Mappls iOS SDK", "Explore the largest directory of APIs & SDKs for maps, routes and search.", "Mappls's APIs, SDKs, and live updating map data available for 238 nations give developers tools to build better mapping, navigation, and search experiences across platforms.", "In this section you will find documentation for :-", "• Detailed information about integration of Vector iOS Map. - REST APIs module is a custom module for developers to consume our RESTful APIs within their applications, easily, and without having to develop such functionality from scratch. - Detailed information related to how to integrate Mappls Widgets." ] }, { "title": "Map SDK", "level": 1, "paragraphs": [ "MapplsMap is a SDK to display map, mark locations, enhance with custom data and even draw routes or other shapes on top." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Mappls's Map SDK for iOS lets you easily add Mappls Map and web services to your own iOS app. Mappls's Map SDK for iOS supports iOS SDK 9.0 and above and Xcode 10.1 or later. You can have a look at the map and features you will get in your own app by using the Mappls's Maps app for iOS. The SDK handles map tiles download and their display along with a bunch of controls and native gestures." ] }, { "title": "Create a new project in Xcode.", "level": 4, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore, MapplsAPIKit. All dependent libraries will be automatically.", "• For iOS9 or later, make this change to your info.plist (Project target > info.plist > Add row and set keys NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription, NSLocationAlwaysUsageDescription). As follows", "Message should be appropriate, according to use of your application." ] }, { "title": "MapplsMap", "level": 3, "paragraphs": [ "A class MapplsMapAuthenticator can be used to authorize the Map.", "It is recommended to call this method before initilizing MapplsMapView.", "Note: Although authorization of Map is done internally on initilizing MapplsMapView, Using this in advance will reduce map loading time" ] }, { "title": "Add a Mappls Map View", "level": 2, "paragraphs": [ "Map View on view controller can be added either using interface builder or programmatically." ] }, { "title": "By Interface Builder", "level": 4, "paragraphs": [ "In a storyboard, add a view to your View Controller. In the Identity inspector, change its class to MapplsMapView. Note :- Map style url need to be set at the time of load map" ] }, { "title": "By Programmatically", "level": 4, "paragraphs": [ "To add map on view Controller create an instance of MapplsMapView. and add this to view of ViewController." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "Note Also to handle app transport security exception add NSAppTransportSecurity in Info.plist of your project. As follows:" ] }, { "title": "Set Zoom Level", "level": 3, "paragraphs": [ "Set zoom to 4 for country level display and 18 for house number display." ] }, { "title": "Set Map Center", "level": 3, "paragraphs": [ "To set Center of map reference code is below:" ] }, { "title": "Current Location", "level": 3, "paragraphs": [ "To show user's current location on map, use property .showsUserLocation. and set its value to true." ] }, { "title": "Swift", "level": 4, "paragraphs": [ "To get current location, use property .userLocation. its of type MGLUserLocation which contains location property." ] }, { "title": "Tracking Mode", "level": 3, "paragraphs": [ "To move map with user location change use property userTrackingMode. Its an enum property of type .MGLUserTrackingMode.. You can set any value from following:", "• followWithCourse - followWithHeading - none" ] }, { "title": "Map Events", "level": 2, "paragraphs": [ "The Map object should implement the methods of the MapplsMapViewDelegate protocol corresponding to the events you wish it to receive. This delegate can also be used to detect map overlays selection. Delegate handles gesture events, tap on annotation (marker) and map center coordinates." ] }, { "title": "-authorizationCompleted:withError:", "level": 4, "paragraphs": [ "This delegate function will be called whenever authorization process of map completed. It gives either sucess or error" ] }, { "title": "-mapViewWillStartLoadingMap:", "level": 4, "paragraphs": [ "Tells the delegate that the map view will begin to load.", "This method is called whenever the map view starts loading, including when a new style has been set and the map must reload." ] }, { "title": "-mapViewDidFinishLoadingMap:", "level": 4, "paragraphs": [ "Tells the delegate that the map view has finished loading.", "This method is called whenever the map view finishes loading, either after the initial load or after a style change has forced a reload." ] }, { "title": "-mapViewDidFailLoadingMap:withError:", "level": 4, "paragraphs": [ "Tells the delegate that the map view was unable to load data needed for displaying the map.", "This method may be called for a variety of reasons, including a network connection failure or a failure to fetch the style from the server. You can use the given error message to notify the user that map data is unavailable." ] }, { "title": "-mapViewWillStartRenderingFrame:", "level": 4, "paragraphs": [ "Tells the delegate that the map view is about to redraw.", "This method is called any time the map view needs to redraw due to a change in the viewpoint or style property transition. This method may be called very frequently. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting performance." ] }, { "title": "-mapViewDidFinishRenderingFrame:fullyRendered:", "level": 4, "paragraphs": [ "Tells the delegate that the map view has just redrawn.", "This method is called any time the map view needs to redraw due to a change in the viewpoint or style property transition. This method may be called very frequently. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting performance." ] }, { "title": "-mapViewDidBecomeIdle:", "level": 4, "paragraphs": [ "Tells the delegate that the map view is entering an idle state, and no more drawing will be necessary until new data is loaded or there is some interaction with the map." ] }, { "title": "-mapView:didFinishLoadingStyle:", "level": 4, "paragraphs": [ "Tells the delegate that the map has just finished loading a style.", "This method is called during the initialization of the map view and after any subsequent loading of a new style." ] } ], "snippets": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" }, { "language": "Objectivec", "label": "Objective C", "code": "[mapView setZoom:4];" }, { "language": "Swift", "label": "Swift", "code": "mapView.zoomLevel = 4" }, { "language": "Objectivec", "label": "Objective C", "code": "[self.mapView setCenterCoordinate: CLLocationCoordinate2DMake(28.551438, 77.265119)];" }, { "language": "Swift", "label": "Swift", "code": "mapView.centerCoordinate = CLLocationCoordinate2DMake(28.551438, 77.265119)" }, { "language": "Objectivec", "label": "Objective C", "code": "mapView.showsUserLocation = YES;" }, { "language": "Swift", "label": "Swift", "code": "mapView.showsUserLocation = true" }, { "language": "Swift", "label": "Swift", "code": "let userLocation: CLLocation = mapView.userLocation?.location" }, { "language": "Objectivec", "label": "Objective C", "code": "self.mapView.userTrackingMode = MGLUserTrackingModeFollowWithCourse;" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/Mappls-Safety-Strip).", "https://developer.apple.com/documentation/swiftui/uiviewrepresentable", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 107, "endpointCount": 21, "codeSampleCount": 14, "fingerprint": "df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e" } } ``` ## source-reference · [Custom Search Nearby Records](Custom-Search-Nearby-Records) - Identity: `source-reference:mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-nearby-finder-ios-distribution - State model: stateless ```json { "slug": "mappls-nearby-finder-ios-distribution", "sourceId": "public-mappls-nearby-finder-ios-distribution", "name": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "summary": "mappls-nearby-finder-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "api-key" ], "languages": [ "Ruby", "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-02-24T12:19:14Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "This is an easy to integrate nearby search by MAPPLS.", "To search the nearby records as per specified record types from the Custom Nearby Record Search database around the provided reference location.", "The plugin will search the results based on Custom Search database wherein the data is managed by you through the use of simple APIs which perform basic CRUD operations that can be performed on database applications: Create (Add Records), Update (Update Records), and Delete(Delete Records).", "The plugin will facilitate you in various ways:", "• Include the Nearby Search method with or without an interactive Map component. - Method to initiate nearby search across all categories of places. - Compatible with our other MAPPLS UI widgets For eg Place Search, place Picker and Directions etc.", "We're helping any website or app developer to easily integrate this information, for the benefit of your users and visitors." ] }, { "title": "Dependencies", "level": 2, "paragraphs": [ "MapplsAPICore and MapplsAPIKit are dependencies which will require to use this SDK." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "This library is available through Swift Package Manager." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "Method can be implemented in simple way.", "Create a MapplsNearbyRecordFinderManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsNearbyRecordFinderManager class." ] }, { "title": "Mandatory Parameters", "level": 3, "paragraphs": [ "1. recordType (String) : The category or class of the record, referenced by a defined set of category codes from client. 2. location (double, double) : Provides the location around which the search will be performed. e.g. location(28.454,77.435)", "The refLocation parameter can also accept mapplsPin as reference location. Example: location(\"1T182A\")" ] }, { "title": "Optional Parameters", "level": 3, "paragraphs": [ "1. radius (Integer) : The radius in meters for radial search. Default radius: 10000 meters. 2. bounds (String)(x1,y1;x2,y2) : Allows the developer to send in map bounds to provide a nearby search of the geobounds. where x1,y1 are the lat lng of the bound. The bounds are set from topLeft to bottomRight (North-West to South-East). Example :28.639256,77.211133;28.625214,77.237483. 3. sortBy (String) : Provides configured sorting operations for the client on cloud. Below are the available sorts: - dist:asc & dist:desc - will sort data in order of distance from the passed location (default). - name:asc & name:desc - will sort the data on alphabetically bases.", "4. filter (String) : This field accepts mapplsPin and restricts the search to the provided administrative area mapplsPin. Example : filter(\"cop:TAVI5S\").", "5. createdTime (Int): This is an epoch value in seconds. All records whose creation time is 'greater than' the provided input time here are responded back in results. Example: createdTime(1628855941) 6. modifiedTime (Int): This is an epoch value in seconds.All records whose modified time is 'greater than' the provided input time here are responded back in results. Example: modifiedTime(1628855941)", "7. itemCount (Int): Number of items per page. Minimum is 1; Default is 10." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "You will find below useful properties in suggestion object :", "• latitude : Latitude of the location. - longitude : Longitude of the location. - distance : Provides the distance from the provided location bias in meters. - recordMapplsPin : Place Id of the location 6-char alphanumeric. - customNote : Any string Type. - createdOn: : This is an epoch value in seconds. All records whose creation time is 'greater than' the provided input time here are responded back in results. Example: createdTime=1628855941. - modifiedOn: This is an epoch value in seconds. All records whose creation time is 'greater than' the provided input time here are responded back in results. Example: modifiedTime=1628855941 - isExpired: false. If set true while adding the record in addRecord api, that particular record will not be searchable. - recordType (String): Type of category used while adding the record. - orderIndex(Int): The order where this result should be placed. - e" ] }, { "title": "Mandatory Parameters", "level": 3, "paragraphs": [ "1. path(String): This parameter takes the encoded route along which records have to be searched. 2. recordType(String): The category or class of the record, referenced by a defined set of category codes from client." ] }, { "title": "Optional Parameters", "level": 3, "paragraphs": [ "1. sort(Bool): Gets the sorted records along route. 2. geometryType(GemoetryType): Type of geometry encoding. Below are the available geometries: - GemoetryType.polyline5 - GemoetryType.polyline6 (Default) - GemoetryType.base64 3. page(Int): Used for pagination. By default, a request returns maximum 10 results and to get the next 10 or so on pass the page value accordingly. Default is 1. 4. buffer(Int): Buffer of the road. Minimum value is 25, maximum is 1000 and default is 25." ] }, { "title": "Response Parameter", "level": 3, "paragraphs": [ "1. responseCode(Int) 2. pageInfo(MapplsNearbyFinderAlongTheRouteResponsePageInfo) 3. suggestedPOIs([MapplsNearbyFinderAlongTheRouteResponseData])" ] }, { "title": "MapplsNearbyFinderAlongTheRouteResponseData", "level": 4, "paragraphs": [ "1. distance(Int) 2. customNote(String) 3. createdOn(Int) 4. recordType(String) 5. modifiedOn(String) 6. latitude(Double) 7. longitude(Double) 8. address(String) 9. recordId(String) 10. orderIndex(Int) 11. extendedInfo([String: String])" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Ruby", "label": "Installation", "code": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git" }, { "language": "Swift", "label": "Usage", "code": "let locations = CLLocation(latitude: 28.00, longitude: 77.98)\nlet nearbyFinderSearchOptions = MapplsNearbyFinderOptions(recordType: \"\", refLocation: locations)\nlet nearbyFinderSearchManager = MapplsNearbyRecordFinderManager.shared\nnearbyFinderSearchManager.getSearchResults(nearbyFinderSearchOptions) { (response, error) in\n if let error = error {\n print(\"Error\")\n } else if let response = response, let records = response.records {\n print(\"Resonse: \\(records)\")\n } else {\n self.showAlertController(message: \"No Results\")\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderSortBy = UserDefaultsManager.nearbyFinderSortBy {\n let sortByType = MMISearchByType(nearbyFinderSortBy)\n if sortByType == .importance {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortby(sortBy: .importance)\n } else {\n if let nearbyFinderOrderBy = UserDefaultsManager.nearbyFinderOrderBy {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortByDistanceWithOrder(orderBy: MMISortByOrderType(rawValue: nearbyFinderOrderBy))\n }\n }\n }" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderFilterMapplsPin = UserDefaultsManager.nearbyFinderFilterMapplsPin {\n nearbyFinderSearchOptions.filters = [MapplsNearbyRecordFinderKeyValueFilter(filterKey: \"cop\", filterValues: [nearbyFinderFilterMapplsPin])]\n }" }, { "language": "Swift", "label": "Swift", "code": "let alongTheRouteOption = MapplsNearbyFinderAlongTheRouteOptions(path: routeGeometry, recordType: \"WFHORWFO\")\nalongTheRouteOption.geometryType = .polyline6\nlet _ = MapplsNearbyFinderAlongTheRouteManager.shared.getAlongTheRoute(alongTheRouteOption) { (response, error) in\n if let error = error {\n // Error to be handled. \n } else if response == nil {\n // error\n } else if let response = response {\n // Your Logic ...\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git", "https://github.com/mappls-api/mappls-ios-sdk/blob/main/docs/v2.0.1/MapplsAPICore.md", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 20, "codeSampleCount": 5, "fingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc" } } ``` ## source-reference · [Custom Search Nearby Records](Custom-Search-Nearby-Records) - Identity: `source-reference:mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-nearby-finder-ios-distribution-base - State model: stateless ```json { "slug": "mappls-nearby-finder-ios-distribution-base", "sourceId": "public-mappls-nearby-finder-ios-distribution-base", "name": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "summary": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [ "api-key" ], "languages": [ "Ruby", "Swift" ], "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-02-24T12:25:23Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "This is an easy to integrate nearby search by MAPPLS.", "To search the nearby records as per specified record types from the Custom Nearby Record Search database around the provided reference location.", "The plugin will search the results based on Custom Search database wherein the data is managed by you through the use of simple APIs which perform basic CRUD operations that can be performed on database applications: Create (Add Records), Update (Update Records), and Delete(Delete Records).", "The plugin will facilitate you in various ways:", "• Include the Nearby Search method with or without an interactive Map component. - Method to initiate nearby search across all categories of places. - Compatible with our other MAPPLS UI widgets For eg Place Search, place Picker and Directions etc.", "We're helping any website or app developer to easily integrate this information, for the benefit of your users and visitors." ] }, { "title": "Dependencies", "level": 2, "paragraphs": [ "MapplsAPICore and MapplsAPIKit are dependencies which will require to use this SDK." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "This library is available through Swift Package Manager." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "Usage", "level": 2, "paragraphs": [ "Method can be implemented in simple way.", "Create a MapplsNearbyRecordFinderManager object using your rest key or alternatively, you can place your rest key in the MapplsRestKey key of your application's Info.plist file, then use the shared instance of MapplsNearbyRecordFinderManager class." ] }, { "title": "Mandatory Parameters", "level": 3, "paragraphs": [ "1. recordType (String) : The category or class of the record, referenced by a defined set of category codes from client. 2. location (double, double) : Provides the location around which the search will be performed. e.g. location(28.454,77.435)", "The refLocation parameter can also accept mapplsPin as reference location. Example: location(\"1T182A\")" ] }, { "title": "Optional Parameters", "level": 3, "paragraphs": [ "1. radius (Integer) : The radius in meters for radial search. Default radius: 10000 meters. 2. bounds (String)(x1,y1;x2,y2) : Allows the developer to send in map bounds to provide a nearby search of the geobounds. where x1,y1 are the lat lng of the bound. The bounds are set from topLeft to bottomRight (North-West to South-East). Example :28.639256,77.211133;28.625214,77.237483. 3. sortBy (String) : Provides configured sorting operations for the client on cloud. Below are the available sorts: - dist:asc & dist:desc - will sort data in order of distance from the passed location (default). - name:asc & name:desc - will sort the data on alphabetically bases.", "4. filter (String) : This field accepts mapplsPin and restricts the search to the provided administrative area mapplsPin. Example : filter(\"cop:TAVI5S\").", "5. createdTime (Int): This is an epoch value in seconds. All records whose creation time is 'greater than' the provided input time here are responded back in results. Example: createdTime(1628855941) 6. modifiedTime (Int): This is an epoch value in seconds.All records whose modified time is 'greater than' the provided input time here are responded back in results. Example: modifiedTime(1628855941)", "7. itemCount (Int): Number of items per page. Minimum is 1; Default is 10." ] }, { "title": "Response Parameters", "level": 3, "paragraphs": [ "You will find below useful properties in suggestion object :", "• latitude : Latitude of the location. - longitude : Longitude of the location. - distance : Provides the distance from the provided location bias in meters. - recordMapplsPin : Place Id of the location 6-char alphanumeric. - customNote : Any string Type. - createdOn: : This is an epoch value in seconds. All records whose creation time is 'greater than' the provided input time here are responded back in results. Example: createdTime=1628855941. - modifiedOn: This is an epoch value in seconds. All records whose creation time is 'greater than' the provided input time here are responded back in results. Example: modifiedTime=1628855941 - isExpired: false. If set true while adding the record in addRecord api, that particular record will not be searchable. - recordType (String): Type of category used while adding the record. - orderIndex(Int): The order where this result should be placed. - e" ] }, { "title": "Mandatory Parameters", "level": 3, "paragraphs": [ "1. path(String): This parameter takes the encoded route along which records have to be searched. 2. recordType(String): The category or class of the record, referenced by a defined set of category codes from client." ] }, { "title": "Optional Parameters", "level": 3, "paragraphs": [ "1. sort(Bool): Gets the sorted records along route. 2. geometryType(GemoetryType): Type of geometry encoding. Below are the available geometries: - GemoetryType.polyline5 - GemoetryType.polyline6 (Default) - GemoetryType.base64 3. page(Int): Used for pagination. By default, a request returns maximum 10 results and to get the next 10 or so on pass the page value accordingly. Default is 1. 4. buffer(Int): Buffer of the road. Minimum value is 25, maximum is 1000 and default is 25." ] }, { "title": "Response Parameter", "level": 3, "paragraphs": [ "1. responseCode(Int) 2. pageInfo(MapplsNearbyFinderAlongTheRouteResponsePageInfo) 3. suggestedPOIs([MapplsNearbyFinderAlongTheRouteResponseData])" ] }, { "title": "MapplsNearbyFinderAlongTheRouteResponseData", "level": 4, "paragraphs": [ "1. distance(Int) 2. customNote(String) 3. createdOn(Int) 4. recordType(String) 5. modifiedOn(String) 6. latitude(Double) 7. longitude(Double) 8. address(String) 9. recordId(String) 10. orderIndex(Int) 11. extendedInfo([String: String])" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Ruby", "label": "Installation", "code": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git" }, { "language": "Swift", "label": "Usage", "code": "let locations = CLLocation(latitude: 28.00, longitude: 77.98)\nlet nearbyFinderSearchOptions = MapplsNearbyFinderOptions(recordType: \"\", refLocation: locations)\nlet nearbyFinderSearchManager = MapplsNearbyRecordFinderManager.shared\nnearbyFinderSearchManager.getSearchResults(nearbyFinderSearchOptions) { (response, error) in\n if let error = error {\n print(\"Error\")\n } else if let response = response, let records = response.records {\n print(\"Resonse: \\(records)\")\n } else {\n self.showAlertController(message: \"No Results\")\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderSortBy = UserDefaultsManager.nearbyFinderSortBy {\n let sortByType = MMISearchByType(nearbyFinderSortBy)\n if sortByType == .importance {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortby(sortBy: .importance)\n } else {\n if let nearbyFinderOrderBy = UserDefaultsManager.nearbyFinderOrderBy {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortByDistanceWithOrder(orderBy: MMISortByOrderType(rawValue: nearbyFinderOrderBy))\n }\n }\n }" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderFilterMapplsPin = UserDefaultsManager.nearbyFinderFilterMapplsPin {\n nearbyFinderSearchOptions.filters = [MapplsNearbyRecordFinderKeyValueFilter(filterKey: \"cop\", filterValues: [nearbyFinderFilterMapplsPin])]\n }" }, { "language": "Swift", "label": "Swift", "code": "let alongTheRouteOption = MapplsNearbyFinderAlongTheRouteOptions(path: routeGeometry, recordType: \"WFHORWFO\")\nalongTheRouteOption.geometryType = .polyline6\nlet _ = MapplsNearbyFinderAlongTheRouteManager.shared.getAlongTheRoute(alongTheRouteOption) { (response, error) in\n if let error = error {\n // Error to be handled. \n } else if response == nil {\n // error\n } else if let response = response {\n // Your Logic ...\n }\n}" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git", "https://github.com/mappls-api/mappls-ios-sdk/blob/main/docs/v2.0.1/MapplsAPICore.md", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf", "https://www.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 18, "endpointCount": 20, "codeSampleCount": 5, "fingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc" } } ``` ## source-reference · Mappls Nearby Search Widget for iOS - Identity: `source-reference:mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-nearby-ui-ios-distribution - State model: stateless ```json { "slug": "mappls-nearby-ui-ios-distribution", "sourceId": "public-mappls-nearby-ui-ios-distribution", "name": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS", "summary": "Mappls Nearby UI Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-09T09:20:10Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The MapplsNearbyUI makes it easy to integrate a widget with your iOS application. The Nearby Search widget provided as a means to enable radially search for Nearby Places on Mappls Map.", "The widget offers the following basic functionalities:", "• Ability to search for nearby places directly with Mappls Map visual interface.", "• A single method to initiate nearby search across all categories of places available on Mappls.", "• Ability to get information from Mappls Nearby Search widget through a callback." ] }, { "title": "Widget Preview", "level": 2, "paragraphs": [ "This can be done by following simple steps." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMap - MapplsUIWidgets" ] }, { "title": "Authorization", "level": 4, "paragraphs": [ "##### MapplsAPICore It is required to set Mappls keys to use any Mappls SDK. Please refer the documentation here." ] }, { "title": "MapplsNearbyCategoriesViewController", "level": 3, "paragraphs": [ "MapplsNearbyCategoriesViewController is type of UIViewController which is entry ViewController for MapplsNearbyUI SDK.", "Thats all ! you are now ready with the MapplsNearbyUI widget within your app.", "To enhance further and making UI as per your own requirements, refer to the section below:" ] }, { "title": "Properties of MapplsNearbyCategoriesViewController", "level": 4, "paragraphs": [ "• nearbyCategories: - An array of an object of type MapplsNearbyCategories which will help to make your own custom categories to show on MapplsNearbyCategoriesViewController.", "It can be used as follows.", "• nearbyCategoryConfiguration:- A object of type MapplsNearbyCategoryConfiguration which will be required to set the UI Configuration of MapplsNearbyCategoriesViewController", "• nearbyConfiguration:- A object of type MapplsNearbyConfiguration which will be required in MapplsNearbyMapViewController to configure the UI components and nearby request parametes.", "• delegate:- A delegate object of type MapplsNearbyCategoriesViewControllerDelegate to provide different callbacks as per different actions of MapplsNearbyUI." ] }, { "title": "MapplsNearbyCategoriesViewControllerDelegate", "level": 3, "paragraphs": [ "It is a protocol class that will be used for callback methods as shown below:" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "MapplsNearbyCategoriesViewController", "code": "let nearbyUI = MapplsNearbyCategoriesViewController()\nself.navigationController?.pushViewController(nearbyUI, animated: false)" }, { "language": "Swift", "label": "Properties of MapplsNearbyCategoriesViewController", "code": "var nearbyCategories = [MapplsNearbyCategories]()\n\n let selectedImage = UIImage(named: \"placePickerMarker\")?.withRenderingMode(.alwaysTemplate)\n let categoriesImage = UIImage(named: \"Coffee\")\n\n let coffeeCategory = MapplsNearbyCategories(title: \"Coffee\", selectedBackgroundColor: selectedColor, unselectedBackgroundColor: .white, selectedImage: selectedImage ?? UIImage(), unselectedImage: selectedImage ?? UIImage(), unselectedTextColor: .black, selectedTextColor: .white, isSelected: true, categoryKeywords: [\"FODCOF\"], mapNearbyCategoryIcon: categoriesImage)\n\n nearbyCategories.append(coffeeCategory)\n\n nearbyUI.nearbyCategories = nearbyCategories" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method which will be called when the user click next button in `MapplsNearbyCategoriesViewController` class\n /// - Parameters:\n /// - refLocation: It is location selected from place picker or your current location or location provided by used as refLocation.\n /// - selectedCategories: It is the array of `MapplsNearbyCategories` items selected from the categories\n /// - error: This will show an error message in case of any failure in `MapplsNearbyCategoriesViewController` class on next button clicked.\n \n func didNextButtonClicked(refLocation: String?, selectedCategories: [MapplsNearbyCategories]?, error: String? )" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby icon is taped on the map. It will return a nearby response for the taped icon.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbyIcon(place: MapplsAtlasSuggestion)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby result in ListView is tapped. It will return a nearby response for the tapped item.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbySuggestionFromTable(place: MapplsAtlasSuggestion)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPIKit.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsMap.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsUIWidgets.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 24, "codeSampleCount": 5, "fingerprint": "139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f" } } ``` ## source-reference · Mappls Nearby Search Widget for iOS - Identity: `source-reference:mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-nearby-ui-ios-distribution-base - State model: stateless ```json { "slug": "mappls-nearby-ui-ios-distribution-base", "sourceId": "public-mappls-nearby-ui-ios-distribution-base", "name": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS", "summary": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-14T10:23:13Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The MapplsNearbyUI makes it easy to integrate a widget with your iOS application. The Nearby Search widget provided as a means to enable radially search for Nearby Places on Mappls Map.", "The widget offers the following basic functionalities:", "• Ability to search for nearby places directly with Mappls Map visual interface.", "• A single method to initiate nearby search across all categories of places available on Mappls.", "• Ability to get information from Mappls Nearby Search widget through a callback." ] }, { "title": "Widget Preview", "level": 2, "paragraphs": [ "This can be done by following simple steps." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library requires the following dependencies:", "• MapplsAPICore - MapplsAPIKit - MapplsLMS - MapplsMap - MapplsUIWidgets", "Please ensure these packages are added to your project." ] }, { "title": "Authorization", "level": 4, "paragraphs": [ "##### MapplsAPICore It is required to set Mappls keys to use any Mappls SDK. Please refer the documentation here." ] }, { "title": "MapplsNearbyCategoriesViewController", "level": 3, "paragraphs": [ "MapplsNearbyCategoriesViewController is type of UIViewController which is entry ViewController for MapplsNearbyUI SDK.", "Thats all ! you are now ready with the MapplsNearbyUI widget within your app.", "To enhance further and making UI as per your own requirements, refer to the section below:" ] }, { "title": "Properties of MapplsNearbyCategoriesViewController", "level": 4, "paragraphs": [ "• nearbyCategories: - An array of an object of type MapplsNearbyCategories which will help to make your own custom categories to show on MapplsNearbyCategoriesViewController.", "It can be used as follows.", "• nearbyCategoryConfiguration:- A object of type MapplsNearbyCategoryConfiguration which will be required to set the UI Configuration of MapplsNearbyCategoriesViewController", "• nearbyConfiguration:- A object of type MapplsNearbyConfiguration which will be required in MapplsNearbyMapViewController to configure the UI components and nearby request parametes.", "• delegate:- A delegate object of type MapplsNearbyCategoriesViewControllerDelegate to provide different callbacks as per different actions of MapplsNearbyUI." ] }, { "title": "MapplsNearbyCategoriesViewControllerDelegate", "level": 3, "paragraphs": [ "It is a protocol class that will be used for callback methods as shown below:" ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2022 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "MapplsNearbyCategoriesViewController", "code": "let nearbyUI = MapplsNearbyCategoriesViewController()\nself.navigationController?.pushViewController(nearbyUI, animated: false)" }, { "language": "Swift", "label": "Properties of MapplsNearbyCategoriesViewController", "code": "var nearbyCategories = [MapplsNearbyCategories]()\n\n let selectedImage = UIImage(named: \"placePickerMarker\")?.withRenderingMode(.alwaysTemplate)\n let categoriesImage = UIImage(named: \"Coffee\")\n\n let coffeeCategory = MapplsNearbyCategories(title: \"Coffee\", selectedBackgroundColor: selectedColor, unselectedBackgroundColor: .white, selectedImage: selectedImage ?? UIImage(), unselectedImage: selectedImage ?? UIImage(), unselectedTextColor: .black, selectedTextColor: .white, isSelected: true, categoryKeywords: [\"FODCOF\"], mapNearbyCategoryIcon: categoriesImage)\n\n nearbyCategories.append(coffeeCategory)\n\n nearbyUI.nearbyCategories = nearbyCategories" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method which will be called when the user click next button in `MapplsNearbyCategoriesViewController` class\n /// - Parameters:\n /// - refLocation: It is location selected from place picker or your current location or location provided by used as refLocation.\n /// - selectedCategories: It is the array of `MapplsNearbyCategories` items selected from the categories\n /// - error: This will show an error message in case of any failure in `MapplsNearbyCategoriesViewController` class on next button clicked.\n \n func didNextButtonClicked(refLocation: String?, selectedCategories: [MapplsNearbyCategories]?, error: String? )" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby icon is taped on the map. It will return a nearby response for the taped icon.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbyIcon(place: MapplsAtlasSuggestion)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby result in ListView is tapped. It will return a nearby response for the tapped item.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbySuggestionFromTable(place: MapplsAtlasSuggestion)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-api-core-ios-distribution.git", "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base.git", "https://github.com/mappls-api/mappls-lms-ios-distribution-base.git", "https://github.com/mappls-api/mappls-map-ios-distribution-base.git", "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base.git", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 25, "codeSampleCount": 5, "fingerprint": "97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347" } } ``` ## source-reference · MapplsRasterCatalogue Plugin for iOS - Identity: `source-reference:mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-raster-catalogue-ios-distribution - State model: stateless ```json { "slug": "mappls-raster-catalogue-ios-distribution", "sourceId": "public-mappls-raster-catalogue-ios-distribution", "name": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS", "summary": "Mappls Raster Catalogue Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-06-11T09:32:44Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsRasterCatalogue is a plugin over Mappls's rasterCatalogue APIs. RasterCatalogue APIs gives the users the power to display, style, and edit the data which is archived in Mappls's Database and overlay it on the user created maps.", "• This is an easy & FREE to integrate DigitalSky Airspace zones layers widget by Mappls. - The drone airspace map is an interactive map of India that demarcates the yellow and red zones across the country. - The airspace map may be modified by authorised entities from time to time. Anyone planning to operate a drone should mandatorily check the latest airspace map for any changes in zone boundaries. - We're helping ANY website or app developer to easily integrate this information, for the benefit of your users and visitors." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "RasterCatalogue Layer Types", "level": 3, "paragraphs": [ "An enum MapplsRasterCatalogueLayerType can be used to get different types of layers. Below are different types which are available:", "1. MapplsRasterCatalogueLayerTypeInternationalBoundary25KM 2. MapplsRasterCatalogueLayerTypeAirport8To12KMYellow 3. MapplsRasterCatalogueLayerTypeAirport5To8KM 4. MapplsRasterCatalogueLayerTypeAirport0To5KM", "Now that you’re all caught up with the features, let's get down right to them and look at how you can integrate our RasterCatalogue plugin to add data on your map in few simple steps." ] }, { "title": "Use of RasterCatalogue API", "level": 2, "paragraphs": [ "Use instance of MapplsRasterCataloguePlugin to show response of RasterCatalogue API as Map Layers.", "For infomation about RasterCatalogue API go here." ] }, { "title": "MapplsRasterCatalogueLayerOptions", "level": 4, "paragraphs": [ "Below are parameters of MapplsRasterCatalogueLayerOptions class.", "• layerType (mandatory): It is an enum of type MapplsRasterCatalogueLayerType.", "• crossOrigin (optional): It is of type String. For more info see here.", "• transparent (optional): It is type Bool. its default value is true.", "• zIndex (optional): It is of type BOOL. its default value is 0" ] }, { "title": "Step 2 - Adding RasterCatalogue layer on Map", "level": 3, "paragraphs": [ "A function addRasterCatalogueLayer available in MapplsRasterCataloguePlugin which accepts request of type MapplsRasterCatalogueLayerOptions. Plugin internally consume that request to get response and plot layer on Map accordingly." ] }, { "title": "Other Methods Available:", "level": 3, "paragraphs": [ "1. Remove RasterCatalogue Layer", "removeRasterCatalogueLayer is a function which accepts request of type MapplsRasterCatalogueLayerOptions to remove related layer from map." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Initialization MapplsRasterCatalogue Plugin", "code": "var rasterCataloguePlugin : MapplsRasterCataloguePlugin = MapplsRasterCataloguePlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 2 - Adding RasterCatalogue layer on Map", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\nself.rasterCataloguePlugin.addRasterCatalogueLayer(request)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\ngeoanalyticsPlugin.removeRasterCatalogueLayer(layerRequestState))" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPIKit.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsMap.md", "https://about.mappls.com/api/advanced-maps/geoanalytics-web-js/geo-analytics-mapmyindia-js).**", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 23, "codeSampleCount": 3, "fingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a" } } ``` ## source-reference · MapplsRasterCatalogue Plugin for iOS - Identity: `source-reference:mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-raster-catalogue-ios-distribution-base - State model: stateless ```json { "slug": "mappls-raster-catalogue-ios-distribution-base", "sourceId": "public-mappls-raster-catalogue-ios-distribution-base", "name": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS", "summary": "A versioned iOS distribution package used to integrate maps, tracking telematics, gis analytics, widgets deep links, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2025-08-12T09:01:22Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "MapplsRasterCatalogue is a plugin over Mappls's rasterCatalogue APIs. RasterCatalogue APIs gives the users the power to display, style, and edit the data which is archived in Mappls's Database and overlay it on the user created maps.", "• This is an easy & FREE to integrate DigitalSky Airspace zones layers widget by Mappls. - The drone airspace map is an interactive map of India that demarcates the yellow and red zones across the country. - The airspace map may be modified by authorised entities from time to time. Anyone planning to operate a drone should mandatorily check the latest airspace map for any changes in zone boundaries. - We're helping ANY website or app developer to easily integrate this information, for the benefit of your users and visitors." ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 4, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMaps" ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set MAPPLS's keys to use any MAPPL's SDK. Please see here to achieve this." ] }, { "title": "RasterCatalogue Layer Types", "level": 3, "paragraphs": [ "An enum MapplsRasterCatalogueLayerType can be used to get different types of layers. Below are different types which are available:", "1. MapplsRasterCatalogueLayerTypeInternationalBoundary25KM 2. MapplsRasterCatalogueLayerTypeAirport8To12KMYellow 3. MapplsRasterCatalogueLayerTypeAirport5To8KM 4. MapplsRasterCatalogueLayerTypeAirport0To5KM", "Now that you’re all caught up with the features, let's get down right to them and look at how you can integrate our RasterCatalogue plugin to add data on your map in few simple steps." ] }, { "title": "Use of RasterCatalogue API", "level": 2, "paragraphs": [ "Use instance of MapplsRasterCataloguePlugin to show response of RasterCatalogue API as Map Layers.", "For infomation about RasterCatalogue API go here." ] }, { "title": "MapplsRasterCatalogueLayerOptions", "level": 4, "paragraphs": [ "Below are parameters of MapplsRasterCatalogueLayerOptions class.", "• layerType (mandatory): It is an enum of type MapplsRasterCatalogueLayerType.", "• crossOrigin (optional): It is of type String. For more info see here.", "• transparent (optional): It is type Bool. its default value is true.", "• zIndex (optional): It is of type BOOL. its default value is 0" ] }, { "title": "Step 2 - Adding RasterCatalogue layer on Map", "level": 3, "paragraphs": [ "A function addRasterCatalogueLayer available in MapplsRasterCataloguePlugin which accepts request of type MapplsRasterCatalogueLayerOptions. Plugin internally consume that request to get response and plot layer on Map accordingly." ] }, { "title": "Other Methods Available:", "level": 3, "paragraphs": [ "1. Remove RasterCatalogue Layer", "removeRasterCatalogueLayer is a function which accepts request of type MapplsRasterCatalogueLayerOptions to remove related layer from map." ] }, { "title": "Our many happy customers:", "level": 2, "paragraphs": [ "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)", "@ Copyright 2020 CE Info Systems Pvt. Ltd. All Rights Reserved." ] } ], "snippets": [ { "language": "Swift", "label": "Initialization MapplsRasterCatalogue Plugin", "code": "var rasterCataloguePlugin : MapplsRasterCataloguePlugin = MapplsRasterCataloguePlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 2 - Adding RasterCatalogue layer on Map", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\nself.rasterCataloguePlugin.addRasterCatalogueLayer(request)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\ngeoanalyticsPlugin.removeRasterCatalogueLayer(layerRequestState))" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPIKit.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsMap.md", "https://about.mappls.com/api/advanced-maps/geoanalytics-web-js/geo-analytics-mapmyindia-js).**", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy", "https://www.mappls.com/pdf/mappls-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://www.mappls.com/pdf/Health-Safety-Management.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 15, "endpointCount": 23, "codeSampleCount": 3, "fingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a" } } ``` ## source-reference · Mappls Intouch React Native SDK - Identity: `source-reference:mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/reference/mappls-react-native-intouch-sdk - State model: stateful ```json { "slug": "mappls-react-native-intouch-sdk", "sourceId": "public-mappls-react-native-intouch-sdk", "name": "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", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "intouch" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "platforms": [ "React Native" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-05-19T12:12:31Z", "localCandidates": [], "prerequisites": [ "A React Native project with both native build environments" ], "sections": [ { "title": "Mappls Intouch React Native SDK", "level": 1, "paragraphs": [ "Get Real-Time Location Tracking for your apps with Mappls InTouch SDK. Track a user's live location with our simplified InTouch React native SDK integration, highly customizable to your specific needs.", "The InTouch SDK comes with a variety of events that enable better control and power over your tracking needs. Also get location benefits built for various applications including logistics, delivery tracking, employee tracking, and live location sharing." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Mappls Intouch SDK Getting Started Installation Added Import To Check Intouch is Initialised Intouch Initialisation Check Intouch Running Start tracking Stop tracking Tracking Event Listener Get Current Locaton", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://github.com/mdakram", "https://github.com/saksham66", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 19, "codeSampleCount": 0, "fingerprint": "cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69" } } ``` ## source-reference · Mappls React Native SDK - Identity: `source-reference:mappls-react-native-sdk` - Canonical: https://developer.mappls.com/reference/mappls-react-native-sdk - State model: stateless ```json { "slug": "mappls-react-native-sdk", "sourceId": "public-mappls-react-native-sdk", "name": "mappls-react-native-sdk", "title": "Mappls React Native SDK", "summary": "A Mappls sdk for maps, search places, routes navigation, tracking telematics, gis analytics, widgets deep links, capture feedback, identity platform across React Native.", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "React Native" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-react-native-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-react-native-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-react-native-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-04T08:56:55Z", "localCandidates": [], "prerequisites": [ "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch. > NPM Versions: > - If you wish to the SDK for auth-legacy branch, please use the latest sdk on npm with the tag auth-legacy. > - Any SDKs on npm without this tag will be using the newer auth mechanism from version 2.0.0 onwards." ] }, { "title": "Mappls React Native SDK", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Android Applications", "Powered with India's most comprehensive and robust mapping functionalities.", "1. You can get your api key to be used in this document here: Mappls Dashboard", "2. The sample code is provided to help you understand the basic functionality of Mappls maps & REST APIs working on Android native development platform.", "4. Explore through 200+ countries & territories with Global Search, Routing and Mapping APIs & SDKs by Mappls." ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Getting Started Installation Android Setup IOS Setup - Add Mappls Map Add Import Add a Mappls Map to your application - Component MapView Light Point Annotation Callout Camera User Location Images - Mappls DIGIPIN - Mappls Traffic Overlay - Set Country Regions - Set Mappls Map Style List of Available Styles Set Mappls Style To enable/disable last selected style - Rest API Kit Search API's Auto Suggest Geocode Reverse Geocode Nearby Places Place Detail POI Along the Route Routes & Navigation API Routing API Driving Distance Matrix API Weather Api Nearby Reports - Mappls Search Widget Getting Started Place Picker Search Widget - Mappls Direction Widget Getting Started Direction Widget - Mappls Nearby Widget Getting Started Nearby Widget - Mappls Geofence Widget Getting started Geofence Widget - SDK Error Codes - Version History - Country List", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-react-native-sdk/tree/main", "https://github.com/mappls-api/mappls-react-native-sdk/tree/auth-legacy", "https://www.mapmyindia.com/api", "https://auth.mappls.com/console", "https://github.com/mappls-api/mappls-rest-apis/blob/main/docs/countryISO.md", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 21, "codeSampleCount": 0, "fingerprint": "2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4" } } ``` ## source-reference · Mappls Map APIs (REST) ! - Identity: `source-reference:mappls-rest-apis` - Canonical: https://developer.mappls.com/reference/mappls-rest-apis - State model: stateless ```json { "slug": "mappls-rest-apis", "sourceId": "public-mappls-rest-apis", "name": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !", "summary": "Building Blocks to Add Powerful Location Intelligence & Mapping Functionality to your Apps", "kind": "REST API", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform" ], "platforms": [ "REST" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-rest-apis", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-rest-apis/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-rest-apis/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-03T13:45:42Z", "localCandidates": [ "contenthub/dochub/mapmyindia-rest-api" ], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch." ] }, { "title": "Mappls Map APIs (REST) !", "level": 1, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications", "Powered with India's most comprehensive and robust mapping functionalities. Now Available for Srilanka, Nepal, Bhutan, Myanmar and Bangladesh", "Full documentation available here: https://about.mappls.com/api/. You can get your api key to be used in this document here: https://auth.mappls.com/console/" ] }, { "title": "Store-To-Door", "level": 2, "paragraphs": [ "Store-to-Door Experiences created with India’s best Location APIs & SDKs. In this new ‘at home’ world, we’re helping India’s leading apps take their products & services from the stores straight to the consumer’s door. Let us help you too. Top apps have already gone store-to-door:", "Our APIs are categorized into the following major categories:" ] }, { "title": "SEARCH", "level": 4, "paragraphs": [ "Experience relevant & most accurate search results for an address, a place or a pair of geo-coordinates." ] }, { "title": "MAPS & TRAFFIC", "level": 4, "paragraphs": [ "Highly detailed & interactive maps with 2D/3D viewing options & real-time traffic flow" ] }, { "title": "ROUTES & NAVIGATION", "level": 4, "paragraphs": [ "Get turn-by-turn directions with alternate driving routes between specified locations, with traffic" ] }, { "title": "GEOANALYTICS", "level": 4, "paragraphs": [ "GeoAnalytics Web JS APIs with multiple data attributes such as demographic data attributes. Aligned with Mappls Map data, these APIs utilize our vast geo-informatics experience to provide customers a enhanced leverage over competition using query-enabled analytics APIs to draw heatmaps, thematic maps or other types geo-visualizations for your business analysis problems." ] }, { "title": "Accurate", "level": 3, "paragraphs": [ "Most accurate door-step level turn by turn directions covering 66 lakh kilometers across all highways and city roads and lanes," ] }, { "title": "We know India better than anyone else", "level": 3, "paragraphs": [ "Powered by India’s best, most detailed house address level maps covering 3 crore places across 7000 cities and 7 lakh villages" ] }, { "title": "We abide by Government of India regulations", "level": 3, "paragraphs": [ "We are the only local Map APIs that follows Government of India.s regulations. We ensure all your data is stored in a server in India." ] }, { "title": "We are easy to integrate", "level": 3, "paragraphs": [ "Integrating Mappls Maps API is easy and effortless. We provide you with an expert team, to guide and work with you." ] }, { "title": "Our many happy customers", "level": 2, "paragraphs": [ "                             ", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-rest-apis/tree/main", "https://github.com/mappls-api/mappls-rest-apis/tree/auth-legacy", "https://about.mappls.com/api/](https://about.mappls.com/api/).", "https://auth.mappls.com/console/](https://auth.mappls.com/console/", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 13, "endpointCount": 38, "codeSampleCount": 0, "fingerprint": "a27fe1435b9cd778f7d5352dc2152e74727c72b640a26515e83969d0f4e455b5" } } ``` ## source-reference · MapplsUIWidgets - UI Components SDK for iOS - Identity: `source-reference:mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-ui-widget-ios-distribution - State model: hybrid ```json { "slug": "mappls-ui-widget-ios-distribution", "sourceId": "public-mappls-ui-widget-ios-distribution", "name": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS", "summary": "Mappls UI Widget Native for iOS distributed via the SPM (Swift Package Manager).", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "ui-widget" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-04-01T12:41:15Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The MapplsUIWidgets SDK for iOS allows you can build rich apps by quickly implement reday made UI components. Currently this SDK have a widget for Searching a place using AutoSuggest API." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMap - MapplsUIWidgets" ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore, MapplsAPIKit, MapplsMap. All dependent libraries will be automatically." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls keys to use any Mappls SDK. Please refer the documentation here." ] }, { "title": "Autocomplete", "level": 2, "paragraphs": [ "The autocomplete service in the SDK for iOS returns place predictions in response to user search queries. As the user types, the autocomplete service returns suggestions for places such as businesses, addresses and points of interest.", "You can add autocomplete to your app in the following ways:", "Add an autocomplete UI control to save development time and ensure a consistent user experience.", "Get place predictions programmatically to create a customized user experience." ] }, { "title": "Add an autocomplete UI control", "level": 3, "paragraphs": [ "The autocomplete UI control is a search dialog with built-in autocomplete functionality. As a user enters search terms, the control presents a list of predicted places to choose from. When the user makes a selection, a MapplsAtlasSuggestion instance is returned, which your app can then use to get details about the selected place.", "• Add a full screen control Add a results controller Use a table data source" ] }, { "title": "Add a full-screen control", "level": 3, "paragraphs": [ "Use the full-screen control when you want a modal context, where the autocomplete UI temporarily replaces the UI of your app until the user has made their selection. This functionality is provided by the MapplsAutocompleteViewController class. When the user selects a place, your app receives a callback.", "To add a full-screen control to your app:", "1. Create a UI element in your main app to launch the autocomplete UI control, for example a touch handler on a UIButton. 1. Implement the MapplsAutocompleteViewControllerDelegate protocol in the parent view controller. 1. Create an instance of MapplsAutocompleteViewController and assign the parent view controller as the delegate property. 1. Add a MapplsAutocompleteFilter to constrain the query to a particular type of place. 1. Present the MapplsAutocompleteViewController using [self presentViewController...]. 1. Handle the user's selection in the didAutocompleteWithPlace delegate method. 1. Dismiss the controller in the didAutocompleteWithPlace, didFailAutocompleteWithError, and wasCancelled delegate methods.", "The following example demonstrates one possible way to launch MapplsAutocompleteViewController in response to the user tapping on a button." ] }, { "title": "SwiftUI Full Screen Control", "level": 4, "paragraphs": [ "##### Create Autosuggest View Controller", "1. In your project, add new SwiftUI View and name it MapplsAutocompleteViewControllerSwiftUIView.swift 2. In order to use native UIKit view controller in SwiftUI view, you must use UIViewControllerRepresentable wrapper. The instance of custom type which adopts UIViewControllerRepresentable protocol is responsible for creation and management a UIViewController object in your SwiftUI interface.", "3. The UIViewControllerRepresentable requires to implement makeUIViewController(context:) method that creates the instance of with the desired UIKit view. Add the following code to create map view instance", "4. The UIViewControllerRepresentable view also requires to implement updateUIViewController(:context:) which is used to configure the newly created instance. To show autosuggest only We dont need to configure anything so we will keep it empty.", "5. To use selected place from results of autosuggest add below property code as shown above:", "6. Use below code to create SwiftUIView to consume in another View." ] }, { "title": "Add a results controller", "level": 3, "paragraphs": [ "Use a results controller when you want more control over the text input UI. The results controller dynamically toggles the visibility of the results list based on input UI focus.", "To add a results controller to your app:", "1. Create a MapplsAutocompleteResultsViewController. 1. Implement the MapplsAutocompleteResultsViewControllerDelegate protocol in the parent view controller and assign the parent view controller as the delegate property. 1. Create a UISearchController object, passing in the MapplsAutocompleteResultsViewController as the results controller argument. 1. Set the MapplsAutocompleteResultsViewController as the searchResultsUpdater property of the UISearchController. 1. Add the searchBar for the UISearchController to your app's UI. 1. Handle the user's selection in the didAutocompleteWithPlace delegate method.", "There are several ways to place the search bar of a UISearchController into your app's UI:", "• Add a search bar to the navigation bar Add a search bar to the top of a view" ] }, { "title": "Add a search bar to the navigation bar", "level": 4, "paragraphs": [ "The following code example demonstrates adding a results controller, adding the searchBar to the navigation bar, and handling the user's selection:", "Note: For the search bar to display properly, your app's view controller must be enclosed within a UINavigationController." ] }, { "title": "Add a search bar to the top of a view", "level": 4, "paragraphs": [ "The following code example shows adding the searchBar to the top of a view." ] }, { "title": "Use a table data source", "level": 3, "paragraphs": [ "You can use the MapplsAutocompleteTableDataSource class to drive the table view of a UISearchDisplayController.", "To use MapplsAutocompleteTableDataSource to display a search controller:", "1. Implement the MapplsAutocompleteTableDataSourceDelegate and UISearchDisplayDelegate protocols in the parent view controller. 1. Create a MapplsAutocompleteTableDataSource instance and assign the parent view controller as the delegate property. 1. Create an instance of UISearchDisplayController. 1. Add the searchBar for the UISearchController to your app's UI. 1. Handle the user's selection in the didAutocompleteWithPlace delegate method. 1. Dismiss the controller in the didAutocompleteWithPlace, didFailAutocompleteWithError, and wasCancelled delegate methods.", "The following code example demonstrates using the MapplsAutocompleteTableDataSource class to drive the table view of a UISearchDisplayController." ] }, { "title": "Get place predictions programmatically", "level": 3, "paragraphs": [ "You can create a custom search UI as an alternative to the UI provided by the autocomplete widget. To do this, your app must get place predictions programmatically. Your app can get a list of predicted place names and/or addresses by using Mappls's library MapplsAPIKit. For more information Goto." ] }, { "title": "MapplsAutocompleteFilter", "level": 3, "paragraphs": [ "This class represents a set of restrictions that may be applied to autocomplete requests. This allows customization of autocomplete suggestions to only those places that are of interest." ] }, { "title": "Parameters:", "level": 4, "paragraphs": [ "A location to use as a hint when looking up the specified address.", "This property prioritizes results that are close to a specific location, which is typically the user’s current location. If the value of this property is nil – which it is by default – no specific location is prioritized.", "Zoom level to a location to use as a hint when looking up the specified address.", "It allows to get tokenize address in response. By default its value is false. If value true is passed then only in response of MapplsAtlasSuggestion addressTokens will be recieved which is of type MapplsAddressTokens", "On basis of this only specific type of Places in response will be returned.", "Its data type is MapplsPodType which is derived from MapplsAPIKit" ] }, { "title": "Favourite Places", "level": 3, "paragraphs": [ "Favourite or Custom Places can be set to show in result of Autosuggest.", "By default on searching by entering any text favourites will also be filtered. Filtering can be disabled by setting value false of global boolean property IsSearchFavouritesEnabled. By disabling it means it will always show favourites in results.", "By default maximum two favourites will be shown in results. This can be configured by setting value of property FavouritesCountToShow. Its default value is 2. Minimum value can be 0 and maximum can be 10.", "Below is line of code can be used to set favourite places.", "Callback of selected favourite item can be handled using different delegate methods. See here." ] }, { "title": "Theme", "level": 2, "paragraphs": [ "To change the theme of default search widget in the initilizer of MapplsAutocompleteViewController theme can set selected." ] }, { "title": "Place Picker View", "level": 2, "paragraphs": [ "The Place Picker View is a UIView component that allows a user to pick a Place using an interactive map.", "Users can select a location which from center of map after succesfully reverse geocoding that location.", "PlacePickerView is class whose instance can be created and can be added to ViewController. Below is sample code to understand:" ] }, { "title": "PlacePickerViewDelegate", "level": 3, "paragraphs": [ "As from above sample code PlacePickerViewDelegate is a protocol class which provides different delegate methods which can be used according to requirements." ] }, { "title": "Customize Place Picker", "level": 3, "paragraphs": [ "On adding instance of PlacePickerView it will load a default view with a map marker image on map But default view can be modified with help of some properties which are described as below:", "View of marker on map can be ovrriden by using property 'markerView'. This is type of UIView so it can accept custom designed view and UIImageView as well.", "isMarkerShadowViewHidden:", "A shadow of marker is shows by defualt on dragging map. Visibility of this shadow can be changed by using property 'isMarkerShadowViewHidden'.", "searchButtonBackgroundColor:", "Background color of search button can be changed by using property 'searchButtonBackgroundColor'." ] }, { "title": "Premium Features", "level": 3, "paragraphs": [ "The Place Picker widget has the capability to showcase certain premium features if they are provisioned within your project, like:" ] }, { "title": "Highlighting a Building", "level": 4, "paragraphs": [ "If the selected point on the map falls within a building, then Mappls Place Picker can also highlight the said building on the map. This visualization's color palette is configurable within the Mappls Map SDK.", "In order to access this feature, please contact API support as well as your Business relationship manager.", "Properties related to these feature are:", "isBuildingFootprintEnabled:", "This is a boolean property. By setting its value the ability to highlight the footprint of a building can be enabled or disabled if it is povisioned for your project.", "buildingAppearance:" ] }, { "title": "MapplsAttributionsSettings", "level": 3, "paragraphs": [ "A class MapplsAttributionsSettings is exist which represents a set of settings that can be applied to autocomplete to control appearance (Content Length, Size, Horizontal Content Alignment and Vertical Placement) of attribution. Appearance of attribution on can be controlled by different properties of MapplsAttributionsSettings." ] } ], "snippets": [ { "language": "Swift", "label": "Add a full-screen control", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n override func viewDidLoad() {\n makeButton()\n }\n\n // Present the Autocomplete view controller when the button is pressed.\n @objc func autocompleteClicked(_ sender: UIButton) {\n let autocompleteController = MapplsAutocompleteViewController(theme: .auto)\n autocompleteController.delegate = self\n\n // Specify a filter.\n let filter = MapplsAutocompleteFilter()\n autocompleteController.autocompleteFilter = filter\n\n // Display the autocomplete view controller.\n present(autocompleteController, animated: true, completion: nil)\n }\n\n // Add a button to the view.\n func makeButton() {\n let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35))\n btnLaunchAc.backgroundColor = .blue\n btnLaunchAc.setTitle(\"Launch autocomplete\", for: .normal)\n btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside)\n self.view.addSubview(btnLaunchAc)\n }\n\n}\n\nextension ViewController: MapplsAutocompleteViewControllerDelegate {\n\n // Handle the user's selection.\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n dismiss(animated: true, completion: nil)\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n \n func didRequestForAutoSearchOptions(options: MapplsAutoSearchAtlasOptions) -> MapplsAutoSearchAtlasOptions {\n return options\n }\n \n func didRequestForTextSearchOptions(options: MapplsTextSearchAtlasOptions) -> MapplsTextSearchAtlasOptions {\n return options\n }\n\n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // User canceled the operation.\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n dismiss(animated: true, completion: nil)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIWrapper: UIViewControllerRepresentable {\n ...\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Environment(\\.presentationMode) var presentationMode\n\n func makeUIViewController(context: UIViewControllerRepresentableContext) -> MapplsAutocompleteViewController {\n let autocompleteViewController = MapplsAutocompleteViewController() \n autocompleteViewController.delegate = context.coordinator\n return autocompleteViewController\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func updateUIViewController(_ uiViewController: MapplsAutocompleteViewController, context: UIViewControllerRepresentableContext) {\n\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Binding var placeSuggestion: MapplsAtlasSuggestion?" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIView: View {\n @Binding var placeSuggestion: MapplsAtlasSuggestion?\n \n var body: some View {\n MapplsAutocompleteViewControllerSwiftUIWrapper(placeSuggestion: $placeSuggestion)\n .navigationBarHidden(true)\n }\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "class Coordinator: NSObject, UINavigationControllerDelegate, MapplsAutocompleteViewControllerDelegate {\n var parent: MapplsAutocompleteViewControllerSwiftUIWrapper\n \n init(_ parent: MapplsAutocompleteViewControllerSwiftUIWrapper) {\n self.parent = parent\n }\n \n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n \n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n DispatchQueue.main.async {\n print(place.description.description as Any)\n self.parent.presentationMode.wrappedValue.dismiss()\n self.parent.placeSuggestion = place\n }\n }\n \n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n print(\"Error: \", error.localizedDescription)\n }\n\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n parent.presentationMode.wrappedValue.dismiss()\n }\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func makeCoordinator() -> MapView.Coordinator {\n Coordinator(self)\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "autocompleteViewController.delegate = context.coordinator" }, { "language": "Swift", "label": "Add a search bar to the navigation bar", "code": "class ViewController: UIViewController {\n\n var resultsViewController: MapplsAutocompleteResultsViewController?\n var searchController: UISearchController?\n var resultView: UITextView?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n resultsViewController = MapplsAutocompleteResultsViewController()\n resultsViewController?.delegate = self\n\n searchController = UISearchController(searchResultsController: resultsViewController)\n searchController?.searchResultsUpdater = resultsViewController\n\n // Put the search bar in the navigation bar.\n searchController?.searchBar.sizeToFit()\n navigationItem.titleView = searchController?.searchBar\n\n // When UISearchController presents the results view, present it in\n // this view controller, not one further up the chain.\n definesPresentationContext = true\n\n // Prevent the navigation bar from being hidden when searching.\n searchController?.hidesNavigationBarDuringPresentation = false\n }\n}\n\n// Handle the user's selection.\nextension ViewController: MapplsAutocompleteResultsViewControllerDelegate {\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n searchController?.isActive = false\n // Do something with the selected place.\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didFailAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictionsForResultsController(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictionsFor(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n}" }, { "language": "Swift", "label": "Add a search bar to the top of a view", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n var resultsViewController: MapplsAutocompleteResultsViewController?\n var searchController: UISearchController?\n var resultView: UITextView?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n resultsViewController = MapplsAutocompleteResultsViewController()\n resultsViewController?.delegate = self\n\n searchController = UISearchController(searchResultsController: resultsViewController)\n searchController?.searchResultsUpdater = resultsViewController\n\n let subView = UIView(frame: CGRect(x: 0, y: 65.0, width: 350.0, height: 45.0))\n\n subView.addSubview((searchController?.searchBar)!)\n view.addSubview(subView)\n searchController?.searchBar.sizeToFit()\n searchController?.hidesNavigationBarDuringPresentation = false\n\n // When UISearchController presents the results view, present it in\n // this view controller, not one further up the chain.\n definesPresentationContext = true\n }\n}\n\n// Handle the user's selection.\nextension ViewController: MapplsAutocompleteResultsViewControllerDelegate {\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n searchController?.isActive = false\n // Do something with the selected place.\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didFailAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictionsForResultsController(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictionsFor(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n}" }, { "language": "Swift", "label": "Use a table data source", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController, UISearchDisplayDelegate {\n\n var searchBar: UISearchBar?\n var tableDataSource: MapplsAutocompleteTableDataSource?\n var searchDisplayController: UISearchDisplayController?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n searchBar = UISearchBar(CGRect(x: 0, y: 0, width: 250.0, height: 44.0))\n\n tableDataSource = MapplsAutocompleteTableDataSource()\n tableDataSource?.delegate = self\n\n searchDisplayController = UISearchDisplayController(searchBar: searchBar!, contentsController: self)\n searchDisplayController?.searchResultsDataSource = tableDataSource\n searchDisplayController?.searchResultsDelegate = tableDataSource\n searchDisplayController?.delegate = self\n\n view.addSubview(searchBar!)\n }\n\n func didUpdateAutocompletePredictionsForTableDataSource(tableDataSource: MapplsAutocompleteTableDataSource) {\n // Turn the network activity indicator off.\n UIApplication.sharedApplication().networkActivityIndicatorVisible = false\n // Reload table data.\n searchDisplayController?.searchResultsTableView.reloadData()\n }\n\n func didRequestAutocompletePredictionsFor(tableDataSource: MapplsAutocompleteTableDataSource) {\n // Turn the network activity indicator on.\n UIApplication.sharedApplication().networkActivityIndicatorVisible = true\n // Reload table data.\n searchDisplayController?.searchResultsTableView.reloadData()\n }\n\n}\n\nextension ViewController: MapplsAutocompleteTableDataSourceDelegate {\n func didAutocomplete(tableDataSource: MapplsAutocompleteTableDataSource, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n searchDisplayController?.active = false\n // Do something with the selected place.\n print(\"Place name: \\(place.name)\")\n print(\"Place address: \\(place.formattedAddress)\")\n print(\"Place attributions: \\(place.attributions)\")\n }\n\n func didAutocomplete(tableDataSource: MapplsAutocompleteTableDataSource, withFavouritePlace place: MapplsUIWidgets.MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didFailAutocomplete(tableDataSource: MapplsAutocompleteTableDataSource, withError error: NSError) {\n // TODO: Handle the error.\n print(\"Error: \\(error.description)\")\n }\n}" }, { "language": "Swift", "label": "Favourite Places", "code": "MapplsUIWidgetAutosuggestFavouritePlaces = [\n MapplsUIWidgetAutosuggestFavouritePlace(placeName: \"MapmyIndia\", placeAdress: \"Okhla Phase 3, Delhi\", mapplsPin: \"mmi000\"),\n MapplsUIWidgetAutosuggestFavouritePlace(placeName: \"India Gate\", placeAdress: \"Delhi, New Delhi\", mapplsPin: \"1t182a\")\n ]\n\nMapplsUIWidgets.IsSearchFavouritesEnabled = false\n\nMapplsUIWidgets.FavouritesCountToShow = 5" }, { "language": "Swift", "label": "Theme", "code": "let mapplsAutocompleteViewController = MapplsAutocompleteViewController(theme: .auto)\n present(mapplsAutocompleteViewController, animated: true, completion: nil)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://about.mappls.com/api/advanced-maps/doc/autosuggest-api).", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPICore.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsAPIKit.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsMap.md", "https://github.com/mappls-api/mappls-ios-sdk/docs/v1.0.0/MapplsUIWidgets.md", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable", "https://developer.apple.com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 30, "endpointCount": 29, "codeSampleCount": 14, "fingerprint": "fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349" } } ``` ## source-reference · MapplsUIWidgets - UI Components SDK for iOS - Identity: `source-reference:mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-ui-widget-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-ui-widget-ios-distribution-base", "sourceId": "public-mappls-ui-widget-ios-distribution-base", "name": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS", "summary": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "stateModelEvidence": { "stateModel": "hybrid", "authority": "source-identity", "signals": [ "ui-widget" ], "reason": "The source identity names a capture, feedback, geofence, analysis, or guided-operation surface where provider calls and application-owned workflow state must be separated." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS" ], "authSignals": [], "languages": [ "Swift", "Text" ], "repositoryUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-27T11:37:42Z", "localCandidates": [], "prerequisites": [ "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "The MapplsUIWidgets SDK for iOS allows you can build rich apps by quickly implement reday made UI components. Currently this SDK have a widget for Searching a place using AutoSuggest API." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using CocoaPods.", "Below are list of dependencies which are required to run this SDK:", "• MapplsAPICore - MapplsAPIKit - MapplsMap" ] }, { "title": "Installation", "level": 2, "paragraphs": [ "To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter its repository URL. See Adding Package Dependencies to Your App." ] }, { "title": "Dependencies", "level": 3, "paragraphs": [ "This library depends upon MapplsAPICore, MapplsAPIKit, MapplsMap. All dependent libraries will be automatically." ] }, { "title": "MapplsAPICore", "level": 3, "paragraphs": [ "It is required to set Mappls keys to use any Mappls SDK. Please refer the documentation here." ] }, { "title": "Autocomplete", "level": 2, "paragraphs": [ "The autocomplete service in the SDK for iOS returns place predictions in response to user search queries. As the user types, the autocomplete service returns suggestions for places such as businesses, addresses and points of interest.", "You can add autocomplete to your app in the following ways:", "Add an autocomplete UI control to save development time and ensure a consistent user experience.", "Get place predictions programmatically to create a customized user experience." ] }, { "title": "Add an autocomplete UI control", "level": 3, "paragraphs": [ "The autocomplete UI control is a search dialog with built-in autocomplete functionality. As a user enters search terms, the control presents a list of predicted places to choose from. When the user makes a selection, a MapplsAtlasSuggestion instance is returned, which your app can then use to get details about the selected place.", "• Add a full screen control Add a results controller Use a table data source" ] }, { "title": "Add a full-screen control", "level": 3, "paragraphs": [ "Use the full-screen control when you want a modal context, where the autocomplete UI temporarily replaces the UI of your app until the user has made their selection. This functionality is provided by the MapplsAutocompleteViewController class. When the user selects a place, your app receives a callback.", "To add a full-screen control to your app:", "1. Create a UI element in your main app to launch the autocomplete UI control, for example a touch handler on a UIButton. 1. Implement the MapplsAutocompleteViewControllerDelegate protocol in the parent view controller. 1. Create an instance of MapplsAutocompleteViewController and assign the parent view controller as the delegate property. 1. Add a MapplsAutocompleteFilter to constrain the query to a particular type of place. 1. Present the MapplsAutocompleteViewController using [self presentViewController...]. 1. Handle the user's selection in the didAutocompleteWithPlace delegate method. 1. Dismiss the controller in the didAutocompleteWithPlace, didFailAutocompleteWithError, and wasCancelled delegate methods.", "The following example demonstrates one possible way to launch MapplsAutocompleteViewController in response to the user tapping on a button." ] }, { "title": "SwiftUI Full Screen Control", "level": 4, "paragraphs": [ "##### Create Autosuggest View Controller", "1. In your project, add new SwiftUI View and name it MapplsAutocompleteViewControllerSwiftUIView.swift 2. In order to use native UIKit view controller in SwiftUI view, you must use UIViewControllerRepresentable wrapper. The instance of custom type which adopts UIViewControllerRepresentable protocol is responsible for creation and management a UIViewController object in your SwiftUI interface.", "3. The UIViewControllerRepresentable requires to implement makeUIViewController(context:) method that creates the instance of with the desired UIKit view. Add the following code to create map view instance", "4. The UIViewControllerRepresentable view also requires to implement updateUIViewController(:context:) which is used to configure the newly created instance. To show autosuggest only We dont need to configure anything so we will keep it empty.", "5. To use selected place from results of autosuggest add below property code as shown above:", "6. Use below code to create SwiftUIView to consume in another View." ] }, { "title": "Add a results controller", "level": 3, "paragraphs": [ "Use a results controller when you want more control over the text input UI. The results controller dynamically toggles the visibility of the results list based on input UI focus.", "To add a results controller to your app:", "1. Create a MapplsAutocompleteResultsViewController. 1. Implement the MapplsAutocompleteResultsViewControllerDelegate protocol in the parent view controller and assign the parent view controller as the delegate property. 1. Create a UISearchController object, passing in the MapplsAutocompleteResultsViewController as the results controller argument. 1. Set the MapplsAutocompleteResultsViewController as the searchResultsUpdater property of the UISearchController. 1. Add the searchBar for the UISearchController to your app's UI. 1. Handle the user's selection in the didAutocompleteWithPlace delegate method.", "There are several ways to place the search bar of a UISearchController into your app's UI:", "• Add a search bar to the navigation bar Add a search bar to the top of a view" ] }, { "title": "Add a search bar to the navigation bar", "level": 4, "paragraphs": [ "The following code example demonstrates adding a results controller, adding the searchBar to the navigation bar, and handling the user's selection:", "Note: For the search bar to display properly, your app's view controller must be enclosed within a UINavigationController." ] }, { "title": "Add a search bar to the top of a view", "level": 4, "paragraphs": [ "The following code example shows adding the searchBar to the top of a view." ] }, { "title": "Use a table data source", "level": 3, "paragraphs": [ "You can use the MapplsAutocompleteTableDataSource class to drive the table view of a UISearchDisplayController.", "To use MapplsAutocompleteTableDataSource to display a search controller:", "1. Implement the MapplsAutocompleteTableDataSourceDelegate and UISearchDisplayDelegate protocols in the parent view controller. 1. Create a MapplsAutocompleteTableDataSource instance and assign the parent view controller as the delegate property. 1. Create an instance of UISearchDisplayController. 1. Add the searchBar for the UISearchController to your app's UI. 1. Handle the user's selection in the didAutocompleteWithPlace delegate method. 1. Dismiss the controller in the didAutocompleteWithPlace, didFailAutocompleteWithError, and wasCancelled delegate methods.", "The following code example demonstrates using the MapplsAutocompleteTableDataSource class to drive the table view of a UISearchDisplayController." ] }, { "title": "Get place predictions programmatically", "level": 3, "paragraphs": [ "You can create a custom search UI as an alternative to the UI provided by the autocomplete widget. To do this, your app must get place predictions programmatically. Your app can get a list of predicted place names and/or addresses by using Mappls's library MapplsAPIKit. For more information Goto." ] }, { "title": "MapplsAutocompleteFilter", "level": 3, "paragraphs": [ "This class represents a set of restrictions that may be applied to autocomplete requests. This allows customization of autocomplete suggestions to only those places that are of interest." ] }, { "title": "Parameters:", "level": 4, "paragraphs": [ "A location to use as a hint when looking up the specified address.", "This property prioritizes results that are close to a specific location, which is typically the user’s current location. If the value of this property is nil – which it is by default – no specific location is prioritized.", "Zoom level to a location to use as a hint when looking up the specified address.", "It allows to get tokenize address in response. By default its value is false. If value true is passed then only in response of MapplsAtlasSuggestion addressTokens will be recieved which is of type MapplsAddressTokens", "On basis of this only specific type of Places in response will be returned.", "Its data type is MapplsPodType which is derived from MapplsAPIKit" ] }, { "title": "Favourite Places", "level": 3, "paragraphs": [ "Favourite or Custom Places can be set to show in result of Autosuggest.", "By default on searching by entering any text favourites will also be filtered. Filtering can be disabled by setting value false of global boolean property IsSearchFavouritesEnabled. By disabling it means it will always show favourites in results.", "By default maximum two favourites will be shown in results. This can be configured by setting value of property FavouritesCountToShow. Its default value is 2. Minimum value can be 0 and maximum can be 10.", "Below is line of code can be used to set favourite places.", "Callback of selected favourite item can be handled using different delegate methods. See here." ] }, { "title": "Theme", "level": 2, "paragraphs": [ "To change the theme of default search widget in the initilizer of MapplsAutocompleteViewController theme can set selected." ] }, { "title": "Place Picker View", "level": 2, "paragraphs": [ "The Place Picker View is a UIView component that allows a user to pick a Place using an interactive map.", "Users can select a location which from center of map after succesfully reverse geocoding that location.", "PlacePickerView is class whose instance can be created and can be added to ViewController. Below is sample code to understand:" ] }, { "title": "PlacePickerViewDelegate", "level": 3, "paragraphs": [ "As from above sample code PlacePickerViewDelegate is a protocol class which provides different delegate methods which can be used according to requirements." ] }, { "title": "Customize Place Picker", "level": 3, "paragraphs": [ "On adding instance of PlacePickerView it will load a default view with a map marker image on map But default view can be modified with help of some properties which are described as below:", "View of marker on map can be ovrriden by using property 'markerView'. This is type of UIView so it can accept custom designed view and UIImageView as well.", "isMarkerShadowViewHidden:", "A shadow of marker is shows by defualt on dragging map. Visibility of this shadow can be changed by using property 'isMarkerShadowViewHidden'.", "searchButtonBackgroundColor:", "Background color of search button can be changed by using property 'searchButtonBackgroundColor'." ] }, { "title": "Premium Features", "level": 3, "paragraphs": [ "The Place Picker widget has the capability to showcase certain premium features if they are provisioned within your project, like:" ] }, { "title": "Highlighting a Building", "level": 4, "paragraphs": [ "If the selected point on the map falls within a building, then Mappls Place Picker can also highlight the said building on the map. This visualization's color palette is configurable within the Mappls Map SDK.", "In order to access this feature, please contact API support as well as your Business relationship manager.", "Properties related to these feature are:", "isBuildingFootprintEnabled:", "This is a boolean property. By setting its value the ability to highlight the footprint of a building can be enabled or disabled if it is povisioned for your project.", "buildingAppearance:" ] }, { "title": "MapplsAttributionsSettings", "level": 3, "paragraphs": [ "A class MapplsAttributionsSettings is exist which represents a set of settings that can be applied to autocomplete to control appearance (Content Length, Size, Horizontal Content Alignment and Vertical Placement) of attribution. Appearance of attribution on can be controlled by different properties of MapplsAttributionsSettings." ] } ], "snippets": [ { "language": "Swift", "label": "Add a full-screen control", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n override func viewDidLoad() {\n makeButton()\n }\n\n // Present the Autocomplete view controller when the button is pressed.\n @objc func autocompleteClicked(_ sender: UIButton) {\n let autocompleteController = MapplsAutocompleteViewController(theme: .auto)\n autocompleteController.delegate = self\n\n // Specify a filter.\n let filter = MapplsAutocompleteFilter()\n autocompleteController.autocompleteFilter = filter\n\n // Display the autocomplete view controller.\n present(autocompleteController, animated: true, completion: nil)\n }\n\n // Add a button to the view.\n func makeButton() {\n let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35))\n btnLaunchAc.backgroundColor = .blue\n btnLaunchAc.setTitle(\"Launch autocomplete\", for: .normal)\n btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside)\n self.view.addSubview(btnLaunchAc)\n }\n\n}\n\nextension ViewController: MapplsAutocompleteViewControllerDelegate {\n\n // Handle the user's selection.\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n dismiss(animated: true, completion: nil)\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n \n func didRequestForAutoSearchOptions(options: MapplsAutoSearchAtlasOptions) -> MapplsAutoSearchAtlasOptions {\n return options\n }\n \n func didRequestForTextSearchOptions(options: MapplsTextSearchAtlasOptions) -> MapplsTextSearchAtlasOptions {\n return options\n }\n\n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // User canceled the operation.\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n dismiss(animated: true, completion: nil)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIWrapper: UIViewControllerRepresentable {\n ...\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Environment(\\.presentationMode) var presentationMode\n\n func makeUIViewController(context: UIViewControllerRepresentableContext) -> MapplsAutocompleteViewController {\n let autocompleteViewController = MapplsAutocompleteViewController() \n autocompleteViewController.delegate = context.coordinator\n return autocompleteViewController\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func updateUIViewController(_ uiViewController: MapplsAutocompleteViewController, context: UIViewControllerRepresentableContext) {\n\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Binding var placeSuggestion: MapplsAtlasSuggestion?" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIView: View {\n @Binding var placeSuggestion: MapplsAtlasSuggestion?\n \n var body: some View {\n MapplsAutocompleteViewControllerSwiftUIWrapper(placeSuggestion: $placeSuggestion)\n .navigationBarHidden(true)\n }\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "class Coordinator: NSObject, UINavigationControllerDelegate, MapplsAutocompleteViewControllerDelegate {\n var parent: MapplsAutocompleteViewControllerSwiftUIWrapper\n \n init(_ parent: MapplsAutocompleteViewControllerSwiftUIWrapper) {\n self.parent = parent\n }\n \n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n \n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n DispatchQueue.main.async {\n print(place.description.description as Any)\n self.parent.presentationMode.wrappedValue.dismiss()\n self.parent.placeSuggestion = place\n }\n }\n \n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n print(\"Error: \", error.localizedDescription)\n }\n\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n parent.presentationMode.wrappedValue.dismiss()\n }\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func makeCoordinator() -> MapView.Coordinator {\n Coordinator(self)\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "autocompleteViewController.delegate = context.coordinator" }, { "language": "Swift", "label": "Add a search bar to the navigation bar", "code": "class ViewController: UIViewController {\n\n var resultsViewController: MapplsAutocompleteResultsViewController?\n var searchController: UISearchController?\n var resultView: UITextView?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n resultsViewController = MapplsAutocompleteResultsViewController()\n resultsViewController?.delegate = self\n\n searchController = UISearchController(searchResultsController: resultsViewController)\n searchController?.searchResultsUpdater = resultsViewController\n\n // Put the search bar in the navigation bar.\n searchController?.searchBar.sizeToFit()\n navigationItem.titleView = searchController?.searchBar\n\n // When UISearchController presents the results view, present it in\n // this view controller, not one further up the chain.\n definesPresentationContext = true\n\n // Prevent the navigation bar from being hidden when searching.\n searchController?.hidesNavigationBarDuringPresentation = false\n }\n}\n\n// Handle the user's selection.\nextension ViewController: MapplsAutocompleteResultsViewControllerDelegate {\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n searchController?.isActive = false\n // Do something with the selected place.\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didFailAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictionsForResultsController(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictionsFor(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n}" }, { "language": "Swift", "label": "Add a search bar to the top of a view", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n var resultsViewController: MapplsAutocompleteResultsViewController?\n var searchController: UISearchController?\n var resultView: UITextView?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n resultsViewController = MapplsAutocompleteResultsViewController()\n resultsViewController?.delegate = self\n\n searchController = UISearchController(searchResultsController: resultsViewController)\n searchController?.searchResultsUpdater = resultsViewController\n\n let subView = UIView(frame: CGRect(x: 0, y: 65.0, width: 350.0, height: 45.0))\n\n subView.addSubview((searchController?.searchBar)!)\n view.addSubview(subView)\n searchController?.searchBar.sizeToFit()\n searchController?.hidesNavigationBarDuringPresentation = false\n\n // When UISearchController presents the results view, present it in\n // this view controller, not one further up the chain.\n definesPresentationContext = true\n }\n}\n\n// Handle the user's selection.\nextension ViewController: MapplsAutocompleteResultsViewControllerDelegate {\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n searchController?.isActive = false\n // Do something with the selected place.\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didFailAutocomplete(resultsController: MapplsAutocompleteResultsViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictionsForResultsController(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictionsFor(resultsController: MapplsAutocompleteResultsViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n}" }, { "language": "Swift", "label": "Use a table data source", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController, UISearchDisplayDelegate {\n\n var searchBar: UISearchBar?\n var tableDataSource: MapplsAutocompleteTableDataSource?\n var searchDisplayController: UISearchDisplayController?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n searchBar = UISearchBar(CGRect(x: 0, y: 0, width: 250.0, height: 44.0))\n\n tableDataSource = MapplsAutocompleteTableDataSource()\n tableDataSource?.delegate = self\n\n searchDisplayController = UISearchDisplayController(searchBar: searchBar!, contentsController: self)\n searchDisplayController?.searchResultsDataSource = tableDataSource\n searchDisplayController?.searchResultsDelegate = tableDataSource\n searchDisplayController?.delegate = self\n\n view.addSubview(searchBar!)\n }\n\n func didUpdateAutocompletePredictionsForTableDataSource(tableDataSource: MapplsAutocompleteTableDataSource) {\n // Turn the network activity indicator off.\n UIApplication.sharedApplication().networkActivityIndicatorVisible = false\n // Reload table data.\n searchDisplayController?.searchResultsTableView.reloadData()\n }\n\n func didRequestAutocompletePredictionsFor(tableDataSource: MapplsAutocompleteTableDataSource) {\n // Turn the network activity indicator on.\n UIApplication.sharedApplication().networkActivityIndicatorVisible = true\n // Reload table data.\n searchDisplayController?.searchResultsTableView.reloadData()\n }\n\n}\n\nextension ViewController: MapplsAutocompleteTableDataSourceDelegate {\n func didAutocomplete(tableDataSource: MapplsAutocompleteTableDataSource, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n searchDisplayController?.active = false\n // Do something with the selected place.\n print(\"Place name: \\(place.name)\")\n print(\"Place address: \\(place.formattedAddress)\")\n print(\"Place attributions: \\(place.attributions)\")\n }\n\n func didAutocomplete(tableDataSource: MapplsAutocompleteTableDataSource, withFavouritePlace place: MapplsUIWidgets.MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didFailAutocomplete(tableDataSource: MapplsAutocompleteTableDataSource, withError error: NSError) {\n // TODO: Handle the error.\n print(\"Error: \\(error.description)\")\n }\n}" }, { "language": "Swift", "label": "Favourite Places", "code": "MapplsUIWidgetAutosuggestFavouritePlaces = [\n MapplsUIWidgetAutosuggestFavouritePlace(placeName: \"MapmyIndia\", placeAdress: \"Okhla Phase 3, Delhi\", mapplsPin: \"mmi000\"),\n MapplsUIWidgetAutosuggestFavouritePlace(placeName: \"India Gate\", placeAdress: \"Delhi, New Delhi\", mapplsPin: \"1t182a\")\n ]\n\nMapplsUIWidgets.IsSearchFavouritesEnabled = false\n\nMapplsUIWidgets.FavouritesCountToShow = 5" }, { "language": "Swift", "label": "Theme", "code": "let mapplsAutocompleteViewController = MapplsAutocompleteViewController(theme: .auto)\n present(mapplsAutocompleteViewController, animated: true, completion: nil)" } ], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://about.mappls.com/api/advanced-maps/doc/autosuggest-api).", "https://github.com/mappls-api/mappls-api-core-ios-distribution.git", "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base.git", "https://github.com/mappls-api/mappls-map-ios-distribution-base.git", "https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).", "https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable", "https://developer.apple.com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/).", "https://www.mapmyindia.com/api/img/logos1/PhonePe.png)![](https://www.mapmyindia.com/api/img/logos1/Arya-Omnitalk.png)![](https://www.mapmyindia.com/api/img/logos1/delhivery.png)![](https://www.mapmyindia.com/api/img/logos1/hdfc.png)![](https://www.mapmyindia.com/api/img/logos1/TVS.png)![](https://www.mapmyindia.com/api/img/logos1/Paytm.png)![](https://www.mapmyindia.com/api/img/logos1/FastTrackz.png)![](https://www.mapmyindia.com/api/img/logos1/ICICI-Pru.png)![](https://www.mapmyindia.com/api/i", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://www.mappls.com/about/privacy-policy" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 30, "endpointCount": 28, "codeSampleCount": 14, "fingerprint": "e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22" } } ``` ## source-reference · Sign up for Mappls - Identity: `source-reference:mappls-web-maps` - Canonical: https://developer.mappls.com/reference/mappls-web-maps - State model: stateless ```json { "slug": "mappls-web-maps", "sourceId": "public-mappls-web-maps", "name": "mappls-web-maps", "title": "Sign up for Mappls", "summary": "A Mappls guide for maps, search places, routes navigation, gis analytics, widgets deep links, capture feedback, identity platform across Web.", "kind": "Guide", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Web" ], "authSignals": [ "licensed-entitlement" ], "languages": [ "JavaScript" ], "repositoryUrl": "https://github.com/mappls-api/mappls-web-maps", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-web-maps/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-web-maps/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-08-05T08:57:52Z", "localCandidates": [], "prerequisites": [ "A browser application and an allowed development origin", "The corresponding product entitlement enabled for the developer application" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Easy To Integrate Maps & Location APIs & SDKs For Web & Mobile Applications.", "Our APIs, SDKs, and live updating map data available for 200+ nations and territories give developer-friendly, easy-to-integrate plugins to add capabilities like intelligent search and routes on map, to your web or mobile applications.", "Create your own Angular/React/Ionic/Cordova Based native app powered by Mappls Maps and deploy them to various platforms be it web or native mobile platforms." ] }, { "title": "Sign up for Mappls", "level": 1, "paragraphs": [ "Not a mappls user yet? Sign up for an account here. Once you’re signed in, all you need to start building is a mappls key. You can create and manage your access tokens on your Mappls Account page." ] }, { "title": "API Usage", "level": 2, "paragraphs": [ "Your MapmyIndia Maps SDK usage needs a set of license keys (get them here ) and is governed by the API terms and conditions. As part of the terms and conditions, you cannot remove or hide the MapmyIndia logo and copyright information in your project. Please see branding guidelines on MapmyIndia website for more details. The allowed hits are described on the plans page. Note that your usage is shared between platforms, so the API hits you make from a web application, Android app or an iOS app all add up to your allowed daily limit." ] }, { "title": "Supported Technologies", "level": 3, "paragraphs": [ "• Node.js - Angular - React JS - Cordova - Ionic" ] }, { "title": "Supported Platforms", "level": 3, "paragraphs": [ "• Web - Android - iOS" ] }, { "title": "Components", "level": 3, "paragraphs": [ "• Map - Properties - Methods - Events - Markers - Adding a marker - Marker Methods - Marker Events - Adding Multiple Markers - InfoWindows - Polylines - Polygons - Circle - Overlays - Geojson - KML - Heat Map" ] }, { "title": "Plugins", "level": 3, "paragraphs": [ "• Place Search - Place Picker - Nearby Search - Directions - getDistance - marker-plugin - Eloc-Plugin - routeSummary Plugin" ] }, { "title": "Import Package", "level": 3, "paragraphs": [ "• Angular : Import mappls class from mappls-web-maps package i.e. app.component.ts ( or other component of your use case ) .", "• React JS : Import mappls class from \"mappls-web-maps\" package inside app.js ( or other component of your use case )." ] }, { "title": "Loading a Map", "level": 3, "paragraphs": [ "• Angular / Cordova / Ionic", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [ { "language": "JavaScript", "label": "Installation", "code": "npm i mappls-web-maps" }, { "language": "JavaScript", "label": "Import Package", "code": "import { mappls, mappls_plugin } from 'mappls-web-maps';" }, { "language": "JavaScript", "label": "Import Package", "code": "import { mappls, mappls_plugin } from 'mappls-web-maps'" }, { "language": "JavaScript", "label": "Loading a Map", "code": "import { Component, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { mappls, mappls_plugin } from 'mappls-web-maps';\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [CommonModule],\n template: `\n
\n
\n`,\n})\nexport class AppComponent implements OnInit {\n mapobject:any\n mapplsClassObject:any= new mappls()\n mapplsPluginObject:any= new mappls_plugin()\n title = 'Map_angular';\n\n\n ngOnInit() {\n const loadObject = {\n map: true,\n layer: 'raster', // Optional Default Vector\n version: '3.0', // Optional, other version 3.5 also available with CSP headers\n libraries: ['airspacelayers'], // Optional for Polydraw and airspaceLayers\n plugins: ['direction'], // Optional for any plugins\n //auth:'legacy' /*Use only when you have legacy mappls token*/ \n\n };\n\n this.mapplsClassObject.initialize(\n '---------------Token------------------',\n loadObject,\n () => {\n this.mapobject = this.mapplsClassObject.Map({\n id: 'map',\n properties: {\n center: [28.61, 77.23],\n zoomControl: true,\n location: true,\n },\n });\n }\n \n );\n }\n}" }, { "language": "JavaScript", "label": "Loading a Map", "code": "import { mappls, mappls_plugin } from \"mappls-web-maps\";\nimport { useEffect, useRef, useState } from \"react\";\n\nconst mapplsClassObject = new mappls();\nconst mapplsPluginObject = new mappls_plugin();\n\n\nconst App = () => {\n const mapRef = useRef(null);\n const [isMapLoaded, setIsMapLoaded] = useState(false);\n\n const loadObject = { \n map: true, \n layer: 'raster', // Optional Default Vector\n version: '3.0', // // Optional, other version 3.5 also available with CSP headers\n libraries: ['polydraw'], //Optional for Polydraw and airspaceLayers\n plugins:['direction'] // Optional for All the plugins\n};\n\n useEffect(() => {\n mapplsClassObject.initialize(\"--------Token-------\", loadObject, () => {\n const newMap = mapplsClassObject.Map({\n id: \"map\",\n properties: {\n center: [28.633, 77.2194],\n zoom: 4,\n },\n });\n\n newMap.on(\"load\", () => {\n setIsMapLoaded(true);\n });\n mapRef.current = newMap;\n });\n return () => {\n if (mapRef.current) {\n mapRef.current.remove();\n }\n };\n }, []);\n\n return (\n \n {isMapLoaded}\n \n );\n};\n\nexport default App;" } ], "endpointEvidence": [ "https://about.mappls.com/api/maps", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://auth.mappls.com/console/", "https://github.com/mamtasharma117", "https://github.com/prabhjot729", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/map.md", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/map.md#1-properties", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/map.md#2-map-methods", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/map.md#3--map-events----listening-to-map-events", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/markers.md", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/markers.md#1--adding-a-marker", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/markers.md#2-marker-methods", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/markers.md#3-marker-events", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/markers.md#iv-adding-multiple-markers", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/infowindow.md", "https://github.com/mappls-api/mappls-web-maps/blob/main/components/polyline.md" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 44, "codeSampleCount": 5, "fingerprint": "6d102a2fe3c3301e12220a398532907422a24f3ed273877c12f50c754786581c" } } ``` ## source-reference · Mappls Web Maps JS - Identity: `source-reference:mappls-web-maps-js` - Canonical: https://developer.mappls.com/reference/mappls-web-maps-js - State model: stateless ```json { "slug": "mappls-web-maps-js", "sourceId": "public-mappls-web-maps-js", "name": "mappls-web-maps-js", "title": "Mappls Web Maps JS", "summary": "Mappls's Latest Vector Maps Web SDK for rendering beautifully interactive, fluid maps that are powered by browser based WebGL.", "kind": "Guide", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Web" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "languages": [ "HTML", "Text", "JavaScript" ], "repositoryUrl": "https://github.com/mappls-api/mappls-web-maps-js", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-web-maps-js/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-web-maps-js/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-01-28T10:45:36Z", "localCandidates": [], "prerequisites": [ "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch." ] }, { "title": "Mappls Web Maps JS", "level": 1, "paragraphs": [ "Explore the largest Mappls directory of APIs & SDKs for maps, routes and search.", "Our APIs, SDKs, and live updating map data available for 200+ countries & territories to give developer's tool to build better mapping, navigation, and search experiences across different platforms.", "This page will be continually enhanced to offer more insights and reference materials on how to best utilize our Vector Maps JS SDK for Web.", "You can get your api key to be used for access here: https://auth.mappls.com/console" ] }, { "title": "Table Of Content", "level": 2, "paragraphs": [ "• Mappls Web Maps JS - Introduction - Web Map Features - Getting Access - Authentication Object - accesstoken mandatory query parameter. - Getting Started - Understanding Map Methods, Events \\& Properties - Adding the Map Script to your web page - Map Methods, Events \\& Properties - Markers - Types of Markers - Marker Implementation - Marker Methods,Events \\& Properties - Markers Quick Reference: - View Sample Codes for Quick Reference - Heat Map Overlays - HeatMap Quick Reference - Add Geojson layer - Geojson Quick Reference - KML Overlay - Important Notes to remember - Info Windows - Types of Information windows - Info Window Quick Reference - Feature Classes - Polylines - Polyline Quick Reference - Check out our vast list of sample codes for different polylines styles. - Polygons - Polygon Quick Reference - Check out our vast list of sample codes for polygons. - Circles - Circle Quick", "| Version | Remarks | Author | |--|--|--| | 1.0 | Initial Commit |Mappls API Team (PK)|" ] }, { "title": "Introduction", "level": 2, "paragraphs": [ "The Mappls Web Maps JavaScript SDK is a tool that enables the creation and customization of interactive maps for both India and the global context. Developed by Mappls (MapmyIndia) India's leading Map provider, this SDK is designed to produce mobile-friendly maps with a user-friendly interface and excellent performance. It consists of a set of classes and functions that allow developers to incorporate a wide range of map features into their web and mobile applications." ] }, { "title": "Web Map Features", "level": 2, "paragraphs": [ "• Zoom: A map of India that can be panned or scrolled, allowing users to explore it in various levels of detail. The highest level of detail is achieved at a zoom level of 22, while the lowest level provides a global view at zoom level 1. - Overlays: We recognize the significance of maps in businesses, and that's why, at Mappls, we offer pre-made overlays that can be easily integrated into your code, streamlining the process and reducing the need for repetitive code. - Map Markers (Pushpins): You can pinpoint any location using the default map markers (pushpin) feature, and then you have the flexibility to customize its appearance to align with the unique style of your application. Check out the Plug-ins section for additional enhancements that can elevate your customization options. - Info Windows (Pop-ups): When a user clicks on a pushpin, an information window automatically appears, a", "Note:The location settings must be turned on and must allow the site to fetch the location for this control to work.", "Please Note: Mappls(MapmyIndia) may extend and enhance functionality for its interactive map API in future, which will be documented in this section, and which will be available through the Mappls." ] }, { "title": "Getting Access", "level": 2, "paragraphs": [ "Before using the API in the your solution, please ensure that the related access is enabled in the Mappls Console, within your app - be it for Mobile OR Web or Cloud integration.", "1. Copy and paste the key from your credentials section from your API keys into the accesstoken query parameter. - Your static key can be secured by whitelisting its usage for particular IPs (in case of cloud app usage) OR a set of domains (in case of a web app) - Your static key obtained from your Console is to be passed as a query parameter: accesstoken." ] }, { "title": "Authentication Object - accesstoken mandatory query parameter.", "level": 2, "paragraphs": [ "• accesstoken: \"hklmgbwzrxncdyavtsuojqpiefrbhqplnm\"." ] }, { "title": "Getting Started", "level": 2, "paragraphs": [ "Now that you’re all caught up with the features let’s get down right to them implementing and look at how can you integrate our interactive Map to your Website from scratch." ] }, { "title": "Understanding Map Methods, Events & Properties", "level": 2, "paragraphs": [ "Mappls Live Demo | CodePen Implementation", "The easiest way to start loading maps in a web page is with a “Hello World” sample code, you can download or view a working “Hello World” sample from the links for adding your first marker below." ] }, { "title": "Adding the Map Script to your web page", "level": 4, "paragraphs": [ "Follow the below steps to integrate Mappls interactive Maps into your existing code base or even a File -> New Project. - Declare application as HTML5: Define on top of your HTML. - Integrate Interactive maps from Mappls into your browser application by simply including Mappls's interactive map API in your script source in the head section.", "Important: - Please ensure that you insert your static key in place of - v: This is the version. Please keep as the latest version: 3.0. - layer: The type of map applicable for the project. The default is vector. Alternate value is raster.", "Please discuss with apisupport@mappls.com for futher clarification and support.", "• Define style in the head section to load your CSS. CSS can be defined as per the developers requirement (Extenal, Internal and inline)", "• Define a div object in the body tag of the HTML where you want the Mappls Map to show up.", "• Initialize a Mappls Map by simply calling new Mappls.Map() in the JavaScript and passing it at the minimum, the div object in which you want the map populated. (All other parameters are optional.)" ] }, { "title": "Map Methods, Events & Properties", "level": 3, "paragraphs": [ "• Map Properties - Map Methods - Map Events" ] }, { "title": "Markers", "level": 2, "paragraphs": [ "Utilizing markers to pinpoint locations is a hassle-free approach. You have the option to use the markers we provide as the default choice, and if you wish to use your own custom markers, we've got that aspect covered as well." ] }, { "title": "Types of Markers", "level": 3, "paragraphs": [ "• Stock Markers: The one you get out of the box using our Interactive Vector Maps SDK and you can select from a lot of choices. - Custom Marker: In case you want to add your own markers, we’ve handled that for you as well. - HTML Marker: In case you don’t want to add in an image you can use HTML to create a marker and then plot it on the map as well.", "For more details, please read article in Markers" ] }, { "title": "Marker Implementation", "level": 3, "paragraphs": [ "Mappls Live Demo | Code Pen Implementation", "The easiest way to start loading maps with simple markers in a web page is with sample code given on the link above, you can download or view a working sample with your authorized access keys.", "Method to add marker on map" ] }, { "title": "Marker Methods,Events & Properties", "level": 3, "paragraphs": [ "You can fine-tune the map methods, events and properties we offer to align with your unique requirements and amplify the level of customization for your map layer. These functions serve as a handy resource for promptly addressing specific events or scenarios." ] }, { "title": "Markers Quick Reference:", "level": 3, "paragraphs": [ "• Marker Properties - Marker Methods", "• Multiple Marker with cluster", "• GeoJSON Bulk Marker" ] }, { "title": "View Sample Codes for Quick Reference", "level": 3, "paragraphs": [ "• Advance Cluster Marker", "• Marker using HTML", "• Marker with Custom Popup", "• Marker with Popup", "• Multiple Marker using GeoJSON" ] }, { "title": "Heat Map Overlays", "level": 2, "paragraphs": [ "For details , please read article in Heatmap Overlays", "Mappls Live Demo | Code Pen Implementation" ] }, { "title": "HeatMap Quick Reference", "level": 3, "paragraphs": [ "• Heatmap on Click", "• Heatmap on Overmouse", "• Heatmap Properties" ] }, { "title": "Add Geojson layer", "level": 2, "paragraphs": [ "For details, please read article in GeoJSON", "Mappls Live Demo | Code Pen Implementation", "GeoJSON Supports marker, polyline and polygon addition and Style properties", "Marker Property support in geojson", "1. description 2. icon 3. icon-size 4. icon-offset 5. text 6. text-size 7. text-offset", "Polyline Property support in geojson:" ] }, { "title": "Geojson Quick Reference", "level": 3, "paragraphs": [ "• Dashed Polyline Using GeoJson", "• Multi Colored Dashed Polyline Using GeoJson", "• Multiple Marker Using Geojson", "• Add GeoJSON Properties", "Remove Layer Method" ] }, { "title": "KML Overlay", "level": 2, "paragraphs": [ "KML: Keyhole Markup Language is a file format employed to showcase geographical data on maps. With this plugin, you have the capability to superimpose KML data onto Mappls Maps for web applications.", "Mappls Live Demo | Code Pen Implementation" ] }, { "title": "Important Notes to remember", "level": 4, "paragraphs": [ "1. Only KML data supported. 2. KML file must have absolute path or raw KML string (in variable or in textbox) 3. All internal URL's path must be absolute. (for icon path etc) 4. File must not be password protected. 5. File must be CORS enabled from the server where they are hosted. 6. File must follow KML standard strictly.", "• KML Properties: #KML-Properties", "For details, please read article in KML Overlay" ] }, { "title": "Info Windows", "level": 2, "paragraphs": [ "Mappls Live Demo | Code Pen Implementation", "Info Windows provide a user-friendly method for displaying information related to a marker, essentially explaining the purpose of that marker. When users encounter a marker, their natural instinct is to click on it to discover more details, and presenting an info window is the ideal approach to fulfill this expectation.", "Please Note: Our JS supports a default info window that you can leverage but we want you to have an option to customize your info window to fit in with your UI and you can do so by manipulating the CSS.", "For a quick sample or a demo you can follow up with the links on live Demo", "For more details , please read article in Info Windows" ] } ], "snippets": [ { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "
;" }, { "language": "JavaScript", "label": "Adding the Map Script to your web page", "code": "map = new mappls.Map('map', {center:{lat:28.612964,lng:77.229463} });" }, { "language": "JavaScript", "label": "Marker Implementation", "code": "var marker = new mappls.Marker({\n map: map,\n position: {\"lat\": 28.519467,\"lng\":77.223150}\n\t});" }, { "language": "JavaScript", "label": "Add Geojson layer", "code": "new mappls.addGeoJson({map:map,data:geoData,fitbounds:true,cType:0});" }, { "language": "JavaScript", "label": "Geojson Quick Reference", "code": "new mappls.remove({map:map,layer:jsonData});" }, { "language": "JavaScript", "label": "Important Notes to remember", "code": "var url=\"https://www.mappls.com/api/advanced-maps/doc/sample/mmi.kml\";\n Mappls.KmlLayer({map:map,url:url,cType:1,fitbounds:true,fitboundOptions:{padding:200}});" }, { "language": "JavaScript", "label": "Polyline Quick Reference - Check out our vast list of sample codes for", "code": "mappls.remove({map: map, layer: polyline);" }, { "language": "JavaScript", "label": "Circles", "code": "mappls.Circle()" } ], "endpointEvidence": [ "https://github.com/mappls-api/mappls-web-maps-js/tree/main", "https://github.com/mappls-api/mappls-web-maps-js/tree/auth-legacy", "https://about.mappls.com/api", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://auth.mappls.com/console](https://auth.mappls.com/console", "https://github.com/prabhjot729/", "https://auth.mappls.com/console/", "https://about.mappls.com/api/web-sdk/vector-map-auth2/Maps/mappls-default-map", "https://codepen.io/mappls/pen/xbwYobr", "https://sdk.mappls.com/map/sdk/web?v=3.0&access_token=REDACTED", "https://about.mappls.com/api/web-sdk/vector-map-auth2/Markers/mappls-singlemarker", "https://codepen.io/mappls/pen/NPGzEOJ", "https://about.mappls.com/api/web-sdk/vector-map-auth2/Markers/mappls-multiplemarker", "https://about.mappls.com/api/web-sdk/vector-map-auth2/Markers/mappls-advancecluster", "https://about.mappls.com/api/web-sdk/vector-map-auth2/Markers/mappls-bouncing-marker", "https://about.mappls.com/api/web-sdk/vector-map-auth2/Markers/mappls-cluster" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 34, "endpointCount": 80, "codeSampleCount": 10, "fingerprint": "5b7bd5c66a780e8315d64bec5d8e54f375c1ff1f24b536e9bfda9691031ad5a6" } } ``` ## source-reference · Mappls Web Plugins - Identity: `source-reference:mappls-web-plugins` - Canonical: https://developer.mappls.com/reference/mappls-web-plugins - State model: stateless ```json { "slug": "mappls-web-plugins", "sourceId": "public-mappls-web-plugins", "name": "mappls-web-plugins", "title": "Mappls Web Plugins", "summary": "Web plugins provided by Mappls. This library is compatible with both our Web SDKs - Vector Maps & our legacy Raster Maps.", "kind": "Widget", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Web", "Widgets/Deep links" ], "authSignals": [ "static-key-2025", "oauth2", "api-key" ], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-web-plugins", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-web-plugins/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-web-plugins/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-07-17T10:50:05Z", "localCandidates": [], "prerequisites": [ "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend" ], "sections": [ { "title": "Important Note – Please read first", "level": 2, "paragraphs": [ "The main branch contains the documentation for releases using the updated Authorization & Authentication mechanism introduced in August 2025. > If you wish to use the releases that use the legacy authentication method based on OAuth 2.0, please refer to the auth-legacy branch." ] }, { "title": "Mappls Web Plugins", "level": 1, "paragraphs": [ "Mappls Web plugins is a JavaScript library for interactive maps provided by Mappls. This library is compatible with both our Web SDKs - Vector Maps & our legacy Raster Maps.", "MAPPLS will be there in every step of the way, building new tools that help you navigate, explore and get things done, wherever you are and users can touch or interact with map features clearly overlaid on your view of the world.", "Our APIs, SDKs, and live updating map data available for 200+ nations and territories give developer-friendly, easy-to-integrate plugins to add capabilities like intelligent search and routes on map, to your web or mobile applications.", "You can get your api key to be used in this document here from: Mappls Console" ] }, { "title": "Key Features", "level": 3, "paragraphs": [ "• Get the best places suggestions as per user input strings before the user completes the desired place name.", "• Enables consumer apps and enterprise solutions to give the address/place suggestion around a user’s location", "• Indic Support (Hindi currently) - Can be configured to provide human readable address from a pin on the map in Hindi.", "• Available with many inbuilt configurations Read More" ] }, { "title": "Key Features", "level": 3, "paragraphs": [ "• Integrated Place Search - Mappls Place Picker already has integrated Place Search plugin within it. Hence it offers all the features of Place Search along with few additional functionalities.", "• Indic Support (Hindi currently) - Can be configured to provide human readable address from a pin on the map in Hindi.", "• Available with many inbuilt configurations. Read More" ] }, { "title": "Key Features", "level": 3, "paragraphs": [ "• Highly Customizable and easy to integrate.", "• Benefit from being able to easily find nearby places such as Hotels, Restaurants, ATMs, Hospitals etc and to see them on a map.", "• Already empowered with Real Time Updates and HyperLocal Search.", "• Indic Support (Hindi currently) - Can be configured to provide human readable address from a pin on the map in Hindi.", "• Available with many inbuilt configurations which makes using this plugin more and more reliable. Read More" ] }, { "title": "Key Features", "level": 3, "paragraphs": [ "• Multiple Profiles like driving , biking, walking and trucking etc. Read more)", "• Inbuilt Search to select locations - Search Anything anywhere! along with advanced search options.", "• Inbuilt Search along the Route : Use default POI categories OR select across other categories available with us. Read more", "• Change the route with any selected Via locations", "• Provides accurate turn-by-turn guidance throughout the route", "• Can be configured to include traffic delays to derive ETAs in route calculations" ] }, { "title": "Marker Plugin", "level": 2, "paragraphs": [ "A simple plugin to render places on map as point markers. The Marker plugin for Mappls Web Map JS library is provided as a means to enable rendering of searched Places via Mappls PIN (eLoc) as markers on top of Mappls Maps. Read more" ] }, { "title": "getDistance Method", "level": 2, "paragraphs": [ "This method, offered by Mappls Web Plugins, computes the routable distance and duration between a set of source/primary positions and a list of all supplied secondary positions using two mode of route calculation i.e. optimal OR shortest." ] }, { "title": "Place Detail Plugin", "level": 2, "paragraphs": [ "A simple plugin / widget to render details of a particular place. The Place Details plugin for Mappls Web Map JS library is provided as a means to enable rendering of Mappls Places on Mappls Maps. Read more", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!", "[](https://about.mappls.com/blog/)[](https://github.com/Mappls-api)", "[](https://twitter.com/mappls)[](https://www.linkedin.com/company/mappls/)[](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7J9HiOA)" ] } ], "snippets": [], "endpointEvidence": [ "https://github.com/mappls-api/mappls-web-plugins/tree/main", "https://github.com/mappls-api/mappls-web-plugins/tree/auth-legacy", "https://about.mappls.com/api", "https://github.com/MapmyIndia/mapmyindia-rest-api/blob/master/docs/countryISO.md", "https://auth.mappls.com/console/", "https://github.com/mappls-api/mappls-web-plugins/tree/main/placeSearch-plugin", "https://about.mappls.com/api/web-sdk/vector-plugin-auth2/Placesearch/mappls-placesearch-plugin", "https://github.com/mappls-api/mappls-web-plugins/tree/main/placePicker-plugin", "https://about.mappls.com/api/web-sdk/vector-plugin-auth2/Placepicker/mappls-placepicker-plugin", "https://github.com/mappls-api/mappls-web-plugins/tree/main/nearbySearch-plugin", "https://about.mappls.com/api/web-sdk/vector-plugin-auth2/Nearbysearch/mappls-nearbysearch-plugin", "https://github.com/mappls-api/mappls-web-plugins/tree/main/directions-plugin", "https://about.mappls.com/api/web-sdk/vector-plugin-auth2/Direction/mappls-direction-plugin", "https://about.mappls.com/api/web-sdk/vector-plugin-auth2/Direction/mappls-poi-alongtheroute-direction-plugin", "https://github.com/mappls-api/mappls-web-plugins/tree/main/tracking-plugin", "https://about.mappls.com/api/web-sdk/vector-plugin-auth2/Direction/mappls-event-alongtheroute-direction-plugin" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 14, "endpointCount": 45, "codeSampleCount": 0, "fingerprint": "0500ead3cc1dcb4e9f2fcd0882c0d7e550dc18f3bdf539528aec575bcacfd35b" } } ``` ## source-reference · Workmate SDK - Android - Identity: `source-reference:mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-workmate-android-sdk - State model: stateful ```json { "slug": "mappls-workmate-android-sdk", "sourceId": "public-mappls-workmate-android-sdk", "name": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android", "summary": "Native Android SDK for our Workforce Management & Automation Solution - Workmate", "kind": "SDK", "maturity": "current", "stateModel": "stateful", "stateModelEvidence": { "stateModel": "stateful", "authority": "source-identity", "signals": [ "workmate" ], "reason": "The source identity names a provider-backed durable operations family whose records or lifecycle survive a single request or screen." }, "productAreas": [ "tracking-telematics", "workforce", "identity-platform" ], "platforms": [ "Android" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk", "sourceDocumentUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2026-06-19T08:59:39Z", "localCandidates": [], "prerequisites": [ "An Android project with a supported Gradle and Kotlin or Java toolchain" ], "sections": [ { "title": "Workmate SDK - Android", "level": 1, "paragraphs": [ "Field-Force Management SDK for Android Applications", "Powered by India's most comprehensive mapping and location intelligence platform — Mappls.", "Workmate SDK is built for organisations that operate a distributed field workforce — sales teams, service technicians, delivery agents, healthcare field workers, or any role where people work outside a fixed office. From the moment an agent checks in for the day, through every client visit and task completed, to the end of their shift — Workmate tracks, coordinates, and logs it all." ] }, { "title": "Table of Contents", "level": 2, "paragraphs": [ "• Getting Started - Changelog" ] }, { "title": "Users & Authentication", "level": 3, "paragraphs": [ "• Initialization - Refresh Token - Get Movement Trail - Get User Activity - Calculate Distance - Get Device Location - Validate Geo-Fence - Error Codes - Error Response" ] }, { "title": "Clients", "level": 3, "paragraphs": [ "• Client Check-In - Client Check-Out - Client Check-In/Out (Deprecated) - Get Client List" ] }, { "title": "Tasks", "level": 3, "paragraphs": [ "• Get Task List - Task Check-In - Task Check-Out - Task Check-In/Out (Deprecated)", "For any queries and support, please contact:", "Email us at wmsupport@mapmyindia.com", "Need support? Contact us", "© Copyright 2026 CE Info Systems Ltd. All Rights Reserved." ] } ], "snippets": [], "endpointEvidence": [ "https://www.mapmyindia.com/api", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 7, "endpointCount": 7, "codeSampleCount": 0, "fingerprint": "e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8" } } ``` ## source-reference · Skydnn AI APIs - Identity: `source-reference:skydnn-aiapi-docs` - Canonical: https://developer.mappls.com/reference/skydnn-aiapi-docs - State model: stateless ```json { "slug": "skydnn-aiapi-docs", "sourceId": "public-skydnn-aiapi-docs", "name": "skydnn-aiapi-docs", "title": "Skydnn AI APIs", "summary": "A Mappls rest api for maps, gis analytics, ai vision, capture feedback across REST, AI/MCP.", "kind": "REST API", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "maps", "gis-analytics", "ai-vision", "capture-feedback" ], "platforms": [ "REST", "AI/MCP" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/skydnn-aiapi-docs", "sourceDocumentUrl": "https://github.com/mappls-api/skydnn-aiapi-docs/blob/main/README.md", "readmeUrl": "https://github.com/mappls-api/skydnn-aiapi-docs/blob/main/README.md", "defaultBranch": "main", "pushedAt": "2023-02-01T12:06:35Z", "localCandidates": [ "aihub/docs/skydnn-aiapi-docs" ], "prerequisites": [ "A trusted backend or API client capable of HTTPS requests" ], "sections": [ { "title": "Introduction", "level": 2, "paragraphs": [ "Transform your application with the cutting-edge power of Skydnn AI APIs from MapmyIndia. Our state-of-the-art Computer Vision technology detects, classifies and localizes objects in photographs, and generates a map view of geospatial objects for a variety of geospatial analytics and applications. With these APIs, developers can effortlessly integrate the full suite of Skydnn product and platform functionalities into their own applications, elevating their capabilities to new heights." ] }, { "title": "How Mappls AI APIs Enhance Value of any Solution", "level": 2, "paragraphs": [ "Skydnn AI API is a state-of-the-art API service that takes as input - satellite imagery, - street photographs and - video frames", "and returns the response of the inference with confidence score, labels and respective geometry:", "• Object detections as bounding box, - inference segmentation as polygon geometry and - inference for lane or line markings as polyline." ] }, { "title": "API Features", "level": 2, "paragraphs": [ "Skydnn AI APIs are grouped under various categories providing wide range of functionalities which can be leveraged by enterprise and consumer.", "• Modelhub API Endpoints", "Try out using swagger: Tesselate 1.0", "For any queries and support, please contact:", "Email us at apisupport@mappls.com", "Support Need support? contact us!" ] } ], "snippets": [], "endpointEvidence": [ "https://about.mappls.com/api", "https://about.mappls.com/api/", "https://about.mappls.com/contact/", "https://stackoverflow.com/questions/tagged/mappls-api)[![](https://www.mapmyindia.com/api/img/icons/blog.png)](https://about.mappls.com/blog/)[![](https://www.mapmyindia.com/api/img/icons/gethub.png)](https://github.com/Mappls-api)[", "https://www.npmjs.com/org/mapmyindia", "https://www.facebook.com/Mapplsofficial)[![](https://www.mapmyindia.com/june-newsletter/icon2.png)](https://twitter.com/mappls)[![](https://www.mapmyindia.com/newsletter/2017/aug/llinkedin.png)](https://www.linkedin.com/company/mappls/)[![](https://www.mapmyindia.com/june-newsletter/icon3.png)](https://www.youtube.com/channel/UCAWvWsh-dZLLeUU7_J9HiOA", "https://about.mappls.com/api/terms-&-conditions", "https://about.mappls.com/about/privacy-policy", "https://about.mappls.com/pdf/mapmyIndia-sustainability-policy-healt-labour-rules-supplir-sustainability.pdf", "https://about.mappls.com/pdf/Health-Safety-Management.pdf", "https://about.mappls.com/pdf/Environment-Sustainability-Policy-CSR-Report.pdf" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 4, "endpointCount": 16, "codeSampleCount": 0, "fingerprint": "f407d95bd8b3db716f04033d319e93c5c5eea34e6be96a46d659eaf0b2b476df" } } ``` ## source-reference · V1.2.0 Logs - Identity: `source-reference:v1-2-0-logs` - Canonical: https://developer.mappls.com/reference/v1-2-0-logs - State model: stateless ```json { "slug": "v1-2-0-logs", "sourceId": "public-v1-2-0-logs", "name": "v1.2.0-logs", "title": "V1.2.0 Logs", "summary": "Retail and Logistics Logs for 1.2.0", "kind": "Sample", "maturity": "current", "stateModel": "stateless", "stateModelEvidence": { "stateModel": "stateless", "authority": "conservative-default", "signals": [], "reason": "No durable provider record or application workflow contract was established from the source identity or bounded document evidence; view, camera, callback, and authentication sessions alone do not make a source stateful." }, "productAreas": [ "other" ], "platforms": [ "Unspecified" ], "authSignals": [], "languages": [], "repositoryUrl": "https://github.com/mappls-api/v1.2.0-logs", "sourceDocumentUrl": "https://github.com/mappls-api/v1.2.0-logs/blob/master/README.md", "readmeUrl": "https://github.com/mappls-api/v1.2.0-logs/blob/master/README.md", "defaultBranch": "master", "pushedAt": "2024-12-13T06:33:27Z", "localCandidates": [], "prerequisites": [], "sections": [ { "title": "v1.2.0-logs", "level": 1, "paragraphs": [ "Retail and Logistics logs for 1.2.0 certification - test scenarios for retail and logistics", "To submit logs for protocol compliance verification, following steps need to be followed:", "1. Create a fork of the \"v1.2.0-logs\" repository", "2. Create a branch with the name of your entity under \"logs\"", "3. Merge your logs into this branch (logs should include request & response payloads for all enabled APIs)", "4. Create PR for your branch" ] } ], "snippets": [], "endpointEvidence": [ "https://docs.google.com/spreadsheets/d/1JZV6ZQzXcHUsOwegGtArX3DdIXYIy3gxkhQ00q7kICc/edit#gid=1367601795", "https://docs.google.com/spreadsheets/d/1JZV6ZQzXcHUsOwegGtArX3DdIXYIy3gxkhQ00q7kICc/edit#gid=1670900093" ], "coverage": { "sourceDocumentAvailable": true, "readmeAvailable": true, "headingCount": 1, "endpointCount": 2, "codeSampleCount": 0, "fingerprint": "29445321439b02ac0adff1a2102932ed5cf1a8d3eaa427b7999ad2481aa5cb87" } } ``` ## migration · Core REST: MapmyIndia generation to Mappls contracts - Identity: `migration:core-rest-generation` - Canonical: https://developer.mappls.com/migrate/core-rest-generation - State model: hybrid ```json { "slug": "core-rest-generation", "title": "Core REST: MapmyIndia generation to Mappls contracts", "platform": "REST", "productArea": "Maps, search, routing, and geospatial APIs", "summary": "Move trusted-server integrations across host, path, authentication, schema, and quota generations with contract evidence instead of string replacement.", "risk": "high", "stateModel": "hybrid", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-api-addendums", "mapmyindia-rest-api" ], "candidateGuideSlugs": [ "mappls-rest-apis" ], "decisionBoundary": "Repository lineage identifies the Mappls REST candidate, but only the account entitlement matrix can confirm each operation, host, authentication generation, region, and quota.", "contractChanges": [ { "dimension": "Authentication", "legacy": "Legacy source material can contain OAuth-era or historical key patterns.", "candidate": "Current normalized core REST evidence uses a restricted static key query contract; some account lines can remain OAuth-based.", "proof": "Resolve generation per operation and run the bounded non-production conformance harness." }, { "dimension": "Network contract", "legacy": "Historical hosts, paths, parameters, and response envelopes appear across repositories.", "candidate": "Use the exact operation-local server and schema in the normalized OpenAPI catalog.", "proof": "Record OpenAPI fingerprint plus response contract tests for the entitled account." }, { "dimension": "Failure semantics", "legacy": "Applications often couple directly to provider status and payload shapes.", "candidate": "Normalize invalid, unauthorized, quota, retryable, transport, and provider failures at the adapter.", "proof": "Replay the same failure corpus against both adapters and retain classifications." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every REST operation, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move REST operation calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible side effects.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Versioned REST adapter seam", "code": "type SearchResult = { id: string; label: string; latitude: number; longitude: number };\ntype SearchContext = { query: string; region?: string; requestId: string };\n\ninterface SearchProvider {\n readonly generation: \"legacy\" | \"candidate\";\n search(input: SearchContext, signal: AbortSignal): Promise;\n}\n\nexport async function compareRead(\n legacy: SearchProvider,\n candidate: SearchProvider,\n input: SearchContext,\n) {\n const timeout = AbortSignal.timeout(2_500);\n const [before, after] = await Promise.all([\n legacy.search(input, timeout),\n candidate.search(input, timeout),\n ]);\n return {\n requestId: input.requestId,\n legacyCount: before.length,\n candidateCount: after.length,\n sameFirstId: before[0]?.id === after[0]?.id,\n // Retain only approved comparison fields—never credentials or raw addresses.\n };\n}" } ] } ``` ## migration · Web maps and plugins: legacy scripts to a governed browser boundary - Identity: `migration:web-maps-and-plugins` - Canonical: https://developer.mappls.com/migrate/web-maps-and-plugins - State model: hybrid ```json { "slug": "web-maps-and-plugins", "title": "Web maps and plugins: legacy scripts to a governed browser boundary", "platform": "Web", "productArea": "Maps, places, directions, analytics, telematics, and widgets", "summary": "Replace global-script assumptions with explicit origin restrictions, lifecycle ownership, typed adapters, accessible fallbacks, and measured rendering parity.", "risk": "high", "stateModel": "hybrid", "confidence": "adjacent-evidence", "fromGuideSlugs": [ "mapmyindia-geoanalytics-api-web", "mapmyindia-interactive-map-js-api", "mapmyindia-intouch-web-plugins", "mapmyindia-nearby-covid-places", "mapmyindia-places-n-directions-web-sdk", "mapmyindia-vector-maps-js-web-sdk" ], "candidateGuideSlugs": [ "mappls-web-maps", "mappls-web-maps-js", "mappls-web-plugins" ], "decisionBoundary": "The Mappls web repositories are adjacent modern evidence, not proof that every legacy plugin or GeoAnalytics surface has a one-to-one replacement. Select map, API, widget, analytics, or application-owned UI per journey with Mappls confirmation.", "contractChanges": [ { "dimension": "Loading", "legacy": "Global scripts and callbacks can be coupled to page order and mutable globals.", "candidate": "Load once behind an application adapter and expose an explicit ready/error lifecycle.", "proof": "Cold/warm navigation tests prove one instance, deterministic cleanup, and content-security-policy compatibility." }, { "dimension": "Credentials", "legacy": "Keys may be embedded without a complete origin inventory.", "candidate": "Use only browser-supported credentials restricted to exact production and development origins.", "proof": "Inspect built assets, network logs, restriction configuration, and rejected-origin behavior." }, { "dimension": "Experience", "legacy": "Plugin UI and behavior may be product-owned and difficult to customize.", "candidate": "Choose a supported widget or rebuild the journey over documented primitives.", "proof": "Accessibility, visual, interaction, empty/error, mobile, and slow-network acceptance tests." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every map or plugin integration, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move map or plugin integration calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible map mutations.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Rendering parity covers camera, bounds, projection, markers, layers, controls, gestures, accessibility, printing, and high-density datasets." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Framework-owned map boundary", "code": "export type MapPort = {\n mount(container: HTMLElement): Promise;\n showPlaces(features: ReadonlyArray<{ id: string; lng: number; lat: number }>): void;\n fitTo(ids: ReadonlyArray): void;\n destroy(): void;\n};\n\nexport async function runMapJourney(port: MapPort, host: HTMLElement) {\n await port.mount(host);\n port.showPlaces([{ id: \"fixture-store\", lng: 77.2, lat: 28.6 }]);\n port.fitTo([\"fixture-store\"]);\n return () => port.destroy(); // listeners, workers, and map resources end together\n}" } ] } ``` ## migration · InTouch Android SDK lineage - Identity: `migration:intouch-android` - Canonical: https://developer.mappls.com/migrate/intouch-android - State model: stateful ```json { "slug": "intouch-android", "title": "InTouch Android SDK lineage", "platform": "Android", "productArea": "Tracking, telematics, events, geofences, and workforce", "summary": "Migrate tracking journeys as consent-aware state machines, preserving session identity, offline queues, background policy, and event ordering across SDK lines.", "risk": "critical", "stateModel": "stateful", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-intouch-android-sdk" ], "candidateGuideSlugs": [ "mappls-intouch-android-sdk" ], "decisionBoundary": "The repository names establish a strong lineage candidate; package coordinates, supported Android matrix, background behavior, and entitlement must still be confirmed for the target release.", "contractChanges": [ { "dimension": "Identity", "legacy": "Device, user, session, and vehicle identifiers can be implicit in SDK setup.", "candidate": "Map each durable identifier and ownership rule explicitly before moving history or live sessions.", "proof": "Identity mapping plus start/restart/logout/reinstall tests with no duplicate active session." }, { "dimension": "Background execution", "legacy": "Older Android behavior may rely on obsolete service or permission assumptions.", "candidate": "Implement the current permission, foreground-service, notification, battery, and background policy.", "proof": "Physical-device matrix across denial, process death, reboot, power saver, offline, and upgrade." }, { "dimension": "Event delivery", "legacy": "Callbacks and local queues can differ in order and retry behavior.", "candidate": "Persist event identity, observed time, attempt, and reconciliation state above the SDK.", "proof": "Gap, duplicate, late, and out-of-order event injection with recovery evidence." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every tracking SDK integration, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move tracking SDK integration calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate sessions or events.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Consent, notification, background-location, reboot, reinstall, offline buffering, clock skew, and logout behavior are journey-tested." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "kotlin", "label": "Android capability adapter", "code": "data class TrackingFix(val latitude: Double, val longitude: Double, val capturedAtMs: Long)\n\ninterface TrackingPort {\n suspend fun start(sessionId: String)\n suspend fun submit(fix: TrackingFix)\n suspend fun stop(sessionId: String)\n}\n\nclass TrackingJourney(private val provider: TrackingPort) {\n suspend fun run(sessionId: String, fixes: List) {\n provider.start(sessionId)\n try { fixes.forEach { provider.submit(it) } }\n finally { provider.stop(sessionId) }\n }\n}\n// Run this journey against a deterministic fake and each entitled SDK adapter." } ] } ``` ## migration · InTouch React Native bridge lineage - Identity: `migration:intouch-react-native` - Canonical: https://developer.mappls.com/migrate/intouch-react-native - State model: stateful ```json { "slug": "intouch-react-native", "title": "InTouch React Native bridge lineage", "platform": "React Native", "productArea": "Cross-platform tracking and workforce", "summary": "Align JavaScript, wrapper, and both native dependency graphs while keeping tracking identity and recovery above the bridge.", "risk": "critical", "stateModel": "stateful", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-intouch-react-native-sdk" ], "candidateGuideSlugs": [ "mappls-react-native-intouch-sdk" ], "decisionBoundary": "The branded repository lineage is strong evidence, but Android and iOS native dependencies, wrapper compatibility, background policy, and entitlement require release-specific confirmation.", "contractChanges": [ { "dimension": "Version matrix", "legacy": "JavaScript package, React Native, Android, and iOS versions may drift independently.", "candidate": "Treat wrapper and both native graphs as one tested release unit.", "proof": "Lockfile, Gradle graph, resolved Swift packages/pods, and physical-device build matrix." }, { "dimension": "Bridge events", "legacy": "Event names, payloads, and listener cleanup can leak into product code.", "candidate": "Normalize a bounded discriminated event model with one unsubscribe owner.", "proof": "Contract tests cover malformed events, high frequency, backgrounding, remount, and process recovery." }, { "dimension": "Durable tracking", "legacy": "JavaScript memory can accidentally become the journey source of truth.", "candidate": "Keep session identity and command outcomes in durable native/server state.", "proof": "Kill/relaunch, offline, upgrade, reinstall, cross-device, and logout journeys reconcile correctly." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every cross-platform tracking bridge, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move cross-platform tracking bridge calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate native work.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Android and iOS are accepted separately; success on one platform never stands in for the other." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Typed React Native bridge contract", "code": "export type Camera = { center: [number, number]; zoom: number };\nexport type MapEvent = { type: \"ready\" } | { type: \"camera\"; camera: Camera } | { type: \"error\"; code: string };\n\nexport interface NativeMapPort {\n configure(input: { styleId: string }): Promise;\n setCamera(camera: Camera): Promise;\n subscribe(listener: (event: MapEvent) => void): () => void;\n dispose(): Promise;\n}\n\n// Keep wrapper-specific props and native event names inside the adapter.\n// The application consumes only this versioned, testable contract." } ] } ``` ## migration · InTouch iOS SDK lineage - Identity: `migration:intouch-ios` - Canonical: https://developer.mappls.com/migrate/intouch-ios - State model: stateful ```json { "slug": "intouch-ios", "title": "InTouch iOS SDK lineage", "platform": "iOS", "productArea": "Tracking, telematics, consent, events, and geofences", "summary": "Move the explicitly deprecated MapmyIndia iOS tracking line to a release-qualified Mappls SDK while preserving durable session identity, consent, background execution, event order, and unknown-outcome recovery.", "risk": "critical", "stateModel": "stateful", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-intouch-ios-sdk" ], "candidateGuideSlugs": [ "mappls-intouch-ios-sdk" ], "decisionBoundary": "Repository lineage identifies a Mappls iOS candidate, but the exact package, Swift/Xcode/deployment matrix, background modes, privacy manifest, credential class, entitlement, and migration behavior require product-owner confirmation.", "contractChanges": [ { "dimension": "Session identity", "legacy": "SDK initialization and tracking state can hide durable device, user, asset, and session identities.", "candidate": "Persist each identity, expected version, consent revision, and command idempotency key above the SDK.", "proof": "Start, duplicate start, restart, logout, reinstall, device transfer, and retirement journeys reconcile to one authoritative session." }, { "dimension": "Background lifecycle", "legacy": "Historical iOS background, permission, and application-delegate assumptions may no longer hold.", "candidate": "Qualify current authorization, accuracy, background mode, scene, suspension, termination, and relaunch behavior.", "proof": "Physical-device tests cover denial, reduced accuracy, background, force quit, reboot, low power, offline, and upgrade." }, { "dimension": "Event recovery", "legacy": "Callbacks or local queues may not expose authoritative ordering or acknowledgement.", "candidate": "Normalize event identity, observed time, sequence, acknowledgement, and reconciliation state outside the SDK.", "proof": "Duplicate, gap, late, out-of-order, timeout-after-commit, and revoked-entitlement injection produces bounded recovery." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every iOS tracking integration, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move iOS tracking integration calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate sessions, fixes, or events.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Consent, precise/reduced location, background modes, scenes, suspension, force quit, reboot, offline buffering, clock skew, logout, and data retirement are journey-tested." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "swift", "label": "Durable iOS tracking boundary", "code": "struct TrackingSession: Sendable { let id: String; let expectedVersion: Int }\nstruct TrackingReceipt: Sendable { let providerId: String; let version: Int; let state: String }\n\nprotocol TrackingProviding: Sendable {\n func start(_ session: TrackingSession, idempotencyKey: String) async throws -> TrackingReceipt\n func reconcile(sessionId: String) async throws -> TrackingReceipt?\n func stop(_ session: TrackingSession, idempotencyKey: String) async throws -> TrackingReceipt\n}\n\n// Persist session and command identities before invoking the selected SDK.\n// On timeout, reconcile the same identity before issuing another command." } ] } ``` ## migration · InTouch REST contract generation - Identity: `migration:intouch-rest-generation` - Canonical: https://developer.mappls.com/migrate/intouch-rest-generation - State model: stateful ```json { "slug": "intouch-rest-generation", "title": "InTouch REST contract generation", "platform": "REST", "productArea": "Assets, trips, events, geofences, and telematics", "summary": "Re-contract a stateful telematics integration without confusing a newer repository name with a confirmed endpoint or write-compatible product generation.", "risk": "critical", "stateModel": "stateful", "confidence": "selection-required", "fromGuideSlugs": [ "mapmyindia-intouch-rest-apis" ], "candidateGuideSlugs": [ "mappls-intouch-rest-apis" ], "decisionBoundary": "The deprecated source explicitly declares the Mappls InTouch repository as its successor, but that declaration does not prove endpoint, schema, authentication, state, write, or entitlement compatibility. Obtain the exact InTouch contract and authority from the product owner.", "contractChanges": [ { "dimension": "Resource model", "legacy": "Asset, trip, event, and geofence identifiers and transitions are defined by historical contracts.", "candidate": "Map every aggregate, state, transition, terminal condition, and retention rule to the issued contract.", "proof": "A signed state-transition matrix and reconciliation test per resource type." }, { "dimension": "Authentication", "legacy": "Historical credentials and hosts must not be replayed into a similar-looking Mappls endpoint.", "candidate": "Use a separately scoped InTouch credential and exact entitled host only.", "proof": "Negative cross-generation credential tests plus bounded read conformance." }, { "dimension": "Writes", "legacy": "Retries may have been implemented as transport retries.", "candidate": "Require stable idempotency and lookup-based reconciliation before retrying commands.", "proof": "Timeout-after-commit, duplicate delivery, stale version, and partial-event failure injection." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every InTouch resource or operation, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move InTouch resource or operation calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate state transitions.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Every aggregate has a transition table, idempotency identity, event-order rule, reconciliation query, retention policy, and retirement path." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Stateful command envelope", "code": "type Command = {\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n payload: T;\n};\n\ntype Outcome = { providerId: string; version: number; state: string };\n\ninterface WorkforceProvider {\n assign(command: Command<{ workerId: string; taskId: string }>): Promise;\n reconcile(aggregateId: string): Promise;\n}\n\n// Never shadow a write. Send it through one provider, persist the outcome, then\n// reconcile an ambiguous timeout by aggregate/idempotency identity before retry." } ] } ``` ## migration · Cordova and Ionic: stabilize, then migrate by journey - Identity: `migration:cordova-ionic-exit` - Canonical: https://developer.mappls.com/migrate/cordova-ionic-exit - State model: hybrid ```json { "slug": "cordova-ionic-exit", "title": "Cordova and Ionic: stabilize, then migrate by journey", "platform": "Cordova", "productArea": "Hybrid maps, search, routing, and widgets", "summary": "Turn an aging hybrid integration into replaceable application capabilities, then move complete journeys to a confirmed web, native, or cross-platform target.", "risk": "critical", "stateModel": "hybrid", "confidence": "selection-required", "fromGuideSlugs": [ "mapmyindia-map-cordova-ionic-beta", "mapmyindia-restapi-cordova-ionic-beta" ], "candidateGuideSlugs": [ "mappls-react-native-sdk", "mappls-flutter-sdk", "mappls-rest-apis" ], "decisionBoundary": "The corpus contains no current direct Cordova successor. React Native, Flutter, and REST guides are possible architectural targets—not declared replacements. Choose using product, team, device, lifecycle, and Mappls support constraints.", "contractChanges": [ { "dimension": "Host framework", "legacy": "Cordova webview, plugin registry, and native project generation own much of the build.", "candidate": "Select a supported host and make native project ownership, signing, permissions, and updates explicit.", "proof": "Clean-room release builds and store/deployment validation on every target platform." }, { "dimension": "Application seam", "legacy": "Plugin callbacks may be used directly throughout JavaScript screens.", "candidate": "Introduce capability ports and move durable domain state above them.", "proof": "Existing screens run through the facade before any host migration begins." }, { "dimension": "Cutover unit", "legacy": "A whole-app rewrite creates long-lived behavior drift.", "candidate": "Move one complete user journey with navigation and rollback boundaries.", "proof": "Journey parity, analytics continuity, deep-link routing, and support runbook per cohort." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every hybrid plugin, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move hybrid plugin calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate native effects.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Deep links, authentication return paths, analytics identity, local storage, accessibility, navigation, and app-update behavior survive mixed old/new screens." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Strangler facade for a hybrid estate", "code": "type LocationFacade = {\n search(query: string): Promise>;\n openMap(target: { id: string }): Promise;\n};\n\nexport function locationFacade(mode: \"cordova\" | \"replacement\"): LocationFacade {\n return mode === \"cordova\" ? new CordovaAdapter() : new ReplacementAdapter();\n}\n\n// Move one complete journey at a time. Persist durable application state above\n// this facade so a webview, native screen, or cross-platform host can be replaced.\ndeclare class CordovaAdapter implements LocationFacade { search(q: string): Promise; openMap(t:{id:string}):Promise }\ndeclare class ReplacementAdapter implements LocationFacade { search(q: string): Promise; openMap(t:{id:string}):Promise }" } ] } ``` ## migration · React Native maps and REST wrappers - Identity: `migration:react-native-maps` - Canonical: https://developer.mappls.com/migrate/react-native-maps - State model: hybrid ```json { "slug": "react-native-maps", "title": "React Native maps and REST wrappers", "platform": "React Native", "productArea": "Maps, places, routes, and geospatial UI", "summary": "Move beta-era bridges to a release-specific Mappls wrapper while testing the Android and iOS implementations as separate products.", "risk": "high", "stateModel": "hybrid", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-map-react-native-beta", "mapmyindia-restapi-react-native-beta" ], "candidateGuideSlugs": [ "mappls-react-native-sdk" ], "decisionBoundary": "Repository naming identifies the Mappls wrapper candidate; exact supported React Native, Android, iOS, rendering, and API-kit versions remain release-specific and must be approved.", "contractChanges": [ { "dimension": "Component surface", "legacy": "Beta props, commands, event payloads, and imperative refs may be spread through the app.", "candidate": "Normalize camera, features, commands, readiness, errors, and cleanup in application-owned types.", "proof": "Component contract tests plus device screenshots and interaction traces." }, { "dimension": "Native setup", "legacy": "Old repository, manifest, pod, or project steps can remain in generated projects.", "candidate": "Apply only the confirmed wrapper's Android and iOS setup and remove superseded native entries.", "proof": "Resolved dependency graphs and built-binary inspection from clean clones." }, { "dimension": "Performance", "legacy": "Bridge traffic and rerenders can hide platform-specific bottlenecks.", "candidate": "Bound event rates and move large/high-frequency data to native or tiled paths.", "proof": "Startup, pan/zoom, marker/layer load, memory, battery, and background measurements." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every React Native map or REST bridge, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move React Native map or REST bridge calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate commands.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Camera, projection, annotations, layers, gestures, events, deep links, accessibility, and teardown are verified independently on Android and iOS." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Typed React Native bridge contract", "code": "export type Camera = { center: [number, number]; zoom: number };\nexport type MapEvent = { type: \"ready\" } | { type: \"camera\"; camera: Camera } | { type: \"error\"; code: string };\n\nexport interface NativeMapPort {\n configure(input: { styleId: string }): Promise;\n setCamera(camera: Camera): Promise;\n subscribe(listener: (event: MapEvent) => void): () => void;\n dispose(): Promise;\n}\n\n// Keep wrapper-specific props and native event names inside the adapter.\n// The application consumes only this versioned, testable contract." } ] } ``` ## migration · Flutter map plugin lineage - Identity: `migration:flutter-map-lineage` - Canonical: https://developer.mappls.com/migrate/flutter-map-lineage - State model: hybrid ```json { "slug": "flutter-map-lineage", "title": "Flutter map plugin lineage", "platform": "Flutter", "productArea": "Maps, places, routes, platform views, and cross-platform lifecycle", "summary": "Replace the explicitly obsolete MapmyIndia Flutter plugin with a release-qualified Mappls line while treating Dart, Android, iOS, and native SDK versions as one reproducible compatibility graph.", "risk": "high", "stateModel": "hybrid", "confidence": "direct-lineage", "fromGuideSlugs": [ "flutter-mapmyindia-gl" ], "candidateGuideSlugs": [ "mappls-flutter-sdk" ], "decisionBoundary": "Brand lineage identifies the current Flutter candidate. Exact plugin, Dart/Flutter, Android, iOS, native SDK, renderer, build, authentication, and entitlement pairings still require release-specific approval.", "contractChanges": [ { "dimension": "Release graph", "legacy": "The Dart package and native dependencies can drift independently across old project files.", "candidate": "Lock Flutter/Dart, plugin, Android/iOS SDK, build tools, architecture, and signing as one release decision.", "proof": "Clean dependency graphs, Android bundle, iOS archive, physical-device launch, and rollback artifact." }, { "dimension": "Platform view lifecycle", "legacy": "Controllers, streams, and callbacks may survive rebuilds or disposal.", "candidate": "Own one controller generation, reject late callbacks, and detach streams deterministically.", "proof": "Hot/cold launch, navigation, rebuild, rotation, background, memory pressure, process death, restoration, and disposal tests." }, { "dimension": "Behavior parity", "legacy": "Map, camera, annotation, gesture, and API-kit behavior can differ by native platform.", "candidate": "Normalize only application-owned behavior and accept Android and iOS independently.", "proof": "A shared fixture corpus plus platform-specific visual, accessibility, interaction, error, and performance evidence." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every Flutter map capability, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move Flutter map capability calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate controllers or native effects.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Dart/Flutter, Android/iOS SDKs, platform views, renderer, permissions, callbacks, restoration, release archives, accessibility, and performance are accepted separately per platform." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "dart", "label": "Flutter generation adapter", "code": "sealed class MapResult { const MapResult(); }\nfinal class MapReady extends MapResult { const MapReady(); }\nfinal class MapFailure extends MapResult { const MapFailure(this.code); final String code; }\n\nabstract interface class MapPort {\n Future mount({required double latitude, required double longitude});\n Future showFixture(String featureId);\n Future dispose();\n}\n\n// One adapter owns each plugin/native generation. Reject callbacks after\n// dispose and qualify Android and iOS release graphs independently." } ] } ``` ## migration · Android vector map SDK lineage - Identity: `migration:android-map-lineage` - Canonical: https://developer.mappls.com/migrate/android-map-lineage - State model: hybrid ```json { "slug": "android-map-lineage", "title": "Android vector map SDK lineage", "platform": "Android", "productArea": "Maps, camera, annotations, places, routes, and native lifecycle", "summary": "Move the explicitly deprecated MapmyIndia vector SDK line to an approved Mappls Android release through a narrow application map boundary and a clean device/release qualification matrix.", "risk": "high", "stateModel": "hybrid", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-maps-vectorsdk-android" ], "candidateGuideSlugs": [ "mappls-android-sdk" ], "decisionBoundary": "Repository lineage identifies the Mappls Android candidate, but package coordinates, BOM/module versions, Gradle/AGP/Kotlin/JDK, Android API, renderer, credential class, and entitlement must be confirmed as one release set.", "contractChanges": [ { "dimension": "Dependency graph", "legacy": "Historical modules, repositories, manifest entries, and transitive versions may remain embedded in the app.", "candidate": "Resolve only approved Mappls modules through a pinned, inspectable dependency graph.", "proof": "Clean Gradle resolution, dependency verification, SBOM, release bundle inspection, and launch on every supported ABI/API." }, { "dimension": "Lifecycle", "legacy": "Map views, listeners, location components, and async callbacks may be tied to obsolete activity assumptions.", "candidate": "Bind initialization, saved state, permissions, cancellation, and disposal to one screen/controller generation.", "proof": "Create/start/resume/pause/stop/destroy, rotation, process death, multi-window, background, and permission-change tests." }, { "dimension": "Surface parity", "legacy": "Legacy symbols and provider objects can leak into domain and UI code.", "candidate": "Normalize camera, features, events, errors, and cleanup behind an application-owned port.", "proof": "Fixture-driven map, camera, annotation, overlay, gesture, accessibility, empty/error, and performance comparison." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every Android map integration, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move Android map integration calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate listeners, controllers, or renders.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Gradle/AGP/Kotlin/JDK, Android API/ABI, renderer, lifecycle, permissions, process recreation, accessibility, memory, battery, and release signing are qualified together." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "kotlin", "label": "Android map generation boundary", "code": "data class MapCamera(val longitude: Double, val latitude: Double, val zoom: Double)\nsealed interface MapOutcome { data object Ready : MapOutcome; data class Failed(val code: String) : MapOutcome }\n\ninterface AndroidMapPort {\n suspend fun mount(camera: MapCamera): MapOutcome\n suspend fun showFixture(featureId: String, longitude: Double, latitude: Double)\n suspend fun dispose()\n}\n\n// Keep legacy and candidate SDK symbols in separate adapters. The screen owns\n// only this contract and tests mount, recreation, cancellation, and disposal." } ] } ``` ## migration · iOS map and API package lineage - Identity: `migration:ios-map-packages` - Canonical: https://developer.mappls.com/migrate/ios-map-packages - State model: hybrid ```json { "slug": "ios-map-packages", "title": "iOS map and API package lineage", "platform": "iOS", "productArea": "Maps, places, routing, UI extensions, and capture", "summary": "Resolve modular Swift package/distribution lines as one compatible release set and keep Mappls symbols behind testable Swift protocols.", "risk": "high", "stateModel": "hybrid", "confidence": "direct-lineage", "fromGuideSlugs": [ "mapmyindia-maps-vectorsdk-ios" ], "candidateGuideSlugs": [ "mappls-ios-sdk", "mappls-map-ios-distribution", "mappls-api-kit-ios-distribution" ], "decisionBoundary": "The current Mappls iOS source and public distribution repositories identify likely package lines, not a universal compatibility matrix. Confirm map, API core/kit, UI extension, Xcode, Swift, and deployment-target versions as a unit.", "contractChanges": [ { "dimension": "Distribution", "legacy": "Historical binaries or monolithic SDK setup may be embedded manually.", "candidate": "Use the approved modular distribution channel and pin compatible package identities and versions.", "proof": "Resolved Package.resolved/binary checksums, license inventory, clean archive, and launch test." }, { "dimension": "Initialization", "legacy": "Credential and SDK setup can be tied to application-delegate assumptions.", "candidate": "Initialize once at the documented app/scene boundary and inject narrow providers into features.", "proof": "Multi-scene, background, restoration, logout, and test-host behavior." }, { "dimension": "Ownership", "legacy": "Map views, delegates, observers, or navigation sessions can outlive screens.", "candidate": "Give every resource one owner and explicit cancellation/retirement behavior.", "proof": "Repeated present/dismiss, memory pressure, interrupted navigation, and leak checks on hardware." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every iOS SDK package, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move iOS SDK package calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate delegates or sessions.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Swift/Xcode/deployment targets, package/binary checksums, privacy manifests, purpose strings, scenes, background modes, and extension packages are resolved together." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "swift", "label": "iOS package-line adapter", "code": "struct Place: Equatable { let id: String; let label: String }\n\nprotocol PlacesProviding: Sendable {\n func search(_ query: String) async throws -> [Place]\n}\n\n@MainActor\nfinal class PlacesViewModel: ObservableObject {\n @Published private(set) var places: [Place] = []\n private let provider: any PlacesProviding\n init(provider: any PlacesProviding) { self.provider = provider }\n func submit(_ query: String) async throws { places = try await provider.search(query) }\n}\n// Implement one adapter per confirmed package line; keep SDK symbols out of UI code." } ] } ``` ## migration · mGIS and GeoAnalytics workspace generation - Identity: `migration:mgis-workspace-generation` - Canonical: https://developer.mappls.com/migrate/mgis-workspace-generation - State model: stateful ```json { "slug": "mgis-workspace-generation", "title": "mGIS and GeoAnalytics workspace generation", "platform": "Web", "productArea": "Datasets, layers, styles, spatial analysis, visualization, publication, and export", "summary": "Contain legacy mGIS API/library contracts behind a durable workspace seam, then select the entitled current dataset, web-method, analysis, and deployment surfaces without inventing replacement endpoints.", "risk": "critical", "stateModel": "stateful", "confidence": "selection-required", "fromGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries" ], "candidateGuideSlugs": [ "mappls-web-maps-js", "mappls-rest-apis" ], "decisionBoundary": "No public repository in the snapshot proves a drop-in current mGIS API or library replacement. The Mappls web and REST guides are adjacent integration evidence only; the mGIS product owner must issue the exact tenant, workspace, operation, authentication, entitlement, data, and deployment contract.", "contractChanges": [ { "dimension": "Resource identity", "legacy": "Workspace, dataset, layer, style, analysis, export, and share identities may be implicit or generation-specific.", "candidate": "Model every durable resource, immutable input/output version, owner, state, and retention rule explicitly.", "proof": "A signed resource/state matrix and versioned fixture corpus for each selected mGIS operation." }, { "dimension": "Operation contract", "legacy": "Historical endpoints, libraries, browser methods, and callbacks may span different products or deployments.", "candidate": "Bind each read/write to one issued cloud, browser, or sovereign contract; never synthesize a URL from adjacent evidence.", "proof": "Contract fingerprint, tenant/region/entitlement evidence, negative authorization, schema validation, and bounded conformance report." }, { "dimension": "Durable recovery", "legacy": "A callback or timeout may be treated as authoritative completion or safe replay.", "candidate": "Persist command identity and reconcile unknown outcomes by workspace/resource/version before retry.", "proof": "Duplicate, stale version, timeout-after-commit, partial analysis, failed export, revoked share, and retirement scenarios." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every mGIS workspace resource, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move mGIS workspace resource calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate publication, analysis, export, or sharing.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Dataset ingestion, validation, immutable versioning, publication, style, analysis, export, share/revoke, lineage, privacy, residency, retention, backup, reconciliation, and retirement are tested end to end." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Versioned geospatial workspace seam", "code": "type DatasetCommand = { workspaceId: string; datasetVersion: string; expectedVersion: number; idempotencyKey: string };\ntype DatasetReceipt = { providerId: string; version: number; state: string };\n\ninterface GeospatialWorkspacePort {\n publish(command: DatasetCommand): Promise;\n reconcile(workspaceId: string, datasetVersion: string): Promise;\n retire(command: DatasetCommand): Promise;\n}\n\n// Exact endpoints and credentials enter only after the owning mGIS contract is\n// selected. Unknown write outcomes reconcile by stable workspace/version." } ] } ``` ## migration · Workmate and workforce journeys - Identity: `migration:workmate-workforce` - Canonical: https://developer.mappls.com/migrate/workmate-workforce - State model: stateful ```json { "slug": "workmate-workforce", "title": "Workmate and workforce journeys", "platform": "Android", "productArea": "Tasks, workers, attendance, proof, and operational tracking", "summary": "Reframe deprecated Workmate surfaces around durable workforce aggregates, then select the entitled Mappls modules that satisfy each complete journey.", "risk": "critical", "stateModel": "stateful", "confidence": "selection-required", "fromGuideSlugs": [ "mapmyindia-workmate-apis" ], "candidateGuideSlugs": [ "mappls-workmate-android-sdk", "mappls-intouch-android-sdk", "mappls-location-capture-android-sdk", "mappls-rest-apis" ], "decisionBoundary": "The current Workmate Android source is the closest identity evidence, while InTouch, Location Capture, and REST remain adjacent modules. No single guide proves complete workforce journey compatibility; the product owner must issue the target contract and entitlements.", "contractChanges": [ { "dimension": "Journey model", "legacy": "Tasks, attendance, tracking, and proof can be coupled inside one SDK or API surface.", "candidate": "Model worker, task, assignment, visit, proof, and exception aggregates with explicit ownership and transitions.", "proof": "State diagrams, invariants, event schemas, and recovery test per journey." }, { "dimension": "Offline work", "legacy": "Local callback success can be mistaken for authoritative completion.", "candidate": "Persist commands, evidence hashes, observed time, sync state, and server acknowledgement separately.", "proof": "Multi-day offline, duplicate sync, clock skew, rejected proof, and device replacement tests." }, { "dimension": "Module selection", "legacy": "One product credential may have implied several capabilities.", "candidate": "Entitle tracking, capture, search, routing, or workflow modules independently and keep least authority.", "proof": "Capability-by-role matrix plus negative authorization and revocation tests." } ], "phases": [ { "title": "Freeze the baseline", "objective": "Inventory every workforce journey, package, host, credential class, callback, and owner before changing production.", "deliverable": "A signed baseline manifest, representative fixtures, latency/error measurements, and a dependency lockfile.", "exit": "The current build is reproducible and its externally visible behavior is covered by contract tests." }, { "title": "Prove the candidate", "objective": "Resolve the exact entitled package or endpoint with Mappls and verify its supported toolchain, region, quotas, authentication, and lifecycle.", "deliverable": "An approved compatibility matrix linked to source fingerprints and an account-specific entitlement record.", "exit": "No candidate is inferred only from a similar repository name; the owning product team confirms the integration line." }, { "title": "Install an adapter seam", "objective": "Move workforce journey calls behind a narrow application-owned interface without changing product behavior.", "deliverable": "A legacy adapter, candidate adapter, normalized domain types, safe error taxonomy, and dependency-injection switch.", "exit": "The same journey tests run against either adapter without UI or domain-code changes." }, { "title": "Compare safely", "objective": "Replay approved fixtures and shadow eligible reads while preventing duplicate writes or user-visible duplicate assignments, attendance, or proof.", "deliverable": "A privacy-reviewed parity report covering results, ordering, geometry, errors, latency, resource use, and lifecycle behavior.", "exit": "Every material difference is accepted, fixed, or converted into an explicit product decision." }, { "title": "Cut over by cohort", "objective": "Release to internal users and bounded cohorts with health gates, ownership, automatic stop conditions, and immutable version evidence.", "deliverable": "A staged rollout record with cohort, package/data versions, success metrics, support routing, and stop/go decisions.", "exit": "The target service level and full-journey acceptance criteria hold through the agreed observation window." }, { "title": "Retire deliberately", "objective": "Remove legacy credentials and dependencies only after rollback and audit retention obligations expire.", "deliverable": "Revocation evidence, dependency removal, archived compatibility report, updated runbooks, and owner sign-off.", "exit": "No runtime, build, secret, dashboard, or operational process depends on the retired line." } ], "compatibilityChecks": [ "Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together.", "Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption.", "Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data.", "Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies.", "Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover.", "Assignment, accept, travel, arrive, proof, exception, complete, cancel, sync, supervisor correction, offboarding, and audit retention are tested end to end." ], "acceptanceCriteria": [ "The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region.", "Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator.", "Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences.", "A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." ], "rollbackPlan": [ "Keep the previous signed artifact, dependency lock, configuration, and credential valid until the observation window closes.", "Make the provider selection server- or release-controlled; define automatic stop signals and one accountable rollback owner.", "For durable state, prove backward-readable records or a reversible data migration before allowing candidate writes.", "After rollback, reconcile in-flight requests and resources by stable identifiers instead of replaying commands blindly." ], "samples": [ { "language": "typescript", "label": "Stateful command envelope", "code": "type Command = {\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n payload: T;\n};\n\ntype Outcome = { providerId: string; version: number; state: string };\n\ninterface WorkforceProvider {\n assign(command: Command<{ workerId: string; taskId: string }>): Promise;\n reconcile(aggregateId: string): Promise;\n}\n\n// Never shadow a write. Send it through one provider, persist the outcome, then\n// reconcile an ambiguous timeout by aggregate/idempotency identity before retry." }, { "language": "kotlin", "label": "Android capability adapter", "code": "data class TrackingFix(val latitude: Double, val longitude: Double, val capturedAtMs: Long)\n\ninterface TrackingPort {\n suspend fun start(sessionId: String)\n suspend fun submit(fix: TrackingFix)\n suspend fun stop(sessionId: String)\n}\n\nclass TrackingJourney(private val provider: TrackingPort) {\n suspend fun run(sessionId: String, fixes: List) {\n provider.start(sessionId)\n try { fixes.forEach { provider.submit(it) } }\n finally { provider.stop(sessionId) }\n }\n}\n// Run this journey against a deterministic fake and each entitled SDK adapter." } ] } ``` ## tutorial · Put your first Mappls map on the web - Identity: `tutorial:first-web-map` - Canonical: https://developer.mappls.com/tutorials/first-web-map ```json { "slug": "first-web-map", "title": "Put your first Mappls map on the web", "description": "Create a key, restrict it to localhost, load Web Maps JS, and add a marker.", "level": "Beginner", "duration": "10 min", "platforms": [ "Web" ], "products": [ "maps" ], "outcome": "A responsive map with a styled point of interest.", "scenario": "A property-search page needs one responsive map that remains usable with keyboard navigation and slow networks.", "steps": [ { "title": "Define the user and system contract", "description": "A property-search page needs one responsive map that remains usable with keyboard navigation and slow networks. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Create a browser-owned application", "description": "Create a development web application, restrict its public key to the exact localhost origin, and keep server credentials out of HTML and JavaScript." }, { "title": "Mount and own the map lifecycle", "description": "Load Web Maps JS once, give the container an explicit height, create the map after the DOM exists, and remove listeners when the page unmounts." }, { "title": "Add one stable place", "description": "Represent the point with a durable Mappls Pin or business ID, move the camera deliberately, and mirror the selected feature in accessible text outside the canvas." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when the map renders at mobile and desktop widths; keyboard users can reach the selected place; a blocked sdk produces a useful fallback. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "the map renders at mobile and desktop widths", "keyboard users can reach the selected place", "a blocked SDK produces a useful fallback" ], "failureModes": [ "invalid or origin-restricted key", "SDK load timeout", "zero-size or detached container" ] } ``` ## tutorial · Build address autocomplete that users trust - Identity: `tutorial:address-autocomplete` - Canonical: https://developer.mappls.com/tutorials/address-autocomplete ```json { "slug": "address-autocomplete", "title": "Build address autocomplete that users trust", "description": "Debounce input, apply bias, handle keyboard selection, and retain the Mappls Pin.", "level": "Beginner", "duration": "20 min", "platforms": [ "Web", "REST" ], "products": [ "search-places" ], "outcome": "An accessible, resilient delivery-address field.", "scenario": "A checkout address field must reduce typing without replacing the customer's intent or losing the selected place identity.", "steps": [ { "title": "Define the user and system contract", "description": "A checkout address field must reduce typing without replacing the customer's intent or losing the selected place identity. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Separate text from selection", "description": "Keep the free-form query distinct from the accepted suggestion. Invalidate the selected Mappls Pin whenever the user edits the text after selection." }, { "title": "Bound the request stream", "description": "Wait for a meaningful query, debounce input, cancel superseded requests, bias only with consented coarse context, and render a deterministic empty state." }, { "title": "Commit an accessible selection", "description": "Support arrows, enter, escape, focus return, and screen-reader announcements. Persist the display label and Mappls Pin, then validate serviceability on the server." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when stale responses never replace newer results; keyboard and pointer selection are equivalent; the submitted address includes a stable provider identity. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "stale responses never replace newer results", "keyboard and pointer selection are equivalent", "the submitted address includes a stable provider identity" ], "failureModes": [ "out-of-order response", "no suggestions or ambiguous address", "quota or authentication denial" ] } ``` ## tutorial · Add Mappls to an Android app - Identity: `tutorial:android-map` - Canonical: https://developer.mappls.com/tutorials/android-map ```json { "slug": "android-map", "title": "Add Mappls to an Android app", "description": "Configure the repository and BoM, initialize the SDK, and manage MapView lifecycle.", "level": "Beginner", "duration": "25 min", "platforms": [ "Android" ], "products": [ "maps" ], "outcome": "A native Kotlin map screen with lifecycle-safe setup.", "scenario": "A Kotlin application needs a native map screen that survives rotation, backgrounding, process recreation, and permission denial.", "steps": [ { "title": "Define the user and system contract", "description": "A Kotlin application needs a native map screen that survives rotation, backgrounding, process recreation, and permission denial. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Configure the native boundary", "description": "Use the documented repository and BoM, inject platform credentials through build configuration, and keep the release key restricted to the approved package and signing identity." }, { "title": "Mirror Android lifecycle", "description": "Forward creation, start, resume, pause, stop, low-memory, save-state, and destroy events to the map view exactly once." }, { "title": "Own location permission separately", "description": "Render the map without location access, request permission only when the user asks for location, and distinguish denied, approximate, unavailable, and stale fixes." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when rotation preserves intended camera state; permission denial does not blank the map; destroyed activities retain no listeners. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "rotation preserves intended camera state", "permission denial does not blank the map", "destroyed activities retain no listeners" ], "failureModes": [ "dependency/version mismatch", "permission revoked while active", "activity recreated after process death" ] } ``` ## tutorial · Add Mappls to an iOS app with Swift Package Manager - Identity: `tutorial:ios-map` - Canonical: https://developer.mappls.com/tutorials/ios-map ```json { "slug": "ios-map", "title": "Add Mappls to an iOS app with Swift Package Manager", "description": "Select distribution packages, configure credentials, and render the native map.", "level": "Beginner", "duration": "25 min", "platforms": [ "iOS" ], "products": [ "maps" ], "outcome": "A native Swift map screen.", "scenario": "A Swift application needs a native map installed through Swift Package Manager with explicit credential and view ownership.", "steps": [ { "title": "Define the user and system contract", "description": "A Swift application needs a native map installed through Swift Package Manager with explicit credential and view ownership. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Select the supported distribution", "description": "Pin an approved package version, resolve its transitive requirements, and keep credentials in build/runtime configuration rather than source control." }, { "title": "Create the view on the main actor", "description": "Own the map view from one view controller or SwiftUI wrapper, make constraints deterministic, and avoid duplicate initialization during view updates." }, { "title": "Treat location as optional evidence", "description": "Ask only when a user-visible feature needs it, retain accuracy and timestamp, and provide search or manual map movement when authorization is absent." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when cold and warm launches render once; layout changes preserve the selected feature; denied location has a complete alternate flow. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "cold and warm launches render once", "layout changes preserve the selected feature", "denied location has a complete alternate flow" ], "failureModes": [ "package resolution conflict", "view recreated with duplicate delegates", "location authorization changes at runtime" ] } ``` ## tutorial · Build a route preview with alternatives - Identity: `tutorial:route-preview` - Canonical: https://developer.mappls.com/tutorials/route-preview ```json { "slug": "route-preview", "title": "Build a route preview with alternatives", "description": "Resolve endpoints, request alternatives, decode geometry, and explain toll/time trade-offs.", "level": "Intermediate", "duration": "35 min", "platforms": [ "Web", "REST" ], "products": [ "routes-navigation", "maps" ], "outcome": "A production-pattern route comparison view.", "scenario": "A travel-planning page must compare route alternatives without presenting distance, toll, and ETA as timeless facts.", "steps": [ { "title": "Define the user and system contract", "description": "A travel-planning page must compare route alternatives without presenting distance, toll, and ETA as timeless facts. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Resolve route endpoints once", "description": "Convert user intent to stable Mappls Pins or validated coordinates before routing. Never geocode the same free-form text independently for each alternative." }, { "title": "Request and normalize alternatives", "description": "Choose an explicit profile, units, exclusions, and alternatives policy; retain provider route identity and request time with every decoded geometry." }, { "title": "Explain the choice", "description": "Draw alternatives with non-color cues, summarize distance/time/toll trade-offs, and mark the preview stale when endpoints, profile, traffic horizon, or itinerary change." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when all alternatives share identical endpoints and profile; unreachable routes produce an honest state; a stale preview cannot start navigation. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "all alternatives share identical endpoints and profile", "unreachable routes produce an honest state", "a stale preview cannot start navigation" ], "failureModes": [ "one endpoint is unresolved", "provider returns no route", "late response targets an obsolete itinerary" ] } ``` ## tutorial · Create a nearby discovery experience - Identity: `tutorial:nearby-discovery` - Canonical: https://developer.mappls.com/tutorials/nearby-discovery ```json { "slug": "nearby-discovery", "title": "Create a nearby discovery experience", "description": "Combine category search, viewport updates, result cards, and map selection.", "level": "Intermediate", "duration": "40 min", "platforms": [ "Web" ], "products": [ "search-places", "maps" ], "outcome": "A map-and-list place explorer.", "scenario": "A health-services finder must keep map, result list, filters, and selected place synchronized while enforcing eligibility before distance ranking.", "steps": [ { "title": "Define the user and system contract", "description": "A health-services finder must keep map, result list, filters, and selected place synchronized while enforcing eligibility before distance ranking. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Define the search area", "description": "Use an explicit center and radius or visible viewport, cap repeated map-move searches, and show when results describe an older viewport." }, { "title": "Apply eligibility before ranking", "description": "Intersect category, service, opening, accessibility, and business constraints before sorting by distance or ETA." }, { "title": "Preserve one selected identity", "description": "Use the Mappls Pin as the shared key across marker, card, details, route preview, and deep-link hand-off; never join on display name." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when map and list expose the same eligible set; empty states explain the active constraints; selection survives reordering and viewport refresh. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "map and list expose the same eligible set", "empty states explain the active constraints", "selection survives reordering and viewport refresh" ], "failureModes": [ "location unavailable", "provider results outside requested radius", "selected place disappears after filter change" ] } ``` ## tutorial · Track a delivery with a trustworthy ETA - Identity: `tutorial:delivery-eta` - Canonical: https://developer.mappls.com/tutorials/delivery-eta ```json { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "description": "Join asset telemetry, map matching, route progress, ETA refresh, and customer visibility.", "level": "Advanced", "duration": "90 min", "platforms": [ "REST", "Web" ], "products": [ "intouch-telematics", "routes-navigation" ], "outcome": "A stateful live-delivery journey with recovery and replay.", "scenario": "A customer tracking page must show a useful ETA while the operations system retains authoritative trip state and late telemetry evidence.", "steps": [ { "title": "Define the user and system contract", "description": "A customer tracking page must show a useful ETA while the operations system retains authoritative trip state and late telemetry evidence. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Create a durable trip identity", "description": "Bind order, route revision, provider trip, vehicle, and customer-safe tracking token before telemetry begins." }, { "title": "Process observations by event time", "description": "Deduplicate source events, store event and receipt time, reject state regression, map-match bounded fixes, and derive a new ETA revision only from eligible evidence." }, { "title": "Separate customer view from control state", "description": "Expose coarse progress and freshness without driver secrets or full history. Route exceptions to an owned operations queue before changing the promise." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when duplicate telemetry has one effect; late evidence remains auditable without rewinding progress; closure requires provider acknowledgement and delivery proof. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "duplicate telemetry has one effect", "late evidence remains auditable without rewinding progress", "closure requires provider acknowledgement and delivery proof" ], "failureModes": [ "telemetry silence", "route deviation or closed road", "provider close succeeds after local timeout" ] } ``` ## tutorial · Automate a complete Workmate task lifecycle - Identity: `tutorial:workmate-task-lifecycle` - Canonical: https://developer.mappls.com/tutorials/workmate-task-lifecycle ```json { "slug": "workmate-task-lifecycle", "title": "Automate a complete Workmate task lifecycle", "description": "Provision workers, dispatch jobs, consume transitions, enforce proof, and reconcile closure.", "level": "Advanced", "duration": "2 hr", "platforms": [ "REST", "Android" ], "products": [ "workmate" ], "outcome": "An idempotent field-service integration.", "scenario": "A utility operator must create, assign, execute, prove, review, and close work without losing responsibility during retries or offline periods.", "steps": [ { "title": "Define the user and system contract", "description": "A utility operator must create, assign, execute, prove, review, and close work without losing responsibility during retries or offline periods. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Model task and provider identities", "description": "Give the internal task, provider task, assignee, policy, and idempotency command independent durable IDs." }, { "title": "Enforce explicit transitions", "description": "Validate actor, current version, prerequisites, and evidence for assign, accept, travel, arrive, submit proof, approve, rework, and close." }, { "title": "Reconcile asynchronous outcomes", "description": "Persist an outbox command before provider calls, ingest provider callbacks idempotently, and keep ambiguous results pending until queried or replayed." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when every transition names actor and evidence; offline replay cannot duplicate work; terminal closure retains proof and provider acknowledgement. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "every transition names actor and evidence", "offline replay cannot duplicate work", "terminal closure retains proof and provider acknowledgement" ], "failureModes": [ "assignee rejects or becomes unavailable", "proof is incomplete or rejected", "provider timeout after accepting a command" ] } ``` ## tutorial · Build fleet geofence operations - Identity: `tutorial:fleet-geofences` - Canonical: https://developer.mappls.com/tutorials/fleet-geofences ```json { "slug": "fleet-geofences", "title": "Build fleet geofence operations", "description": "Create zones, process enter/exit events, suppress noise, and power an exception queue.", "level": "Advanced", "duration": "75 min", "platforms": [ "REST", "Web" ], "products": [ "intouch-telematics", "maps" ], "outcome": "An operations-ready geofence monitor.", "scenario": "A fleet desk needs actionable zone exceptions without turning GPS jitter into hundreds of incidents.", "steps": [ { "title": "Define the user and system contract", "description": "A fleet desk needs actionable zone exceptions without turning GPS jitter into hundreds of incidents. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Publish versioned geometry", "description": "Validate coordinate order, closure, self-intersection, size, asset scope, schedule, and provider rule identity before activation." }, { "title": "Keep raw evidence, derive cases", "description": "Append every eligible enter/exit observation, order by event time, apply hysteresis and dwell policy, and suppress duplicates only in the derived exception view." }, { "title": "Own resolution", "description": "Assign each open case, retain acknowledgement SLA, require resolution evidence, and retire provider rules without deleting historical activity." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when boundary jitter opens at most one case; late observations cannot erase a newer state; retired rules preserve prior evidence. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "boundary jitter opens at most one case", "late observations cannot erase a newer state", "retired rules preserve prior evidence" ], "failureModes": [ "invalid or oversized geometry", "duplicate provider activity", "rule retirement fails after local request" ] } ``` ## tutorial · Build a reproducible site-selection model - Identity: `tutorial:gis-site-selection` - Canonical: https://developer.mappls.com/tutorials/gis-site-selection ```json { "slug": "gis-site-selection", "title": "Build a reproducible site-selection model", "description": "Publish layers, generate catchments, join signals, score candidates, and share results.", "level": "Advanced", "duration": "2 hr", "platforms": [ "REST", "Web" ], "products": [ "gis-analytics" ], "outcome": "A governed retail expansion analysis.", "scenario": "A retailer must compare candidate sites using a reproducible model that another analyst can rerun and challenge.", "steps": [ { "title": "Define the user and system contract", "description": "A retailer must compare candidate sites using a reproducible model that another analyst can rerun and challenge. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Version every input", "description": "Record immutable dataset versions, content hashes, CRS, schema, source, license, and observation date before analysis." }, { "title": "Make scoring deterministic", "description": "Persist catchment parameters, joined signal versions, normalization, weights, exclusions, and tie-breaking with each attempt." }, { "title": "Govern sharing", "description": "Publish a result revision with lineage, audience, expiry, export/embed policy, and revoke access without rewriting the decision record." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when the same inputs and parameters reproduce the score; invalid crs fails with actionable diagnostics; a shared result resolves to immutable lineage. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "the same inputs and parameters reproduce the score", "invalid CRS fails with actionable diagnostics", "a shared result resolves to immutable lineage" ], "failureModes": [ "source schema or CRS drift", "processing fails after partial compute", "expired or revoked share is requested" ] } ``` ## tutorial · Design an interruption-safe offline map update - Identity: `tutorial:offline-package-update` - Canonical: https://developer.mappls.com/tutorials/offline-package-update ```json { "slug": "offline-package-update", "title": "Design an interruption-safe offline map update", "description": "Verify packages, stage data, check compatibility, switch atomically, and roll back.", "level": "Advanced", "duration": "90 min", "platforms": [ "Automotive", "Linux" ], "products": [ "offline-automotive" ], "outcome": "A resilient embedded update state machine.", "scenario": "An in-vehicle runtime must update regional map data across weak connectivity and sudden power loss without leaving an unusable active package.", "steps": [ { "title": "Define the user and system contract", "description": "An in-vehicle runtime must update regional map data across weak connectivity and sudden power loss without leaving an unusable active package. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Validate compatibility before download", "description": "Compare hardware, runtime, region, data epoch, storage, license, and signing requirements before reserving space." }, { "title": "Stage without touching active data", "description": "Download resumably, verify chunks and full signature, unpack into an inactive slot, and run structural and route smoke checks." }, { "title": "Activate atomically", "description": "Switch one durable pointer, boot-health the new package, acknowledge success, and roll back automatically when compatibility or health checks fail." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when power loss at every stage leaves one bootable package; corrupt content never becomes active; rollback retains failure evidence. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "power loss at every stage leaves one bootable package", "corrupt content never becomes active", "rollback retains failure evidence" ], "failureModes": [ "insufficient storage", "signature or compatibility mismatch", "first boot fails after activation" ] } ``` ## tutorial · Give an AI agent grounded Mappls tools - Identity: `tutorial:mappls-mcp-agent` - Canonical: https://developer.mappls.com/tutorials/mappls-mcp-agent ```json { "slug": "mappls-mcp-agent", "title": "Give an AI agent grounded Mappls tools", "description": "Run the MCP server, scope credentials, call search and routing tools, and inspect provenance.", "level": "Intermediate", "duration": "30 min", "platforms": [ "MCP" ], "products": [ "ai-location", "search-places", "routes-navigation" ], "outcome": "An agent that can reason about real places without inventing APIs.", "scenario": "An assistant must research solutions and answer place or routing questions with governed Mappls tools instead of invented endpoints or unapproved live-location access.", "steps": [ { "title": "Define the user and system contract", "description": "An assistant must research solutions and answer place or routing questions with governed Mappls tools instead of invented endpoints or unapproved live-location access. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Choose and isolate the transport", "description": "Start with the downloadable Spatial Operations Agent in fixture mode. Use its local stdio client for a same-host server or authenticated Streamable HTTP client for a remote resource. Keep inbound and provider credentials independent; the client accepts an absolute stdio entrypoint or exact HTTPS MCP URL, never a shell string or credential-bearing URL." }, { "title": "Prove offline research first", "description": "Select solution_research and the offline profile. Negotiate advertised tools, retrieve capability and deterministic industry/platform plans without a provider credential, require explicit catalog provenance, and make unavailable live tools a visible state." }, { "title": "Bind live-read authority", "description": "Deploy live-read separately. Validate asymmetric signature, exact issuer and resource audience, subject, client, expiry, and profile scope. Keep provider credentials only in the MCP workload and publish protected-resource metadata without issuing tokens from the MCP service." }, { "title": "Bound every result", "description": "Allow-list planned tools, cap arguments, request time, transport buffers, and structured output, reject gateway-token reflection, and require valid provider provenance from live tools." }, { "title": "Separate plan, approval, and execution", "description": "Hash the proposed tool plan, require approval for sensitive scopes, expire approval, reject any execution whose plan or arguments changed, and close the client on shutdown." }, { "title": "Ground the answer", "description": "Store tool-call evidence without secrets, cite the provider or catalog result used for each claim, and surface uncertainty or unavailable tools instead of fabricating data." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when fixture, real stdio, and remote http paths preserve one client contract; offline solution research completes without provider credentials; both real transports negotiate the intended read-only profile; wrong-audience, expired, insufficient-scope, hidden-tool, oversized-output, and token-reflection paths fail closed; unapproved plans cannot execute; every location claim has tool provenance; tool and gateway errors redact credentials and response bodies. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "fixture, real stdio, and remote HTTP paths preserve one client contract", "offline solution research completes without provider credentials", "both real transports negotiate the intended read-only profile", "wrong-audience, expired, insufficient-scope, hidden-tool, oversized-output, and token-reflection paths fail closed", "unapproved plans cannot execute", "every location claim has tool provenance", "tool and gateway errors redact credentials and response bodies" ], "failureModes": [ "remote client is rejected by auth, URL, host, origin, size, or capacity controls", "authorization-server lifecycle or revocation is unavailable", "configured profile does not advertise a planned tool", "approval expires before execution", "provider result lacks provenance or conflicts with prior context" ] } ``` ## tutorial · Coordinate a complete Mappls A2A journey - Identity: `tutorial:a2a-solution-coordination` - Canonical: https://developer.mappls.com/tutorials/a2a-solution-coordination ```json { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "description": "Validate fixture or OAuth A2A identity, select offline or purpose-bound live-read authority, delegate one exact structured task, reconcile a lost response, bind the server task identity, and review an immutable artifact.", "level": "Advanced", "duration": "90 min", "platforms": [ "MCP" ], "products": [ "ai-location", "search-places", "routes-navigation", "intouch-telematics" ], "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "scenario": "An application must coordinate exact offline planning or purpose-bound Mappls provider reads through A2A while retaining application-owned identity, intent, privacy purpose, recovery, review, and audit authority.", "steps": [ { "title": "Define the user and system contract", "description": "An application must coordinate exact offline planning or purpose-bound Mappls provider reads through A2A while retaining application-owned identity, intent, privacy purpose, recovery, review, and audit authority. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Start with the maintained application", "description": "Download A2A Solution Studio and run its credential-free zero-network fixture. Exercise the complete offline journey first; never accept a free-form prompt, file, URL, provider credential, OAuth token, provider write, or arbitrary skill name in the task model." }, { "title": "Choose and pin the profile", "description": "Fetch the well-known Agent Card under a bounded response, validate A2A v1 plus JSONRPC or HTTP+JSON, require the exact structured skill, infer offline or live-read from the advertised skills, and retain the canonical card fingerprint. Keep offline as default; require the stronger mappls:a2a:live-read resource scope for protected live reads." }, { "title": "Bind live-read purpose and data class", "description": "For one of the ten live commands, require the exact enumerated purpose and bounded operation fields. Record its data class and one-call authority before delegation. Keep Mappls provider credentials only in the A2A service; task payloads and the host never accept them." }, { "title": "Bind transport identity without broadening skill authority", "description": "Obtain a short-lived token for the exact A2A resource from an approved client store, inject it only in the Authorization header, and retain only the public scope plus a transport-authenticated boolean. Never persist or log the token, reuse a Mappls provider credential, or let a request tenant override the token-bound tenant." }, { "title": "Delegate with correct identities", "description": "Persist the command digest and client-owned message, context, attempt, and idempotency identities before transport. Leave task ID empty for a new A2A task, then bind the server-assigned task identity from the result." }, { "title": "Reconcile an unknown outcome", "description": "If the response is lost, keep the aggregate delegated. List the unique context across task states, require exactly one matching task, bind its server identity, and inspect it rather than creating a duplicate delegation." }, { "title": "Validate and review the artifact", "description": "Require completed state, matching context/task identity, one bounded structured artifact, the command’s exact zero-call offline or one-read live authority, no task-payload credentials or writes, and no production approval. Hash the canonical artifact and require an attributable reviewer to accept or reject that exact digest." }, { "title": "Operate sensitive durable state", "description": "Atomically commit snapshots, immutable events, idempotency receipts, and outbox messages; keep live provider payloads out of audit and outbox events; apply tenant authorization, encryption, minimization, expiry, and deletion before adapting the sample file store; recover reconciliation evidence after restart." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when fixture and official sdk paths preserve one host lifecycle; all three offline and ten live command contracts are explicit; agent card, profile, skill, protocol, oauth, purpose, and authority validation fail closed; missing-token, insufficient-scope, wrong-audience, and cross-tenant reads are denied; a lost response reconciles without a second task; server-assigned task identity and artifact digest survive restart; no transport token or provider payload appears in audit evidence; human acceptance never becomes entitlement, write authority, or production approval. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "fixture and official SDK paths preserve one host lifecycle", "all three offline and ten live command contracts are explicit", "Agent Card, profile, skill, protocol, OAuth, purpose, and authority validation fail closed", "missing-token, insufficient-scope, wrong-audience, and cross-tenant reads are denied", "a lost response reconciles without a second task", "server-assigned task identity and artifact digest survive restart", "no transport token or provider payload appears in audit evidence", "human acceptance never becomes entitlement, write authority, or production approval" ], "failureModes": [ "Agent Card changes profile, authority, protocol, skill, size, OAuth metadata, or scope", "authorization is missing, expired, revoked, wrong-audience, or tenant-mismatched", "purpose or data class is incompatible with the selected live skill", "transport outcome is ambiguous and context resolves to zero or multiple tasks", "task or context identity drifts", "artifact is nonterminal, unstructured, oversized, or elevates provider calls or writes", "review names a stale digest or aggregate version", "exact idempotency key is replayed with changed intent" ] } ``` ## tutorial · Provision and validate a remote MCP client - Identity: `tutorial:mcp-client-identity` - Canonical: https://developer.mappls.com/tutorials/mcp-client-identity ```json { "slug": "mcp-client-identity", "title": "Provision and validate a remote MCP client", "description": "Approve exact authority, deliver a signed pre-registration event, inspect discovery, validate PKCE and resource binding, then revoke without transporting a token or secret.", "level": "Advanced", "duration": "55 min", "platforms": [ "MCP" ], "products": [ "ai-location" ], "outcome": "A replay-safe client identity journey with durable registration, request checks, revocation, and audit evidence.", "scenario": "A platform team must provision a remote MCP client against an external authorization server, prove OAuth discovery and request binding, and revoke it without turning control-plane events into a credential channel.", "steps": [ { "title": "Define the user and system contract", "description": "A platform team must provision a remote MCP client against an external authorization server, prove OAuth discovery and request binding, and revoke it without turning control-plane events into a credential channel. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Freeze the registration contract", "description": "Bind one developer application to the exact client kind, callback, issuer, MCP resource audience, least scope, tool allowlist, purpose, and reviewer decision before provisioning begins." }, { "title": "Deliver one authenticated effect", "description": "Lease the durable outbox event, sign timestamp, event ID, and exact body with a managed HMAC key, reject stale or oversized deliveries, and deduplicate by event ID plus body hash." }, { "title": "Persist the external identity", "description": "Provision through the authorization server management seam, store only the non-secret external client ID and receipt, return the strict result contract, and reconcile a timeout before retrying any new effect." }, { "title": "Prove discovery and request binding", "description": "Publish RFC 9728 protected-resource metadata, discover RFC 8414 issuer metadata, require authorization code plus PKCE S256, and include the exact RFC 8707 resource in authorization and token requests." }, { "title": "Revoke without erasing evidence", "description": "Deliver a signed revocation for the same registration aggregate and external identity, disable it at the issuer, preserve receipts and audit, and verify that subsequent authorization checks fail closed." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when an exact retry returns the original registration result; event-id reuse with different bytes conflicts; redirect, issuer, resource, pkce, state, and least scope are validated; no code, token, client secret, or provider credential crosses the adapter callback; restart and revocation preserve attributable evidence. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "an exact retry returns the original registration result", "event-ID reuse with different bytes conflicts", "redirect, issuer, resource, PKCE, state, and least scope are validated", "no code, token, client secret, or provider credential crosses the adapter callback", "restart and revocation preserve attributable evidence" ], "failureModes": [ "signature is wrong, stale, replayed with changed bytes, or too large", "authorization-server mutation succeeds but the response is lost", "callback, resource audience, PKCE method, or requested scope drifts", "revocation targets an unknown or already retired external identity" ] } ``` ## tutorial · Consume Mappls events exactly once in effect - Identity: `tutorial:webhook-reliability` - Canonical: https://developer.mappls.com/tutorials/webhook-reliability ```json { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "description": "Verify signatures, deduplicate deliveries, order per aggregate, retry, and replay safely.", "level": "Advanced", "duration": "55 min", "platforms": [ "REST" ], "products": [ "intouch-telematics", "workmate", "gis-analytics" ], "outcome": "A production webhook ingestion pipeline.", "scenario": "A consumer must apply each Mappls event once in business effect even when delivery is duplicated, delayed, reordered, or retried.", "steps": [ { "title": "Define the user and system contract", "description": "A consumer must apply each Mappls event once in business effect even when delivery is duplicated, delayed, reordered, or retried. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Expose one safe receiver", "description": "Deploy a public DNS hostname on HTTPS port 443 with a bounded path and no URL credential, query, redirect, fragment, IP literal, private name, or alternate port. Keep every A and AAAA answer public; Mappls validates and pins all answers on every attempt." }, { "title": "Prove destination ownership", "description": "Create the endpoint in pending state, validate the signed webhook.endpoint_verification.v1 envelope, compute the versioned challenge proof with the endpoint secret, and return it in x-mappls-verification-response before requesting business or synthetic events." }, { "title": "Verify before parsing", "description": "Read the exact raw body, validate timestamp freshness, event identity, and HMAC in constant time, then reject unknown versions or oversized payloads." }, { "title": "Commit inbox and effect together", "description": "Insert the event ID/content hash, validate aggregate version, apply the domain transition, and append downstream work in one transaction." }, { "title": "Recover deliberately", "description": "Return 2xx only after commit, retry transient dependencies out of band, quarantine conflicts, and replay from immutable evidence with an attributable operator reason. Issue a fresh ownership challenge after expiry; never replay one." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when every dns answer stays public and the receiver does not redirect; destination ownership is proven before business fan-out; the same event id and body is a replay; changed content under one id is rejected; out-of-order transitions do not regress state. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "every DNS answer stays public and the receiver does not redirect", "destination ownership is proven before business fan-out", "the same event ID and body is a replay", "changed content under one ID is rejected", "out-of-order transitions do not regress state" ], "failureModes": [ "DNS changes to any non-public address", "receiver returns a redirect", "ownership challenge expires or is superseded", "signature is stale or invalid", "database commits but response is lost", "event arrives before its prerequisite" ] } ``` ## tutorial · Call Mappls safely from a trusted server - Identity: `tutorial:oauth-server-integration` - Canonical: https://developer.mappls.com/tutorials/oauth-server-integration ```json { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "description": "Exchange OAuth client credentials, keep tokens in bearer headers, call typed Search and Route operations, preserve provenance, and bound retry.", "level": "Intermediate", "duration": "35 min", "platforms": [ "REST" ], "products": [ "search-places", "routes-navigation", "intouch-telematics" ], "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "scenario": "A trusted backend must call Search, Route, and InTouch without placing client credentials in URLs, logs, browsers, or retry queues.", "steps": [ { "title": "Define the user and system contract", "description": "A trusted backend must call Search, Route, and InTouch without placing client credentials in URLs, logs, browsers, or retry queues. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Own credentials in one adapter", "description": "Load client identity from the secret manager, exchange over HTTPS, cache the bearer token before expiry, and deduplicate concurrent refreshes." }, { "title": "Wrap provider calls", "description": "Validate inputs, send bearer headers, cap body and timeout, preserve provider request identity, and map status/body to redacted typed errors." }, { "title": "Retry only safe work", "description": "Retry bounded idempotent reads on transient status or timeout with jitter and Retry-After; reconcile writes by idempotency identity instead of blind retry." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when one token refresh serves concurrent calls; logs never contain credentials or provider bodies; timeouts and rate limits produce typed retry guidance. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "one token refresh serves concurrent calls", "logs never contain credentials or provider bodies", "timeouts and rate limits produce typed retry guidance" ], "failureModes": [ "token endpoint denied or unavailable", "provider returns 429 or 5xx", "timeout occurs after a stateful provider commit" ] } ``` ## tutorial · Build a cross-platform React Native map - Identity: `tutorial:react-native-map` - Canonical: https://developer.mappls.com/tutorials/react-native-map ```json { "slug": "react-native-map", "title": "Build a cross-platform React Native map", "description": "Install the native wrapper, configure both platforms, add annotations, and handle cleanup.", "level": "Intermediate", "duration": "45 min", "platforms": [ "React Native" ], "products": [ "maps" ], "outcome": "One map experience across Android and iOS.", "scenario": "A React Native product needs one map feature across Android and iOS without hiding native lifecycle, permissions, or packaging differences.", "steps": [ { "title": "Define the user and system contract", "description": "A React Native product needs one map feature across Android and iOS without hiding native lifecycle, permissions, or packaging differences. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Configure both native projects", "description": "Install the documented wrapper and peer versions, apply Android package/signing and iOS bundle restrictions, and keep platform setup changes reviewable." }, { "title": "Design a stable JavaScript boundary", "description": "Pass serializable camera/features, use stable IDs, avoid high-frequency bridge chatter, and unsubscribe callbacks on unmount." }, { "title": "Test native divergence", "description": "Exercise permission, background/foreground, rotation, memory pressure, architecture, and release builds independently on both platforms." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when android and ios select the same feature identity; unmount releases native listeners; release builds work with restricted credentials. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "Android and iOS select the same feature identity", "unmount releases native listeners", "release builds work with restricted credentials" ], "failureModes": [ "wrapper/native version skew", "bridge receives events after unmount", "one platform denies location permission" ] } ``` ## tutorial · Build a Flutter map and place picker - Identity: `tutorial:flutter-map` - Canonical: https://developer.mappls.com/tutorials/flutter-map ```json { "slug": "flutter-map", "title": "Build a Flutter map and place picker", "description": "Configure native keys, render the map, and return a validated place to your form.", "level": "Intermediate", "duration": "45 min", "platforms": [ "Flutter" ], "products": [ "maps", "search-places" ], "outcome": "A reusable cross-platform location field.", "scenario": "A Flutter form needs a reusable place picker whose Dart state and native map lifecycle remain synchronized.", "steps": [ { "title": "Define the user and system contract", "description": "A Flutter form needs a reusable place picker whose Dart state and native map lifecycle remain synchronized. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Configure platform runners", "description": "Apply the documented Android and iOS requirements, restrict each platform key, and pin compatible plugin/native versions." }, { "title": "Make selection explicit", "description": "Keep query text, suggestion list, map camera, candidate marker, accepted Mappls Pin, and form value as separate states." }, { "title": "Dispose and restore correctly", "description": "Cancel searches, dispose controllers/subscriptions, restore the accepted place after recreation, and avoid treating a camera center as user consent." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when the form submits only an accepted place; back navigation releases native resources; platform permission denial still permits manual search. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "the form submits only an accepted place", "back navigation releases native resources", "platform permission denial still permits manual search" ], "failureModes": [ "plugin/native SDK mismatch", "late suggestion after widget disposal", "camera moved after a prior selection" ] } ``` ## tutorial · Create a zero-SDK location campaign - Identity: `tutorial:deep-link-campaign` - Canonical: https://developer.mappls.com/tutorials/deep-link-campaign ```json { "slug": "deep-link-campaign", "title": "Create a zero-SDK location campaign", "description": "Build safe place links, add fallback behavior, instrument hand-offs, and test every device.", "level": "Beginner", "duration": "15 min", "platforms": [ "Deep links" ], "products": [ "app-widgets-deep-links" ], "outcome": "A campaign that opens a useful Mappls experience everywhere.", "scenario": "A campaign must open one useful place experience from email, QR, social, and web without requiring an SDK or assuming the Mappls app is installed.", "steps": [ { "title": "Define the user and system contract", "description": "A campaign must open one useful place experience from email, QR, social, and web without requiring an SDK or assuming the Mappls app is installed. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Build from stable location identity", "description": "Use a documented place or navigation link, encode each parameter once, allow-list campaign metadata, and never embed credentials." }, { "title": "Design the fallback chain", "description": "Test installed-app, universal/app-link, mobile browser, desktop browser, and store outcomes while preserving only non-sensitive campaign context." }, { "title": "Measure the hand-off honestly", "description": "Record click and fallback class on your domain, avoid claiming downstream arrival without evidence, and keep a visible copy/open alternative." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when every target device reaches a useful destination; malformed input cannot change the target origin; analytics contain no precise user location. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "every target device reaches a useful destination", "malformed input cannot change the target origin", "analytics contain no precise user location" ], "failureModes": [ "app not installed", "link association misconfigured", "messaging client strips or rewrites parameters" ] } ``` ## tutorial · Build a server-side geocoding boundary - Identity: `tutorial:rest-geocode-service` - Canonical: https://developer.mappls.com/tutorials/rest-geocode-service ```json { "slug": "rest-geocode-service", "title": "Build a server-side geocoding boundary", "description": "Resolve addresses on a trusted server, retain provider identity, and return a narrow application contract.", "level": "Beginner", "duration": "25 min", "platforms": [ "REST" ], "products": [ "search-places" ], "outcome": "A credential-safe geocoding service with typed errors and provenance.", "scenario": "A backend must convert submitted addresses to candidates while keeping Mappls credentials and provider response complexity away from clients.", "steps": [ { "title": "Define the user and system contract", "description": "A backend must convert submitted addresses to candidates while keeping Mappls credentials and provider response complexity away from clients. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Define a narrow request contract", "description": "Accept bounded address text plus explicit region/bias fields, attach an application request ID, and reject markup or oversized input before the provider call." }, { "title": "Call through the trusted adapter", "description": "Acquire a bearer token, encode query parameters, cap timeout/body size, retain provider request identity, and return typed unavailable, denied, empty, or ambiguous outcomes." }, { "title": "Return candidates, not false certainty", "description": "Expose normalized label, Mappls Pin, coordinates, confidence/context available from the source, and require the caller to choose when multiple candidates remain." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when credentials appear only in bearer headers; ambiguous results stay explicit; provider identity follows the selected candidate. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "credentials appear only in bearer headers", "ambiguous results stay explicit", "provider identity follows the selected candidate" ], "failureModes": [ "invalid address input", "no candidate or multiple candidates", "token, quota, or provider timeout" ] } ``` ## tutorial · Turn a device fix into a trustworthy check-in - Identity: `tutorial:reverse-geocode-check-in` - Canonical: https://developer.mappls.com/tutorials/reverse-geocode-check-in ```json { "slug": "reverse-geocode-check-in", "title": "Turn a device fix into a trustworthy check-in", "description": "Reverse geocode accuracy-bearing coordinates, preserve consent, and distinguish evidence from an address label.", "level": "Beginner", "duration": "30 min", "platforms": [ "REST" ], "products": [ "search-places", "capture-feedback" ], "outcome": "A privacy-aware check-in that retains both raw evidence and human-readable context.", "scenario": "A field check-in must attach readable place context to a consented device fix without pretending reverse geocoding proves physical presence.", "steps": [ { "title": "Define the user and system contract", "description": "A field check-in must attach readable place context to a consented device fix without pretending reverse geocoding proves physical presence. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Capture purpose-bound evidence", "description": "Record consent version, purpose, event and receipt time, latitude/longitude, accuracy, source, and expiry separately from the eventual address label." }, { "title": "Reverse geocode on the server", "description": "Validate coordinate and accuracy bounds, call with a trusted credential, retain provider identity, and store the raw evidence hash plus normalized response fields." }, { "title": "Apply a versioned decision policy", "description": "Compare fix accuracy, age, distance to target, and geofence policy; send weak evidence to review and permit consent revocation or precise-data redaction." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when address text never replaces raw accuracy evidence; weak fixes cannot auto-approve; redaction preserves decision lineage. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "address text never replaces raw accuracy evidence", "weak fixes cannot auto-approve", "redaction preserves decision lineage" ], "failureModes": [ "permission or consent absent", "stale or inaccurate fix", "reverse geocoder returns no address" ] } ``` ## tutorial · Generate static maps for receipts and notifications - Identity: `tutorial:static-map-receipt` - Canonical: https://developer.mappls.com/tutorials/static-map-receipt ```json { "slug": "static-map-receipt", "title": "Generate static maps for receipts and notifications", "description": "Render bounded server-side map imagery with safe markers, caching, attribution, and fallback text.", "level": "Beginner", "duration": "20 min", "platforms": [ "REST" ], "products": [ "maps" ], "outcome": "A deterministic map image pipeline for non-interactive surfaces.", "scenario": "A receipt service needs a non-interactive location image that is deterministic, cacheable, attributable, and useful when images are blocked.", "steps": [ { "title": "Define the user and system contract", "description": "A receipt service needs a non-interactive location image that is deterministic, cacheable, attributable, and useful when images are blocked. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Construct a bounded render request", "description": "Use a known place/coordinate, fixed dimensions, scale, zoom, style, and marker count; reject user-controlled URLs, colors, and unbounded geometry." }, { "title": "Fetch and cache server-side", "description": "Keep credentials in the trusted service, key the cache by normalized render parameters and style/data version, cap bytes/time, and retain attribution requirements." }, { "title": "Ship an accessible fallback", "description": "Include the human-readable location and a safe place/navigation link so email clients, screen readers, and image-blocked users keep the essential information." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when identical parameters produce one cache identity; image failure leaves complete location text; no credential reaches generated html. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "identical parameters produce one cache identity", "image failure leaves complete location text", "no credential reaches generated HTML" ], "failureModes": [ "render service timeout", "unsupported or excessive geometry", "email proxy strips the image" ] } ``` ## tutorial · Embed a place picker widget - Identity: `tutorial:web-widget-place-picker` - Canonical: https://developer.mappls.com/tutorials/web-widget-place-picker ```json { "slug": "web-widget-place-picker", "title": "Embed a place picker widget", "description": "Mount a bounded widget, synchronize selection with your form, and preserve the selected Mappls Pin.", "level": "Beginner", "duration": "25 min", "platforms": [ "Widgets", "Web" ], "products": [ "app-widgets-deep-links", "search-places" ], "outcome": "An accessible embedded place picker with explicit host-page ownership.", "scenario": "A host form needs an embedded Mappls place experience while retaining control of validation, focus, persistence, and submission.", "steps": [ { "title": "Define the user and system contract", "description": "A host form needs an embedded Mappls place experience while retaining control of validation, focus, persistence, and submission. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Set the trust boundary", "description": "Load only the documented HTTPS widget origin, restrict browser configuration to the exact host, define allowed messages/events, and give the frame/container a clear title and size." }, { "title": "Normalize one terminal result", "description": "Bind one launch generation to the host lifecycle, treat widget output as an untrusted candidate, validate exact origin and schema, retain only Mappls Pin plus bounded label, and ignore late or duplicate results." }, { "title": "Commit selection deliberately", "description": "Keep candidate, accepted selection, and submitted record as separate states. Persist application selection only after a user decision with idempotency key and expected session version." }, { "title": "Invalidate stale identity", "description": "When host-owned address text changes, clear candidate and accepted Mappls Pin, return to draft, and block submit until the user selects again." }, { "title": "Integrate fallback and accessibility", "description": "Return focus after selection, cancel, or failure; mirror the accepted place in native form controls; announce errors; and keep a complete non-widget search/manual fallback." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when unexpected origins and opaque messages are ignored; a candidate cannot submit the form by itself; host edits invalidate stale selection; keyboard users can complete widget and fallback paths. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "unexpected origins and opaque messages are ignored", "a candidate cannot submit the form by itself", "host edits invalidate stale selection", "keyboard users can complete widget and fallback paths" ], "failureModes": [ "widget script or frame blocked", "message schema/version changes", "duplicate or late terminal callback", "host text edited after widget selection" ] } ``` ## tutorial · Hand off to navigation with a resilient deep link - Identity: `tutorial:navigation-deep-link` - Canonical: https://developer.mappls.com/tutorials/navigation-deep-link ```json { "slug": "navigation-deep-link", "title": "Hand off to navigation with a resilient deep link", "description": "Encode a known place, protect campaign parameters, and provide browser and store fallbacks.", "level": "Beginner", "duration": "20 min", "platforms": [ "Deep links" ], "products": [ "app-widgets-deep-links", "routes-navigation" ], "outcome": "A tested app-to-navigation hand-off across installed and uninstalled states.", "scenario": "A merchant app must hand a confirmed destination to navigation while surviving missing apps, unsupported modes, and rewritten links.", "steps": [ { "title": "Define the user and system contract", "description": "A merchant app must hand a confirmed destination to navigation while surviving missing apps, unsupported modes, and rewritten links. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Freeze the destination", "description": "Create the link only from an accepted Mappls Pin or validated coordinates, choose the documented navigation intent, and encode labels separately from identity." }, { "title": "Own universal fallback", "description": "Route through an HTTPS page that can open the supported app link, show the destination, offer browser navigation, and link to the correct store without redirect loops." }, { "title": "Test and observe state classes", "description": "Cover installed/uninstalled, Android/iOS/desktop, default-browser changes, offline state, and unsupported profiles; measure only the hand-off stage you can prove." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when destination identity survives every fallback; a failed app open returns control to the user; no secret or private payload is encoded. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "destination identity survives every fallback", "a failed app open returns control to the user", "no secret or private payload is encoded" ], "failureModes": [ "app absent or association invalid", "unsupported travel profile", "device is offline at hand-off" ] } ``` ## tutorial · Ship a Mappls map in Cordova and Ionic - Identity: `tutorial:cordova-map` - Canonical: https://developer.mappls.com/tutorials/cordova-map ```json { "slug": "cordova-map", "title": "Ship a Mappls map in Cordova and Ionic", "description": "Separate web and native configuration, wait for device readiness, and clean up plugin state safely.", "level": "Intermediate", "duration": "50 min", "platforms": [ "Cordova" ], "products": [ "maps", "search-places" ], "outcome": "A hybrid map screen with lifecycle-safe native bridge handling.", "scenario": "A Cordova/Ionic application needs native Mappls capability while JavaScript, WebView, and native plugin lifecycles remain independently owned.", "steps": [ { "title": "Define the user and system contract", "description": "A Cordova/Ionic application needs native Mappls capability while JavaScript, WebView, and native plugin lifecycles remain independently owned. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Align plugin and native projects", "description": "Use the documented plugin version, apply Android/iOS credentials and permissions in platform configuration, and rebuild generated native projects after config changes." }, { "title": "Wait for device and view readiness", "description": "Call native features only after `deviceready`, serialize bridge inputs, avoid duplicate listeners across page navigation, and remove the native view before DOM ownership ends." }, { "title": "Design a browser fallback", "description": "Keep search/place identity in shared application state and provide a Web Maps or deep-link route for unsupported devices and plugin initialization failure." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when re-entering the page creates one native view; both native projects pass release configuration; plugin failure has a usable fallback. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "re-entering the page creates one native view", "both native projects pass release configuration", "plugin failure has a usable fallback" ], "failureModes": [ "JavaScript calls before device readiness", "native view survives page teardown", "platform/plugin version mismatch" ] } ``` ## tutorial · Integrate Mappls into a Xamarin application - Identity: `tutorial:xamarin-map` - Canonical: https://developer.mappls.com/tutorials/xamarin-map ```json { "slug": "xamarin-map", "title": "Integrate Mappls into a Xamarin application", "description": "Configure platform projects, isolate credentials, bridge native lifecycle, and preserve location identity in shared code.", "level": "Intermediate", "duration": "55 min", "platforms": [ "Xamarin" ], "products": [ "maps", "search-places" ], "outcome": "A shared-code location feature backed by correctly owned native map views.", "scenario": "A Xamarin application needs shared business state with native Android and iOS map ownership rather than an opaque lowest-common-denominator abstraction.", "steps": [ { "title": "Define the user and system contract", "description": "A Xamarin application needs shared business state with native Android and iOS map ownership rather than an opaque lowest-common-denominator abstraction. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Split shared and platform concerns", "description": "Keep place IDs, commands, and view models shared; configure credentials, permissions, native views, delegates, and package versions in each platform project." }, { "title": "Bind lifecycle explicitly", "description": "Create and dispose renderers predictably, forward native lifecycle callbacks, and detach events when pages disappear or are recreated." }, { "title": "Normalize cross-platform results", "description": "Map native selection/search callbacks into one bounded shared contract with Mappls Pin, label, coordinate, provenance, and optional accuracy/freshness." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when shared state never holds a native view; navigation releases delegates on both platforms; selection contracts are equivalent across platforms. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "shared state never holds a native view", "navigation releases delegates on both platforms", "selection contracts are equivalent across platforms" ], "failureModes": [ "NuGet/native dependency conflict", "renderer recreated without disposal", "one platform returns a partial place result" ] } ``` ## tutorial · Rank responders with a distance matrix - Identity: `tutorial:distance-matrix-dispatch` - Canonical: https://developer.mappls.com/tutorials/distance-matrix-dispatch ```json { "slug": "distance-matrix-dispatch", "title": "Rank responders with a distance matrix", "description": "Batch eligible origins, interpret unreachable pairs, apply deterministic tie-breaks, and keep dispatch explainable.", "level": "Intermediate", "duration": "45 min", "platforms": [ "REST" ], "products": [ "routes-navigation", "search-places" ], "outcome": "An explainable ETA-based dispatch shortlist rather than a straight-line guess.", "scenario": "An emergency dispatcher must rank capable available responders by network ETA without exceeding matrix bounds or hiding unreachable candidates.", "steps": [ { "title": "Define the user and system contract", "description": "An emergency dispatcher must rank capable available responders by network ETA without exceeding matrix bounds or hiding unreachable candidates. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Filter before routing", "description": "Select only capable, active, jurisdiction-eligible resources with fresh positions; cap the candidate set and retain the eligibility reasons." }, { "title": "Build a bounded matrix", "description": "Use one resolved incident destination, batch origins within documented limits, choose the correct vehicle profile, and preserve input/output index identity." }, { "title": "Rank with policy, not ETA alone", "description": "Exclude unreachable/stale pairs, then apply ETA, workload, capability priority, and deterministic tie-breaks; store the matrix request time and chosen explanation." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when every ranked unit was eligible before routing; unreachable pairs remain explicit; the dispatch decision is reproducible from evidence. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "every ranked unit was eligible before routing", "unreachable pairs remain explicit", "the dispatch decision is reproducible from evidence" ], "failureModes": [ "candidate telemetry is stale", "matrix returns partial/unreachable pairs", "incident changes while ranking is in flight" ] } ``` ## tutorial · Build a traffic-aware commute assistant - Identity: `tutorial:traffic-aware-commute` - Canonical: https://developer.mappls.com/tutorials/traffic-aware-commute ```json { "slug": "traffic-aware-commute", "title": "Build a traffic-aware commute assistant", "description": "Compare departure choices, refresh bounded route alternatives, and explain when an ETA becomes stale.", "level": "Intermediate", "duration": "50 min", "platforms": [ "Web", "REST" ], "products": [ "routes-navigation", "maps" ], "outcome": "A route comparison experience that communicates freshness and uncertainty.", "scenario": "A commuter must compare leave-now choices using traffic-aware routes whose freshness and uncertainty are visible.", "steps": [ { "title": "Define the user and system contract", "description": "A commuter must compare leave-now choices using traffic-aware routes whose freshness and uncertainty are visible. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Hold trip intent constant", "description": "Resolve endpoints, profile, exclusions, arrival/departure semantics, and user preferences once so comparisons do not mix different requests." }, { "title": "Version every refresh", "description": "Store route/request identity, observation time, traffic horizon, geometry, duration, distance, and incidents; cancel obsolete requests and never merge alternatives across revisions." }, { "title": "Communicate change", "description": "Explain the meaningful delta, highlight changed segments accessibly, set a refresh threshold, and show the last successful estimate during temporary provider failure." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when alternatives are compared within one revision; stale estimates show their age; refresh does not flicker or reorder without explanation. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "alternatives are compared within one revision", "stale estimates show their age", "refresh does not flicker or reorder without explanation" ], "failureModes": [ "traffic data becomes stale", "route changes during user selection", "provider returns a slower partial response" ] } ``` ## tutorial · Render a governed GeoJSON operations layer - Identity: `tutorial:geojson-operations-layer` - Canonical: https://developer.mappls.com/tutorials/geojson-operations-layer ```json { "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "description": "Validate geometry, assign stable feature IDs, style deterministically, and synchronize map and table selection.", "level": "Intermediate", "duration": "55 min", "platforms": [ "Web" ], "products": [ "maps", "gis-analytics" ], "outcome": "An accessible map layer whose visual state is reproducible from source data.", "scenario": "An operations dashboard must turn source-disclosed GeoJSON into a reproducible accessible map-and-table view.", "steps": [ { "title": "Define the user and system contract", "description": "An operations dashboard must turn source-disclosed GeoJSON into a reproducible accessible map-and-table view. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Validate before rendering", "description": "Enforce feature count/bytes, supported geometry, CRS expectation, coordinate bounds, unique stable IDs, safe properties, source, date, and license." }, { "title": "Compile deterministic style state", "description": "Derive layers, filters, colors, sizes, labels, z-order, legend, and bounds from versioned rules rather than ad-hoc UI mutations." }, { "title": "Synchronize interaction", "description": "Use the feature ID across map hit-test, table row, URL, focus, details, and export; provide non-color cues and a table path for every actionable feature." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when the same input and rules produce identical style output; invalid features fail with diagnostics; map and table always share one selected id. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "the same input and rules produce identical style output", "invalid features fail with diagnostics", "map and table always share one selected ID" ], "failureModes": [ "unsupported geometry or CRS", "duplicate/missing feature identity", "large collection exceeds render budget" ] } ``` ## tutorial · Operate a Mappls client on embedded Linux - Identity: `tutorial:linux-map-client` - Canonical: https://developer.mappls.com/tutorials/linux-map-client ```json { "slug": "linux-map-client", "title": "Operate a Mappls client on embedded Linux", "description": "Separate runtime and map-data compatibility, stage updates, survive power loss, and expose health signals.", "level": "Advanced", "duration": "2 hr", "platforms": [ "Linux", "Automotive" ], "products": [ "offline-automotive", "maps" ], "outcome": "An embedded map runtime with atomic data activation and rollback evidence.", "scenario": "An embedded Linux device must run and update a map client under constrained storage, intermittent connectivity, and supervised process recovery.", "steps": [ { "title": "Define the user and system contract", "description": "An embedded Linux device must run and update a map client under constrained storage, intermittent connectivity, and supervised process recovery. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Pin the compatibility matrix", "description": "Record CPU/GPU, OS image, runtime build, map-data epoch, region, license, storage, and cryptographic requirements as one release manifest." }, { "title": "Supervise runtime health", "description": "Run with bounded resources, expose liveness/readiness, persist only necessary state, isolate writable data, and restart without corrupting the active package." }, { "title": "Use dual-slot updates", "description": "Download into an inactive slot, verify signature/structure, smoke test, switch atomically, health-gate the boot, and retain the prior slot for rollback." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when cold boot works without network; power loss never removes the active package; health failure automatically restores the prior slot. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "cold boot works without network", "power loss never removes the active package", "health failure automatically restores the prior slot" ], "failureModes": [ "GPU/runtime incompatibility", "disk pressure during staging", "power loss between switch and acknowledgement" ] } ``` ## tutorial · Reconcile a complete InTouch trip lifecycle - Identity: `tutorial:intouch-trip-lifecycle` - Canonical: https://developer.mappls.com/tutorials/intouch-trip-lifecycle ```json { "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "description": "Create provider identity, consume event-time telemetry, own exceptions, and close only after provider acknowledgement.", "level": "Advanced", "duration": "2 hr", "platforms": [ "REST", "Web" ], "products": [ "intouch-telematics", "routes-navigation" ], "outcome": "A restart-safe connected trip with replay, late evidence, and closure reconciliation.", "scenario": "A logistics control tower must reconcile internal orders with provider trip and telemetry state across retries, late observations, exceptions, and closure.", "steps": [ { "title": "Define the user and system contract", "description": "A logistics control tower must reconcile internal orders with provider trip and telemetry state across retries, late observations, exceptions, and closure. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Bind identities before movement", "description": "Persist internal trip, provider trip, vehicle/device, route revision, idempotency request, and policy version in one aggregate." }, { "title": "Separate commands from observations", "description": "Send create/start/close through an outbox and reconcile acknowledgement; ingest telemetry/events with source/event/content identity and event-time ordering." }, { "title": "Close through evidence", "description": "Require destination/route progress, resolved exceptions, delivery proof, and provider close acknowledgement; retain late evidence as a derived revision without reopening terminal state." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when duplicate commands and events have one effect; late telemetry cannot regress progress; ambiguous provider close is reconciled before terminal success. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "duplicate commands and events have one effect", "late telemetry cannot regress progress", "ambiguous provider close is reconciled before terminal success" ], "failureModes": [ "provider accepts command but response is lost", "telemetry gap or route deviation", "closure requested with open exception" ] } ``` ## tutorial · Build proof review and rework for field jobs - Identity: `tutorial:workmate-proof-review` - Canonical: https://developer.mappls.com/tutorials/workmate-proof-review ```json { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "description": "Capture purpose-bound evidence, route weak submissions to review, request rework, and preserve decision history.", "level": "Advanced", "duration": "90 min", "platforms": [ "REST", "Android" ], "products": [ "workmate", "capture-feedback" ], "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "scenario": "A field-work organization must distinguish captured evidence, automated policy, human review, rework, approval, and final closure.", "steps": [ { "title": "Define the user and system contract", "description": "A field-work organization must distinguish captured evidence, automated policy, human review, rework, approval, and final closure. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Define evidence policy", "description": "Version required fields, media types, location accuracy/freshness, consent/purpose, checklist, signature, retention, and automatic-review thresholds." }, { "title": "Append submissions", "description": "Give each proof submission an immutable ID/content hash, event/receipt time, actor/device, task version, provider identity, and redaction state; never overwrite a rejected attempt." }, { "title": "Make review a state machine", "description": "Route weak evidence to a named reviewer, record approve/reject/rework reasons, issue a new attempt identity, and allow task closure only from an approved policy-compatible submission." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when rejected evidence remains auditable; automated policy cannot override human rejection; closure names the exact approved submission. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "rejected evidence remains auditable", "automated policy cannot override human rejection", "closure names the exact approved submission" ], "failureModes": [ "offline duplicate submission", "media upload succeeds but command times out", "review policy changes during rework" ] } ``` ## tutorial · Qualify a Cordova location release - Identity: `tutorial:cordova-release-hardening` - Canonical: https://developer.mappls.com/tutorials/cordova-release-hardening ```json { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "description": "Pin bridge and native dependencies, prove lifecycle disposal, automate both release builds, and operate a browser fallback.", "level": "Advanced", "duration": "80 min", "platforms": [ "Cordova" ], "products": [ "maps", "search-places", "routes-navigation" ], "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "scenario": "A hybrid application must remain supportable after plugin, WebView, Android, iOS, and operating-system versions move independently.", "steps": [ { "title": "Define the user and system contract", "description": "A hybrid application must remain supportable after plugin, WebView, Android, iOS, and operating-system versions move independently. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Freeze the compatibility unit", "description": "Record Cordova/Ionic, plugin, native SDK, Gradle, CocoaPods/SPM, WebView, OS target, credential restriction, and entitlement as one reviewed manifest." }, { "title": "Prove lifecycle ownership", "description": "Create one native view generation after device readiness, bound bridge messages, reject late callbacks, detach listeners, restore focus, and dispose before page ownership ends." }, { "title": "Build and recover both targets", "description": "Produce clean Android and iOS release archives, exercise denied/offline/blocked/plugin-missing paths, preserve a web or deep-link fallback, and rehearse version rollback." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when both clean release builds reproduce from the manifest; one page owns one native generation; fallback completes the core user intent; rollback restores the last qualified pair. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "both clean release builds reproduce from the manifest", "one page owns one native generation", "fallback completes the core user intent", "rollback restores the last qualified pair" ], "failureModes": [ "plugin and native SDK version drift", "WebView survives route teardown", "one store release rejects the configured entitlement" ] } ``` ## tutorial · Operate deep links across every hand-off - Identity: `tutorial:deep-link-attribution-resilience` - Canonical: https://developer.mappls.com/tutorials/deep-link-attribution-resilience ```json { "slug": "deep-link-attribution-resilience", "title": "Operate deep links across every hand-off", "description": "Govern destination identity, universal-link association, privacy-safe attribution, fallback, expiry, and campaign retirement.", "level": "Advanced", "duration": "70 min", "platforms": [ "Deep links" ], "products": [ "app-widgets-deep-links", "routes-navigation", "search-places" ], "outcome": "A measurable zero-SDK journey that never confuses a click with arrival.", "scenario": "A multi-channel campaign must preserve one location intent through messaging clients, browsers, installed apps, stores, and privacy controls.", "steps": [ { "title": "Define the user and system contract", "description": "A multi-channel campaign must preserve one location intent through messaging clients, browsers, installed apps, stores, and privacy controls. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Sign the destination contract", "description": "Allow-list documented place, route, or navigation shapes; bind a stable Mappls Pin or validated coordinate, campaign revision, expiry, and non-sensitive attribution fields." }, { "title": "Operate association and fallback", "description": "Monitor Android App Links and iOS Universal Links, prevent redirect loops, retain browser and store choices, and give users a visible copy/open destination." }, { "title": "Measure only observable stages", "description": "Separate impression, click, resolver decision, app hand-off, and application acknowledgement; minimize attribution, expire campaigns, and retire destinations without rewriting history." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when every device class reaches a useful destination; link rewriting cannot change the target origin; analytics make no unproved arrival claim; expired campaigns fail safely. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "every device class reaches a useful destination", "link rewriting cannot change the target origin", "analytics make no unproved arrival claim", "expired campaigns fail safely" ], "failureModes": [ "association file is stale or unavailable", "messaging client strips parameters", "app opens but does not acknowledge the intended destination" ] } ``` ## tutorial · Production-harden a Flutter location feature - Identity: `tutorial:flutter-production-lifecycle` - Canonical: https://developer.mappls.com/tutorials/flutter-production-lifecycle ```json { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "description": "Lock Dart/native compatibility, control rebuilds and streams, test process recovery, and qualify Android and iOS independently.", "level": "Advanced", "duration": "90 min", "platforms": [ "Flutter" ], "products": [ "maps", "search-places", "routes-navigation", "capture-feedback" ], "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "scenario": "A Flutter application must offer consistent location behavior while Dart, Android, iOS, native SDK, permission, and process lifecycles diverge.", "steps": [ { "title": "Define the user and system contract", "description": "A Flutter application must offer consistent location behavior while Dart, Android, iOS, native SDK, permission, and process lifecycles diverge. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Lock the release graph", "description": "Record Flutter/Dart, plugin, native SDK, Android/iOS targets, architecture, permission strings, keys, entitlements, and signing identities in one compatibility decision." }, { "title": "Bound state and bridge traffic", "description": "Separate draft, candidate, accepted identity, controller generation, stream subscriptions, and durable form state; debounce high-frequency events and reject callbacks after dispose." }, { "title": "Qualify native divergence", "description": "Test cold/warm launch, rotation, background, permission change, memory pressure, process recreation, offline state, accessibility, release archives, and rollback on both platforms." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when accepted mappls identity survives process recreation; no disposed widget receives native events; android and ios release paths are independently reproducible; fallback remains usable without location permission. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "accepted Mappls identity survives process recreation", "no disposed widget receives native events", "Android and iOS release paths are independently reproducible", "fallback remains usable without location permission" ], "failureModes": [ "plugin/native architecture mismatch", "late stream event after disposal", "one platform restores an obsolete controller generation" ] } ``` ## tutorial · Qualify an iOS Mappls release - Identity: `tutorial:ios-sdk-production-readiness` - Canonical: https://developer.mappls.com/tutorials/ios-sdk-production-readiness ```json { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "description": "Resolve package authority, bind credentials and entitlements, own controller generations, test privacy and background behavior, and prove rollback.", "level": "Advanced", "duration": "2 hr", "platforms": [ "iOS" ], "products": [ "maps", "search-places", "routes-navigation", "intouch-telematics", "workmate", "capture-feedback", "app-widgets-deep-links", "offline-automotive", "ai-location" ], "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "scenario": "An iOS portfolio uses SDKs, binary distributions, widgets, or tracking components whose source, package, entitlement, privacy, and lifecycle authority must stay explicit.", "steps": [ { "title": "Define the user and system contract", "description": "An iOS portfolio uses SDKs, binary distributions, widgets, or tracking components whose source, package, entitlement, privacy, and lifecycle authority must stay explicit. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Resolve the exact distribution", "description": "Bind repository fingerprint, released package/version/checksum, Swift toolchain, minimum iOS, architecture, transitive dependencies, account region, entitlement, credential class, bundle, team, and rollback owner." }, { "title": "Own every presentation generation", "description": "Create UI and delegates on the main actor, normalize only allow-listed results, reject stale callbacks, make background/location behavior purpose-bound, and dispose controllers and observers exactly once." }, { "title": "Qualify on clean devices", "description": "Automate denied/restricted/approximate permission, offline, entitlement expiry, background/foreground, memory pressure, process restart, accessibility, privacy manifest, archive/export, upgrade, downgrade, and rollback." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when a clean archive installs and launches on every supported target; no opaque provider object enters durable state; tracking and widget journeys survive restart safely; revoked access degrades without leaking credentials. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "a clean archive installs and launches on every supported target", "no opaque provider object enters durable state", "tracking and widget journeys survive restart safely", "revoked access degrades without leaking credentials" ], "failureModes": [ "package exists but owning product contract is unclear", "delegate callback arrives after replacement", "background permission or entitlement changes during an active journey" ] } ``` ## tutorial · Build restart-safe iOS direction and geofence handoffs - Identity: `tutorial:ios-direction-geofence-handoffs` - Canonical: https://developer.mappls.com/tutorials/ios-direction-geofence-handoffs ```json { "slug": "ios-direction-geofence-handoffs", "title": "Build restart-safe iOS direction and geofence handoffs", "description": "Own native editor generations, validate route and geometry candidates, provide an exact navigation-link fallback, separate target acknowledgement and application review, and recover safely after restart.", "level": "Advanced", "duration": "95 min", "platforms": [ "iOS" ], "products": [ "app-widgets-deep-links", "routes-navigation", "intouch-telematics" ], "outcome": "Two tested, durable iOS handoff journeys with explicit provider and application evidence boundaries.", "scenario": "A mobility application must let travelers choose a route and operations authors draft geofences through Mappls iOS UI surfaces without treating presentation, callback, deep-link opening, review, or publication as the same fact.", "steps": [ { "title": "Define the user and system contract", "description": "A mobility application must let travelers choose a route and operations authors draft geofences through Mappls iOS UI surfaces without treating presentation, callback, deep-link opening, review, or publication as the same fact. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Freeze the evidence and adapter seams", "description": "Select exact entitled MapplsDirectionUI and MapplsGeofenceUI releases from reviewed source guides, keep their native types behind separate translators, and label the host fixture envelope as application-owned rather than a provider wire contract." }, { "title": "Own intent, revision, and presentation generation", "description": "Persist bounded direction destination/profile or geofence purpose/scope/policy as the aggregate draft, increment one generation for each editor presentation, and reject callbacks from disposed controllers or superseded draft revisions." }, { "title": "Complete the direction evidence ladder", "description": "Validate route revision, candidate count, selected index, destination, and profile; require deliberate traveler selection; record navigation request separately from the target adapter acknowledgement; and use only the documented Mappls HTTPS/app-URI navigation shape for recovery." }, { "title": "Complete the geofence review boundary", "description": "Normalize a bounded circle or polygon, reject invalid coordinates, radius, duplicate or crossing vertices, hash the canonical geometry, bind it to purpose and policy, and require a reviewer other than the draft author." }, { "title": "Commit and recover exactly once in effect", "description": "Require an idempotency key and expected aggregate version, atomically store snapshot, processed-command receipt, immutable audit event, and outbox entry, then prove restart recovery without persisting controllers, delegates, route objects, layers, credentials, or opaque payloads." }, { "title": "Qualify hostile paths on devices", "description": "Exercise installed and missing apps, broken universal-link association, offline state, UI unavailability, cancellation, duplicate and late callbacks, invalid indexes, geometry attacks, process death, accessibility focus restoration, target timeout, entitlement drift, upgrade, and rollback." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when direction return, route selection, handoff request, and target acceptance are independently evidenced; the fallback emits only the documented navigation hosts and never claims a return callback; stale or opaque native results change no state; geofence approval remains an application draft until an authoritative publication contract exists; self-review and stale review are rejected; restart and replay preserve one aggregate truth. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "direction return, route selection, handoff request, and target acceptance are independently evidenced", "the fallback emits only the documented navigation hosts and never claims a return callback", "stale or opaque native results change no state", "geofence approval remains an application draft until an authoritative publication contract exists", "self-review and stale review are rejected", "restart and replay preserve one aggregate truth" ], "failureModes": [ "native UI is unavailable and the app link is not installed", "a callback arrives from an old presentation or route revision", "the route index or intent differs from the active draft", "circle or polygon violates geometry policy", "navigation target times out after request", "no authoritative entitled geofence publication contract is selected" ] } ``` ## tutorial · Qualify React Native native parity - Identity: `tutorial:react-native-native-parity` - Canonical: https://developer.mappls.com/tutorials/react-native-native-parity ```json { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "description": "Freeze wrapper/native versions, normalize cross-platform results, constrain bridge traffic, recover process death, and release both native targets.", "level": "Advanced", "duration": "100 min", "platforms": [ "React Native" ], "products": [ "maps", "search-places", "routes-navigation", "intouch-telematics", "workmate", "capture-feedback" ], "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "scenario": "A React Native product must keep one JavaScript business contract while native wrappers, SDKs, permissions, and release behavior differ by platform.", "steps": [ { "title": "Define the user and system contract", "description": "A React Native product must keep one JavaScript business contract while native wrappers, SDKs, permissions, and release behavior differ by platform. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Freeze wrapper and native authority", "description": "Record React Native/New Architecture mode, wrapper, peer packages, Android/iOS SDK versions, build tools, restriction identities, permission policy, and entitlement in one manifest." }, { "title": "Normalize the bridge contract", "description": "Use serializable bounded inputs and results, stable Mappls/business IDs, explicit generation and cancellation, backpressure for location events, and no native object retention in JavaScript state." }, { "title": "Prove platform parity honestly", "description": "Run independent Android and iOS suites for cold/warm launch, background, permission changes, rotation, process death, bridge reload, offline, accessibility, release archive, upgrade, and rollback; document intentional divergence." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when both native targets implement the same portable result schema; bridge reload cannot duplicate tracking or listeners; late callbacks are rejected by generation; each store artifact has separate qualification evidence. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "both native targets implement the same portable result schema", "bridge reload cannot duplicate tracking or listeners", "late callbacks are rejected by generation", "each store artifact has separate qualification evidence" ], "failureModes": [ "wrapper compiles against only one native SDK line", "JavaScript reload leaves a native session active", "platform permission semantics produce different unhandled states" ] } ``` ## tutorial · Operate widgets as untrusted lifecycle surfaces - Identity: `tutorial:widget-host-production` - Canonical: https://developer.mappls.com/tutorials/widget-host-production ```json { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "description": "Validate origin and schema, separate candidate from commit, recover blocked embeds, preserve accessibility, and retire safely.", "level": "Advanced", "duration": "85 min", "platforms": [ "Widgets" ], "products": [ "app-widgets-deep-links", "search-places", "routes-navigation", "intouch-telematics", "capture-feedback" ], "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "scenario": "A host application embeds a provider-owned surface but must retain validation, persistence, accessibility, recovery, and business submission authority.", "steps": [ { "title": "Define the user and system contract", "description": "A host application embeds a provider-owned surface but must retain validation, persistence, accessibility, recovery, and business submission authority. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Constrain the trust boundary", "description": "Pin the documented origin/component/release, CSP and frame policy, exact message origin, versioned allow-list schema, credential class, entitlement, and one host generation." }, { "title": "Separate candidate from commitment", "description": "Treat every callback/message as untrusted candidate evidence, copy only bounded identity, require a deliberate user commit, invalidate selection after host edits, and persist with idempotency and expected version." }, { "title": "Operate failure and retirement", "description": "Handle blocked script/frame, timeout, denied access, duplicate/late messages, back navigation, bfcache, unmount, dependency upgrade, accessibility focus, useful manual fallback, telemetry minimization, and rollback." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when wrong-origin and unknown-schema input changes no state; candidate receipt cannot submit the business record; fallback supports keyboard and screen-reader completion; unmount and rollback leave no active generation. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "wrong-origin and unknown-schema input changes no state", "candidate receipt cannot submit the business record", "fallback supports keyboard and screen-reader completion", "unmount and rollback leave no active generation" ], "failureModes": [ "CSP or browser blocks the widget", "message contract changes without version negotiation", "late callback targets an edited or submitted host record" ] } ``` ## tutorial · Harden and migrate a Xamarin location feature - Identity: `tutorial:xamarin-maintenance-migration` - Canonical: https://developer.mappls.com/tutorials/xamarin-maintenance-migration ```json { "slug": "xamarin-maintenance-migration", "title": "Harden and migrate a Xamarin location feature", "description": "Inventory native dependencies, isolate shared state, qualify each renderer, add rollback, and prepare a controlled successor migration.", "level": "Advanced", "duration": "2 hr", "platforms": [ "Xamarin" ], "products": [ "maps", "search-places", "routes-navigation" ], "outcome": "A supportable existing integration with explicit compatibility, teardown, and migration evidence.", "scenario": "An existing Xamarin application must remain safe while its shared runtime and native dependencies age, and must move to a supported successor without a risky rewrite.", "steps": [ { "title": "Define the user and system contract", "description": "An existing Xamarin application must remain safe while its shared runtime and native dependencies age, and must move to a supported successor without a risky rewrite. Record the region, data freshness, latency budget, privacy purpose, credential owner, and fallback before choosing an SDK or endpoint." }, { "title": "Inventory the actual release graph", "description": "Record Xamarin/Mono, NuGet, native Android/iOS SDKs, bindings, renderers, OS targets, credentials, entitlements, source fingerprints, binary checksums, and known workstation-only steps." }, { "title": "Contain and qualify current behavior", "description": "Keep native views and delegates platform-owned, normalize portable results, remove leaked listeners, automate cold/warm launch and permission failures, and produce clean signed archives with rollback." }, { "title": "Migrate behind one contract", "description": "Freeze the shared location interface, build the successor adapter alongside the existing one, compare identity/results/lifecycle telemetry, stage cohorts, retain reversible data and release paths, then retire bindings deliberately." }, { "title": "Prove the production behavior", "description": "Automate the happy path and every named failure. The release is ready only when current artifacts reproduce without a configured workstation; shared state contains no native object; old and successor adapters satisfy one contract suite; cohort rollback preserves user and business state. Capture provider request identity without logging credentials or unnecessary precise location." } ], "acceptance": [ "current artifacts reproduce without a configured workstation", "shared state contains no native object", "old and successor adapters satisfy one contract suite", "cohort rollback preserves user and business state" ], "failureModes": [ "binding references an unavailable native symbol", "renderer lifecycle differs across OS versions", "successor adapter changes place identity or cancellation semantics" ] } ``` ## industry-solution · A delivery promise customers can trust - Identity: `industry-solution:last-mile-delivery` - Canonical: https://developer.mappls.com/use-cases/last-mile-delivery ```json { "slug": "last-mile-delivery", "industry": "Logistics", "title": "A delivery promise customers can trust", "summary": "Validate addresses, allocate stops, guide drivers, stream progress, and prove completion.", "outcome": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep.", "products": [ "search-places", "routes-navigation", "intouch-telematics", "capture-feedback" ], "workflow": [ "Normalize the destination and retain its Mappls Pin", "Optimize stops against capacity and time windows", "Navigate with live rerouting", "Stream driver and order state", "Capture geotagged proof and reconcile exceptions" ], "metrics": [ "First-attempt delivery rate", "Cost per stop", "ETA error", "Distance per order" ], "personas": [ "Checkout customer", "Dispatch planner", "Driver", "Customer-support agent", "Transport partner" ], "scenario": "At 18:05 a customer places a same-evening grocery order to a loosely formatted apartment address. The promise engine has eight minutes to validate serviceability and a two-hour window; dispatch must combine it with 37 stops, the driver may lose connectivity, and support needs one explainable timeline when the entrance is hard to find.", "architecture": [ { "title": "Order system of record", "description": "Owns order, customer promise, consent, service window, package constraints, payment, and terminal delivery outcome." }, { "title": "Location normalization", "description": "Search and address services produce candidates; the accepted Mappls Pin becomes the durable destination identity rather than repeatedly geocoding text." }, { "title": "Planning and guidance", "description": "Route and matrix boundaries sequence eligible stops, preserve route revisions, and provide driver guidance without making the map UI authoritative." }, { "title": "Trip evidence", "description": "InTouch observations are deduplicated by source identity and event time; ETA revisions and exceptions are derived without rewriting raw telemetry." }, { "title": "Customer and operations views", "description": "A privacy-reduced tracking projection serves the customer while dispatch/support retain the attributable full journey and proof-review queue." } ], "dataContracts": [ "Order ↔ destination Mappls Pin and acceptance timestamp", "Route revision ↔ ordered stop IDs, profile, constraints, provider request identity", "Telemetry event ↔ source/event/content identity, event time, receipt time, accuracy", "Proof submission ↔ consent purpose, media hashes, location evidence, reviewer decision" ], "risks": [ { "title": "Ambiguous apartment entrance", "recovery": "Offer landmark/entrance candidates, let the customer confirm one stable pin, and preserve the original address plus every selection revision." }, { "title": "Driver telemetry goes silent", "recovery": "Show last verified progress and age, alert dispatch after policy threshold, and avoid inventing a moving ETA." }, { "title": "Provider accepts a route/trip command after timeout", "recovery": "Reconcile by idempotency/provider identity before issuing another command or closing locally." } ], "rollout": [ "Pilot address capture and Mappls Pin continuity on one checkout flow", "Add matrix-assisted planning in shadow mode and compare against dispatcher choices", "Enable one depot with bounded live telemetry and exception ownership", "Expose customer ETA only after freshness/error SLOs pass", "Scale by region with cost, privacy, support, and failover reviews" ] } ``` ## industry-solution · A pickup flow that survives the real world - Identity: `industry-solution:ride-hailing` - Canonical: https://developer.mappls.com/use-cases/ride-hailing ```json { "slug": "ride-hailing", "industry": "Mobility", "title": "A pickup flow that survives the real world", "summary": "Find entrances, match riders and drivers, route continuously, and resolve pickup ambiguity.", "outcome": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points.", "products": [ "maps", "search-places", "routes-navigation", "intouch-telematics" ], "workflow": [ "Bias search to the rider viewport", "Confirm a precise pickup pin and landmark", "Match with network-aware ETA", "Track approach and reroute", "Detect arrival and close the trip" ], "metrics": [ "Pickup ETA", "Cancellation rate", "Driver idle distance", "Pickup support contacts" ], "personas": [ "Rider", "Driver", "Marketplace dispatcher", "Safety operator", "Customer support" ], "scenario": "At a busy railway station, a rider searches for the station name but the legal vehicle pickup point is 420 metres away. The marketplace must suggest a safe entrance, match a driver by road ETA rather than straight-line distance, guide both parties, and preserve a reviewable record if either disputes arrival.", "architecture": [ { "title": "Trip marketplace", "description": "Owns request, fare, rider/driver identities, eligibility, assignment, cancellation, safety state, and settlement." }, { "title": "Pickup intent", "description": "Autosuggest and map confirmation resolve human text and viewport context to a precise Mappls Pin with entrance/landmark explanation." }, { "title": "ETA matching", "description": "A bounded matrix ranks eligible fresh driver positions; marketplace policy adds workload, vehicle, safety, and deterministic tie-breaks." }, { "title": "Approach journey", "description": "Route revisions and event-time vehicle observations derive progress, rerouting, pickup-zone entry, and freshness." }, { "title": "Shared rendezvous experience", "description": "Rider and driver receive the same stable pickup identity with role-appropriate directions and a support-visible discrepancy trail." } ], "dataContracts": [ "Ride request ↔ accepted pickup/drop Mappls Pins and selection revisions", "Driver candidate ↔ capability, availability, position freshness, matrix ETA", "Assignment ↔ aggregate version, chosen explanation, provider route revision", "Arrival evidence ↔ event/receipt time, accuracy, zone policy, rider/driver acknowledgement" ], "risks": [ { "title": "Search resolves the building centre", "recovery": "Present signed pickup zones/entrances as candidates and require explicit rider confirmation before matching." }, { "title": "Driver location is stale", "recovery": "Exclude it from ETA ranking, show marketplace capacity honestly, and request fresh evidence rather than extrapolating indefinitely." }, { "title": "Rider and driver disagree on arrival", "recovery": "Retain both event streams, accuracy, call/support actions, and apply a versioned human-review policy." } ], "rollout": [ "Instrument current pickup corrections without changing dispatch", "Introduce confirmed Mappls Pin pickup at a small set of complex venues", "Shadow network-ETA ranking and measure pickup/cancellation outcomes", "Enable approach progress and safety operations for one city", "Expand only after bias, privacy, driver-experience, and incident reviews" ] } ``` ## industry-solution · Dispatch the right technician, with the right proof - Identity: `industry-solution:field-service` - Canonical: https://developer.mappls.com/use-cases/field-service ```json { "slug": "field-service", "industry": "Utilities", "title": "Dispatch the right technician, with the right proof", "summary": "Turn outages or service requests into skill-aware, route-efficient field jobs.", "outcome": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off.", "products": [ "workmate", "routes-navigation", "capture-feedback", "gis-analytics" ], "workflow": [ "Geocode and classify the service location", "Assign by skills, shift, inventory, and ETA", "Guide the technician", "Collect checklist, image, and signature proof", "Analyze repeat faults spatially" ], "metrics": [ "First-time-fix rate", "Jobs per shift", "SLA compliance", "Repeat visit rate" ], "personas": [ "Service requester", "Dispatcher", "Technician", "Proof reviewer", "Operations manager" ], "scenario": "A utility receives a no-power complaint for a commercial unit. Dispatch must resolve the service point, choose a technician with the correct certification and inventory, survive an offline basement visit, collect readings and imagery, route weak proof to review, and close the job only after the provider and customer records agree.", "architecture": [ { "title": "Work-order system", "description": "Owns customer/service asset, SLA, required skills, inventory, commercial outcome, and the authoritative terminal status." }, { "title": "Spatial service context", "description": "Search, asset layers, and mGIS context bind the request to a stable service location, access notes, network assets, and hazards." }, { "title": "Workmate lifecycle", "description": "Provider task identity mirrors explicit create, assign, accept, travel, arrive, prove, review/rework, and close transitions through an outbox/callback boundary." }, { "title": "Technician experience", "description": "Mobile guidance, offline command queue, checklists, evidence capture, and conflict UI operate under scoped task and consent policy." }, { "title": "Operations and analytics", "description": "Owned exception/review queues, audit, repeat-fault spatial analysis, and SLA metrics derive from immutable task/evidence history." } ], "dataContracts": [ "Work order ↔ service asset/location ID, SLA, skill and inventory requirements", "Assignment ↔ technician eligibility snapshot, ETA evidence, policy version", "Offline command ↔ stable idempotency key, expected aggregate version, device time", "Proof ↔ immutable submission ID/hash, consent, accuracy, checklist, reviewer decision" ], "risks": [ { "title": "Technician accepts while another assignment races", "recovery": "Use optimistic aggregate versions and one active assignment invariant; surface conflict instead of last-write-wins." }, { "title": "Offline commands replay after reassignment", "recovery": "Validate actor, task version, and transition preconditions for every queued command; retain rejected evidence." }, { "title": "Proof is incomplete", "recovery": "Move to named review/rework with reason and a new submission identity; never overwrite the rejected attempt." } ], "rollout": [ "Model task states and audit without provider mutation", "Connect one Workmate sandbox team through outbox and signed reconciliation", "Pilot offline-safe execution and proof review for one job type", "Add skill/ETA-assisted assignment in recommendation mode", "Scale with policy versioning, workforce consent, retention, and support certification" ] } ``` ## industry-solution · Restore the grid from alarm to verified service - Identity: `industry-solution:energy-grid-resilience` - Canonical: https://developer.mappls.com/use-cases/energy-grid-resilience ```json { "slug": "energy-grid-resilience", "industry": "Energy", "title": "Restore the grid from alarm to verified service", "summary": "Correlate network alarms, weather exposure, switching plans, field crews, and restoration evidence.", "outcome": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk.", "products": [ "gis-analytics", "intouch-telematics", "workmate", "routes-navigation", "capture-feedback" ], "workflow": [ "Version the network and hazard context", "Correlate alarms into bounded outage incidents", "Approve a switching and crew plan", "Guide crews and capture field evidence", "Reconcile telemetry, customer impact, and restoration" ], "metrics": [ "Customers restored per hour", "SAIDI contribution", "Crew travel time", "Repeat outage rate" ], "personas": [ "Grid control operator", "Outage coordinator", "Switching authority", "Field crew", "Customer-impact lead" ], "scenario": "A monsoon storm trips feeders across two districts while flood exposure changes road access by the minute. Grid operations must correlate alarms against an exact network version, estimate affected service points, obtain an independently approved switching plan, dispatch capable crews, preserve every field observation, and avoid declaring restoration until telemetry and customer-impact evidence converge.", "architecture": [ { "title": "Network and hazard authority", "description": "The utility system of record owns assets, connectivity, protection settings, switching authority and customer-service relationships; versioned mGIS layers add terrain, flood, access and vegetation context without replacing that authority." }, { "title": "Outage correlation", "description": "Append-only alarms and calls map to exact network versions and form bounded incidents under a versioned correlation rule with operator correction." }, { "title": "Switching and dispatch", "description": "An application-owned plan separates electrical safety approval from skill-, equipment- and ETA-aware Workmate assignments; no map or route result authorizes switching." }, { "title": "Field execution", "description": "Offline-safe tasks, route evidence, asset identity, observations and proof submissions preserve stable command IDs, expected versions and event/receipt time." }, { "title": "Restoration reconciliation", "description": "Closure requires authoritative device state, switching completion, crew evidence and customer-impact recovery; mismatches remain an owned exception." } ], "dataContracts": [ "Grid asset ↔ topology/configuration version, owner and safety class", "Alarm ↔ source/event/content identity, event/receipt time and mapped asset", "Switching plan ↔ exact assets, sequence, approver, version and expiry", "Crew task ↔ eligibility snapshot, route evidence, provider identity and proof", "Restoration ↔ telemetry, customer-impact and operator reconciliation evidence" ], "risks": [ { "title": "Many alarms collapse onto the wrong feeder", "recovery": "Retain each source alarm, topology version and correlation reason; require operator correction and create a new incident revision rather than rewriting prior evidence." }, { "title": "A road route crosses a newly flooded segment", "recovery": "Append the hazard revision, invalidate the route identity, keep the switching plan separate, and require dispatch to approve a safe replacement." }, { "title": "Crew completion arrives before telemetry recovery", "recovery": "Keep the task evidence complete but the outage in reconciliation; query authoritative device and customer-impact sources before closure." } ], "rollout": [ "Reconcile one feeder model and its ownership", "Replay historical storms through correlation in shadow mode", "Pilot approved switching plus offline crew evidence", "Require multi-source restoration reconciliation in one district", "Expand after electrical-safety, privacy, resilience, workforce and regulatory review" ] } ``` ## industry-solution · Choose the next store with evidence - Identity: `industry-solution:retail-expansion` - Canonical: https://developer.mappls.com/use-cases/retail-expansion ```json { "slug": "retail-expansion", "industry": "Retail", "title": "Choose the next store with evidence", "summary": "Combine catchments, demographics, competition, access, and existing performance.", "outcome": "Faster site screening and investment decisions grounded in a reusable spatial model.", "products": [ "gis-analytics", "search-places", "maps" ], "workflow": [ "Publish candidate sites and performance data", "Generate drive-time catchments", "Join demand and competition signals", "Score and compare candidates", "Share an executive decision map" ], "metrics": [ "Forecast accuracy", "Cannibalization risk", "Time to shortlist", "Revenue per catchment" ], "personas": [ "Expansion analyst", "GIS data steward", "Real-estate manager", "Finance reviewer", "Executive approver" ], "scenario": "A retailer is comparing 60 candidate neighbourhoods for 12 stores. Analysts must combine travel-time catchments, competition, demographics, access and existing performance, explain every score, prevent data drift between committee meetings, and revoke a shared decision view after the acquisition window closes.", "architecture": [ { "title": "Enterprise data products", "description": "Own approved store performance, candidate, demand, competition and financial datasets with source, license, observation date and steward." }, { "title": "mGIS version registry", "description": "Publishes immutable spatial dataset versions with content hash, schema, CRS, validation diagnostics and access policy." }, { "title": "Analysis engine", "description": "Creates parameterized catchments, joins exact input versions, normalizes signals and writes immutable scoring attempts and lineage." }, { "title": "Analyst decision lab", "description": "Compares candidates, sensitivity and exclusions without mutating source evidence; comments and selections name result revisions." }, { "title": "Governed sharing", "description": "Audience, expiry, export/embed rules, executive narrative and revocation wrap one immutable result rather than an untraceable screenshot." } ], "dataContracts": [ "Dataset version ↔ source/license/date/schema/CRS/content hash", "Catchment attempt ↔ route profile, threshold, input versions, engine version", "Score attempt ↔ normalization, weights, exclusions, ties, output hash", "Share ↔ result revision, audience, expiry, export/embed policy, revocation" ], "risks": [ { "title": "Demographic feed changes mid-analysis", "recovery": "Publish a new immutable input version and rerun; retain both result revisions and prevent silent replacement." }, { "title": "Candidate geometry has the wrong CRS", "recovery": "Fail before processing with feature-level diagnostics and require a corrected dataset version." }, { "title": "Executive link is forwarded", "recovery": "Enforce audience/expiry, log access, prohibit export where required, and revoke the share without deleting lineage." } ], "rollout": [ "Inventory and classify source datasets and licenses", "Reproduce one historical store decision from immutable versions", "Run model beside the existing spreadsheet for one region", "Add governed collaboration and sensitivity review", "Promote only after finance, data governance, fairness, and forecast back-testing" ] } ``` ## industry-solution · Make address risk explainable - Identity: `industry-solution:banking-address-risk` - Canonical: https://developer.mappls.com/use-cases/banking-address-risk ```json { "slug": "banking-address-risk", "industry": "Financial services", "title": "Make address risk explainable", "summary": "Standardize applications, verify presence, enrich geography, and route cases for review.", "outcome": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses.", "products": [ "search-places", "capture-feedback", "gis-analytics" ], "workflow": [ "Normalize the entered address", "Compare declared and captured locations", "Join serviceability and risk zones", "Score confidence with reasons", "Escalate only unresolved cases" ], "metrics": [ "Straight-through processing", "False-positive review rate", "Verification turnaround", "Fraud loss" ], "personas": [ "Applicant", "Onboarding service", "Risk analyst", "Manual reviewer", "Compliance auditor" ], "scenario": "A small-business applicant enters an informal address and consents to a device-location check. The bank must normalize the address, compare accuracy-bearing evidence, join serviceability/risk geography, auto-approve only strong cases, redact precise evidence on schedule, and still explain the decision years later.", "architecture": [ { "title": "Onboarding system", "description": "Owns application, declared address, consent, KYC identity, product eligibility, decision and regulatory retention." }, { "title": "Address normalization", "description": "Search/standardization returns candidates and a selected Mappls Pin with source provenance rather than a rewritten string presented as certainty." }, { "title": "Evidence service", "description": "Captures consented device fix, accuracy, event/receipt time and content hash separately from reverse-geocoded label." }, { "title": "Risk policy engine", "description": "Joins versioned zones and computes explainable features under a named policy; weak/contradictory evidence enters manual review." }, { "title": "Audit and privacy controls", "description": "Preserve input/policy/decision lineage while access controls, purpose limits and redaction remove precise data when no longer required." } ], "dataContracts": [ "Declared address ↔ original text, normalized candidates, chosen Mappls Pin", "Device evidence ↔ consent/purpose, coordinate, accuracy, times, source, hash", "Risk enrichment ↔ zone dataset versions and feature values", "Decision ↔ policy version, evidence IDs, reasons, reviewer and redaction state" ], "risks": [ { "title": "Device fix is weak or unavailable", "recovery": "Do not infer presence; continue with alternate evidence or manual review and record the reason." }, { "title": "Address and device evidence disagree", "recovery": "Retain both, calculate distance under a versioned policy, and prohibit automated override of a reviewer rejection." }, { "title": "Precise evidence reaches retention limit", "recovery": "Redact payload while retaining hash, coarse result, consent/decision lineage and attributable deletion event." } ], "rollout": [ "Normalize addresses and measure candidate ambiguity", "Capture consent/evidence in shadow mode with no decision impact", "Back-test a versioned policy against reviewed cases", "Pilot reviewer tooling and redaction workflow", "Enable bounded automation only after compliance, bias, security, and model-risk approval" ] } ``` ## industry-solution · Evidence-led claims from incident to settlement - Identity: `industry-solution:insurance-claims` - Canonical: https://developer.mappls.com/use-cases/insurance-claims ```json { "slug": "insurance-claims", "industry": "Insurance", "title": "Evidence-led claims from incident to settlement", "summary": "Capture location and imagery, use governed vision triage, dispatch assessors, and understand catastrophe exposure.", "outcome": "Faster, more consistent claims decisions with tamper-aware spatial evidence.", "products": [ "capture-feedback", "ai-location", "workmate", "gis-analytics", "routes-navigation" ], "workflow": [ "Record consented incident location", "Capture guided photo evidence", "Run model-locked vision triage with human review bands", "Dispatch an assessor when needed", "Overlay hazard and policy context", "Preserve decision lineage and redaction" ], "metrics": [ "Settlement time", "Assessor travel", "Evidence completeness", "Leakage rate" ], "personas": [ "Policyholder", "Claims intake", "Assessor", "Fraud analyst", "Catastrophe manager" ], "scenario": "After a severe storm, a policyholder submits vehicle-damage images and location evidence. The insurer must guide capture, detect missing or contradictory context without overclaiming authenticity, run model-locked vision triage with human review, dispatch scarce assessors by eligibility and ETA, join hazard exposure, and retain explainable evidence through settlement and appeal.", "architecture": [ { "title": "Claims system", "description": "Owns policy, claimant, incident declaration, coverage, reserves, decisions, settlement and appeal." }, { "title": "Consented capture and vision boundary", "description": "Collects guided media, device/location accuracy, timestamps, hashes, capture policy and disclosure; an entitled SkyDNN adapter locks model identity, validates bounded derived geometry and confidence, and never treats metadata or inference as proof by itself." }, { "title": "Spatial enrichment", "description": "Normalizes incident place, joins versioned hazard/catastrophe layers and links every feature to its source and observation window." }, { "title": "Assessment operations", "description": "Routes incomplete, uncertain, sensitive, or high-risk claims to independent review and capable assessors, ranks eligible teams by network ETA and tracks field-task proof." }, { "title": "Decision evidence", "description": "Policy engine and reviewer actions name exact submissions, enrichments, model fingerprints, rule versions and reasons; later evidence creates a revision and retention policy redacts derived detections without erasing audit." } ], "dataContracts": [ "Claim ↔ declared incident place and policy coverage snapshot", "Evidence submission ↔ immutable media hashes, consent, times, accuracy, device/source", "Vision attempt ↔ model fingerprint, asset hash, bounded detections, confidence, review policy", "Hazard feature ↔ dataset/version, geometry relation, observation date", "Assessment decision ↔ evidence IDs, rule/model version, reviewer, settlement revision" ], "risks": [ { "title": "Media upload partially succeeds", "recovery": "Use per-object hashes and a submission manifest; keep the claim incomplete until all required evidence commits." }, { "title": "Vision result is uncertain or sensitive", "recovery": "Preserve model and input identities, route to an independent reviewer, and prohibit automatic settlement or fraud decisions." }, { "title": "Location metadata conflicts with declaration", "recovery": "Preserve both sources, lower automation confidence and route to review rather than silently choosing one." }, { "title": "Catastrophe data is revised", "recovery": "Publish a new dataset/version and derived claim revision without rewriting the evidence used in the original decision." } ], "rollout": [ "Start with guided completeness checks only", "Add entitled fixture-first vision triage with model provenance and mandatory review bands", "Add spatial hazard enrichment with analyst-visible lineage", "Pilot assessor eligibility/ETA recommendations", "Introduce versioned triage rules with independent reviewer separation", "Scale after consent, fraud, model-risk, fairness, retention, catastrophe, and appeal audits" ] } ``` ## industry-solution · Coordinate time-critical care without losing custody - Identity: `industry-solution:hospital-care-logistics` - Canonical: https://developer.mappls.com/use-cases/hospital-care-logistics ```json { "slug": "hospital-care-logistics", "industry": "Healthcare", "title": "Coordinate time-critical care without losing custody", "summary": "Resolve facilities and entrances, dispatch suitable transport, track hand-offs, and preserve privacy-minimized care logistics evidence.", "outcome": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody.", "products": [ "search-places", "routes-navigation", "intouch-telematics", "capture-feedback", "gis-analytics" ], "workflow": [ "Resolve the correct facility, campus, and entrance", "Select an eligible vehicle and bounded route", "Track custody and freshness through every hand-off", "Escalate delay or temperature exceptions", "Reconcile arrival, acceptance, and retained evidence" ], "metrics": [ "Door-to-door transfer time", "On-time specimen delivery", "Custody exceptions", "Privacy incidents" ], "personas": [ "Transfer coordinator", "Ambulance dispatcher", "Driver or courier", "Receiving clinician", "Privacy and quality reviewer" ], "scenario": "A district hospital needs to transfer a patient to a tertiary campus while a laboratory specimen travels separately under a strict stability window. The coordinator must resolve the correct clinical entrance, choose eligible transport, retain custody at every hand-off, detect route and temperature delay, reveal only the minimum operational location, and close each journey only after the receiving team accepts it.", "architecture": [ { "title": "Clinical and laboratory systems", "description": "Authoritative systems own patient or specimen identity, clinical priority, consent, custody policy, stability window and receiving acceptance; the location workflow stores only opaque operational references." }, { "title": "Facility and entrance resolution", "description": "Search and governed campus data resolve a stable Mappls Pin or enterprise entrance identity while preserving candidate, confirmer and revision evidence." }, { "title": "Eligibility and dispatch", "description": "Application policy filters vehicle, equipment, staff, service area and availability before network ETA ranks eligible options." }, { "title": "Privacy-minimized journey", "description": "Event-time vehicle and custody observations derive progress and exceptions; role projections withhold clinical content and unnecessary precise history." }, { "title": "Acceptance and quality review", "description": "Every hand-off is versioned and attributable; arrival is not completion until the authorized receiver accepts the matching custody identity." } ], "dataContracts": [ "Transfer ↔ opaque clinical reference, priority, consent and accepted entrance", "Transport assignment ↔ eligibility snapshot, vehicle, route revision and expiry", "Custody event ↔ item reference, from/to role, event/receipt time and acknowledgement", "Condition exception ↔ sensor/source identity, threshold policy and reviewer outcome", "Completion ↔ arrival evidence, receiver acceptance and retained audit policy" ], "risks": [ { "title": "Search selects the public entrance instead of emergency receiving", "recovery": "Present approved campus entrances as explicit candidates, require coordinator confirmation, and retain the original query and selection revision." }, { "title": "Location or condition evidence becomes stale", "recovery": "Show last verified time and source, alert the responsible coordinator, and stop projecting an invented ETA or safe-condition claim." }, { "title": "The receiver cannot match the custody identity", "recovery": "Keep the journey at arrived-but-unaccepted, preserve both observations and escalate through a human reconciliation queue without exposing clinical data." } ], "rollout": [ "Govern facility and entrance identities without patient data", "Run fixture transfers with complete custody events", "Pilot one non-emergency specimen lane with bounded telemetry", "Add patient transfer only after clinical and privacy approval", "Scale after accessibility, consent, retention, downtime, safety and quality drills" ] } ``` ## industry-solution · Route coordinated response under pressure - Identity: `industry-solution:emergency-response` - Canonical: https://developer.mappls.com/use-cases/emergency-response ```json { "slug": "emergency-response", "industry": "Public safety", "title": "Route coordinated response under pressure", "summary": "Resolve caller location, find capable resources, route around incidents, and maintain a common picture.", "outcome": "Reduced time to scene and safer decisions across dispatch, responders, and command.", "products": [ "search-places", "routes-navigation", "intouch-telematics", "gis-analytics" ], "workflow": [ "Resolve location from address, pin, or device", "Find eligible nearby responders", "Route with vehicle constraints", "Track units and changing hazards", "Replay the incident for review" ], "metrics": [ "Call-to-dispatch time", "Arrival time", "Unit utilization", "Coverage gaps" ], "personas": [ "Caller", "Emergency call taker", "Dispatcher", "Responder", "Incident commander" ], "scenario": "A caller reports a road collision near an informal landmark while multiple units are returning from other incidents. The control room must resolve location confidence, choose capable available responders using fresh positions and vehicle-aware ETA, update routes around hazards, prevent double dispatch, prove arrival, and replay the incident for review.", "architecture": [ { "title": "CAD incident record", "description": "Owns call, incident identity, priority, location revisions, assigned resources, hazards, resolution and review." }, { "title": "Location resolution", "description": "Combines address, landmark, Mappls Pin and consented device evidence while retaining candidates, confidence and human confirmation." }, { "title": "Resource and route service", "description": "Filters capability/availability/jurisdiction first, then uses matrix/route evidence with freshness and deterministic dispatch policy." }, { "title": "Live coordination", "description": "Ingests event-time unit telemetry and hazard revisions, derives progress and arrival evidence, and blocks one unit from two active incidents." }, { "title": "Command and review", "description": "Role-specific views, immutable actions, communication references, late evidence and outcome metrics support command and after-action review." } ], "dataContracts": [ "Incident location ↔ revision, source, confidence, confirmer", "Unit eligibility ↔ capability, availability, jurisdiction, telemetry freshness", "Dispatch ↔ matrix evidence, route revision, expected aggregate versions", "Arrival/resolution ↔ objective evidence, actor, times, open-hazard/exception checks" ], "risks": [ { "title": "Caller description produces multiple locations", "recovery": "Show ranked candidates and confidence to the call taker; record confirmation and every revision." }, { "title": "Unit position is stale", "recovery": "Exclude from automated ranking or mark ETA unavailable; request fresh evidence and let an accountable dispatcher decide." }, { "title": "Hazard changes after dispatch", "recovery": "Append a hazard revision, compute a new route identity, notify assigned units and retain both plans." } ], "rollout": [ "Replay historical incidents through location-resolution tooling", "Shadow capability/matrix recommendations beside dispatchers", "Pilot one incident class with unit telemetry and double-dispatch protection", "Add hazard rerouting and objective arrival policy", "Expand only after safety case, resilience, accessibility, training, privacy and regulator review" ] } ``` ## industry-solution · A living operations map for the city - Identity: `industry-solution:smart-city-operations` - Canonical: https://developer.mappls.com/use-cases/smart-city-operations ```json { "slug": "smart-city-operations", "industry": "Government", "title": "A living operations map for the city", "summary": "Unify assets, incidents, crews, citizen feedback, and long-term spatial analysis.", "outcome": "One governed view from daily operations to infrastructure investment planning.", "products": [ "gis-analytics", "workmate", "intouch-telematics", "maps" ], "workflow": [ "Catalog authoritative layers", "Ingest live assets and citizen reports", "Dispatch and monitor work", "Publish role-specific dashboards", "Analyze hotspots and service equity" ], "metrics": [ "Resolution time", "Asset downtime", "Repeat incidents", "Ward-level service equity" ], "personas": [ "Citizen", "Control-room operator", "Department dispatcher", "Field crew", "City data steward" ], "scenario": "A city receives reports of waterlogging, failed streetlights and waste overflow across different channels. It needs one governed map without collapsing department ownership, must deduplicate related reports, dispatch the correct crew, preserve citizen privacy, publish honest status, and analyze service equity using versioned ward and asset data.", "architecture": [ { "title": "Department systems of record", "description": "Retain authoritative assets, work orders, ownership and service outcomes; the map does not become an ungoverned replacement master." }, { "title": "Spatial data catalogue", "description": "mGIS registers layers, schemas, CRS, stewards, update cadence, license/sensitivity and immutable versions." }, { "title": "Event correlation", "description": "Normalizes citizen reports and sensor alarms, preserves each source, and derives bounded incident clusters under a versioned rule." }, { "title": "Work orchestration", "description": "Creates department-specific tasks, routes capable crews, tracks progress/proof and reconciles closure to the owning system." }, { "title": "Role and public projections", "description": "Control room, department, executive and public views apply distinct access, aggregation, delay, accessibility and disclosure policy." } ], "dataContracts": [ "Layer ↔ steward, source, schema, CRS, sensitivity, version", "Report/alarm ↔ source identity, consent, event/receipt time, coarse/public projection", "Derived incident ↔ member evidence IDs and correlation policy version", "Work order ↔ owning department, asset, SLA, task/provider identity, closure proof" ], "risks": [ { "title": "Two departments claim the same incident", "recovery": "Keep one coordinating incident with explicit owning/participating work orders; never transfer authority by map edit alone." }, { "title": "Citizen report contains precise personal data", "recovery": "Restrict raw evidence, derive a coarse operational/public location and apply purpose-specific retention/redaction." }, { "title": "Public status lags internal resolution", "recovery": "Version projections, display freshness, alert on reconciliation delay and correct with an attributable update." } ], "rollout": [ "Catalogue high-value layers and authoritative owners", "Unify read-only incident views for one ward", "Add one department's task lifecycle and reconciliation", "Introduce cross-channel correlation with human confirmation", "Publish privacy/accessibility-reviewed public status and equity metrics before citywide expansion" ] } ``` ## industry-solution · Navigation built for intermittent connectivity - Identity: `industry-solution:connected-vehicle` - Canonical: https://developer.mappls.com/use-cases/connected-vehicle ```json { "slug": "connected-vehicle", "industry": "Automotive", "title": "Navigation built for intermittent connectivity", "summary": "Ship an activated, updateable in-vehicle navigation lifecycle with online enhancement.", "outcome": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety.", "products": [ "offline-automotive", "routes-navigation", "search-places", "intouch-telematics" ], "workflow": [ "Activate the head unit", "Install compatible signed regional data", "Plan and guide offline", "Blend online traffic and search when available", "Stage atomic map and runtime updates" ], "metrics": [ "Route success offline", "Guidance crash-free rate", "Update adoption", "Search success" ], "personas": [ "Driver", "Vehicle head unit", "OEM cloud", "Map-data operator", "Dealer/support engineer" ], "scenario": "A vehicle crosses a long connectivity gap after receiving a regional data update the night before. Navigation must boot with a compatible signed offline package, plan and guide locally, blend online traffic/search when available, protect driver attention, and recover automatically if the new package or runtime is unhealthy.", "architecture": [ { "title": "Vehicle/OEM identity", "description": "Owns hardware, market/region, entitlement, runtime compatibility, privacy/consent, activation and update campaign." }, { "title": "Dual-slot offline runtime", "description": "Maintains one active and one staged signed package, atomic activation pointer, health acknowledgement and rollback evidence." }, { "title": "Local navigation", "description": "Search index, routing graph, guidance and map rendering operate without network under pinned runtime/data/profile versions." }, { "title": "Online enhancement", "description": "Trusted cloud boundary adds fresh search, traffic and telemetry only when entitled and available; responses carry freshness/provenance." }, { "title": "Fleet operations", "description": "Campaign, download, verification, activation, health, rollback and support diagnostics are stateful journeys with aggregate metrics." } ], "dataContracts": [ "Vehicle manifest ↔ hardware/runtime/region/entitlement versions", "Data package ↔ epoch, region, size, content/signature hash, compatibility", "Route session ↔ offline/online sources, profile, data/traffic versions", "Update event ↔ campaign, stage, evidence, event/receipt time, health/rollback outcome" ], "risks": [ { "title": "Power loss during update", "recovery": "Write only the inactive slot and switch one atomic pointer after verification; boot always finds a previously acknowledged package." }, { "title": "Online traffic disappears mid-route", "recovery": "Keep guiding from the last valid local route, mark traffic freshness and avoid blocking safety-critical guidance." }, { "title": "New package boots but fails route smoke test", "recovery": "Fail health acknowledgement, restore the prior slot and upload privacy-safe diagnostics when connectivity returns." } ], "rollout": [ "Prove offline boot/search/route on target hardware", "Add signed dual-slot package staging and power-loss tests", "Pilot online search/traffic as optional enhancement", "Run canary update campaigns with automatic rollback", "Scale after driver-distraction, functional-safety, privacy, cybersecurity and dealer-support approval" ] } ``` ## industry-solution · Run a safe, punctual airport turnaround - Identity: `industry-solution:aviation-ground-operations` - Canonical: https://developer.mappls.com/use-cases/aviation-ground-operations ```json { "slug": "aviation-ground-operations", "industry": "Aviation", "title": "Run a safe, punctual airport turnaround", "summary": "Coordinate stands, service vehicles, restricted zones, inspections, and turnaround milestones on one governed operating picture.", "outcome": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams.", "products": [ "gis-analytics", "intouch-telematics", "workmate", "maps", "capture-feedback" ], "workflow": [ "Publish the approved airside network and restricted zones", "Create one versioned turnaround plan", "Track eligible vehicles and milestone hand-offs", "Capture inspection and exception evidence", "Reconcile departure readiness across authorities" ], "metrics": [ "On-time departure", "Turnaround milestone variance", "Airside safety exceptions", "Ground-equipment utilization" ], "personas": [ "Turnaround coordinator", "Airport operations controller", "Ground-service team", "Airline station manager", "Safety investigator" ], "scenario": "A delayed inbound aircraft changes stand while fuel, catering, baggage and inspection teams are already moving. The airport must publish the current approved airside network, re-plan one versioned turnaround, prevent vehicles entering restricted or closed areas, preserve each milestone hand-off, and avoid declaring departure-ready until airline, airport and safety authorities agree.", "architecture": [ { "title": "Airport operational authority", "description": "Airport and airline systems own stands, movement permissions, flight milestones, safety zones, people, equipment and departure decisions; Mappls-derived experiences do not grant aviation or airside authority." }, { "title": "Versioned spatial operating picture", "description": "Governed enterprise layers publish stands, service roads, closures, restricted zones and emergency access with source, steward, CRS, sensitivity and effective window." }, { "title": "Turnaround aggregate", "description": "One application-owned plan versions stand, tasks, dependencies, target milestones, responsible organizations and changes after disruption." }, { "title": "Ground-team execution", "description": "Workmate tasks and bounded vehicle observations track accepted assignments, corridor adherence, evidence, pauses and exceptions with offline-safe command identity." }, { "title": "Readiness reconciliation", "description": "Every required authority submits attributable milestone evidence; the coordinator derives readiness but never overwrites an authority's source record." } ], "dataContracts": [ "Airside layer ↔ authority, version, effective window, sensitivity and closure state", "Turnaround ↔ flight/stand references, milestone graph, version and accountable coordinator", "Task ↔ organization, eligibility, equipment, zone policy and evidence", "Vehicle event ↔ device/assignment identity, event/receipt time and approved-network version", "Readiness ↔ required authority decisions, unresolved exceptions and final revision" ], "risks": [ { "title": "Stand changes after teams accept tasks", "recovery": "Create a new turnaround revision, invalidate incompatible assignments and corridor evidence, and require explicit reacceptance rather than mutating in place." }, { "title": "A vehicle appears outside its approved corridor", "recovery": "Preserve accuracy and network version, alert operations, stop affected automation and require safety review; never infer culpability from a point alone." }, { "title": "One supplier reports complete while another dependency is open", "recovery": "Keep the supplier milestone complete but departure readiness blocked, showing the exact dependency and responsible authority." } ], "rollout": [ "Catalogue airside layers and source authorities", "Simulate one turnaround and disruption with synthetic identities", "Pilot read-only milestone coordination at one stand", "Add approved vehicle/task evidence under safety oversight", "Scale only after airport, airline, regulator, cybersecurity, privacy and degraded-mode approval" ] } ``` ## industry-solution · Turn inspiration into an itinerary - Identity: `industry-solution:travel-discovery` - Canonical: https://developer.mappls.com/use-cases/travel-discovery ```json { "slug": "travel-discovery", "industry": "Travel", "title": "Turn inspiration into an itinerary", "summary": "Help travelers discover, sequence, visualize, and open rich place experiences.", "outcome": "More confident trip planning and higher conversion from discovery to booking.", "products": [ "search-places", "maps", "app-widgets-deep-links", "routes-navigation" ], "workflow": [ "Discover places by theme and proximity", "Build a time-aware itinerary", "Visualize routes and neighborhoods", "Embed 3D or RealView context", "Hand off to navigation" ], "metrics": [ "Save-to-book rate", "Itinerary completion", "Search refinement", "Navigation hand-offs" ], "personas": [ "Traveler", "Travel-content editor", "Booking partner", "Product merchandiser", "Customer support" ], "scenario": "A family planning a three-day city break saves attractions from editorial stories, nearby search and partner inventory. The product must preserve place identity across languages and sources, sequence a feasible itinerary, show neighbourhood and RealView context, avoid stale opening assumptions, and hand off to booking/navigation without losing the selected place.", "architecture": [ { "title": "Travel content and inventory", "description": "Own editorial collections, commercial availability, pricing, disclosures and booking outcome while mapping every item to a stable place identity." }, { "title": "Place discovery", "description": "Search/nearby and curated sources resolve to Mappls Pins with provenance, language/display labels and duplicate reconciliation." }, { "title": "Itinerary aggregate", "description": "Owns ordered saved place IDs, day/time constraints, route revisions, visits/skips, sharing and deliberate cancellation." }, { "title": "Map and rich context", "description": "Renders routes, neighbourhoods, 3D/RealView or deep-linked experiences with accessible alternatives and explicit freshness." }, { "title": "Partner hand-off", "description": "Booking and navigation links bind place/offer identity, allow-list campaign data and distinguish click from confirmed downstream outcome." } ], "dataContracts": [ "Travel item ↔ Mappls Pin, editorial/partner IDs, language and provenance", "Itinerary ↔ ordered stable IDs, constraints, version and route revision", "Place fact ↔ source and observation/freshness timestamp", "Hand-off ↔ destination/offer identity, safe campaign fields, fallback and observed stage" ], "risks": [ { "title": "Two sources describe the same attraction", "recovery": "Reconcile through stable place identity and retain source-specific content/availability rather than merging by name." }, { "title": "Opening or availability data is stale", "recovery": "Show source/time, confirm with the authoritative partner and avoid routing a day as guaranteed feasible." }, { "title": "Navigation app is absent", "recovery": "Use an HTTPS fallback that preserves the destination and offers browser navigation or store choice without redirect loops." } ], "rollout": [ "Introduce stable Mappls Pin saves across existing discovery", "Build a restart-safe ordered itinerary with fixture routing", "Add route revisions and stale-plan invalidation", "Pilot rich context and safe partner/deep-link hand-offs", "Scale after content licensing, accessibility, partner attribution, privacy and conversion-incrementality review" ] } ``` ## industry-solution · Coordinate field operations across every plot - Identity: `industry-solution:agriculture-field-ops` - Canonical: https://developer.mappls.com/use-cases/agriculture-field-ops ```json { "slug": "agriculture-field-ops", "industry": "Agriculture", "title": "Coordinate field operations across every plot", "summary": "Map parcels, schedule crews, track equipment, and compare observations over time.", "outcome": "Less travel and better traceability for inspection, inputs, harvest, and compliance.", "products": [ "gis-analytics", "workmate", "intouch-telematics", "capture-feedback" ], "workflow": [ "Publish parcel boundaries", "Create seasonal field tasks", "Optimize crews and equipment", "Capture geotagged observations", "Analyze yield and issue patterns" ], "metrics": [ "Area serviced per day", "Input variance", "Equipment utilization", "Issue recurrence" ], "personas": [ "Farm manager", "Agronomist", "Field worker", "Equipment operator", "Compliance auditor" ], "scenario": "A cooperative must inspect hundreds of plots before monsoon planting, route teams across poor connectivity, track shared equipment, capture geotagged observations under farmer consent, prevent reports from being assigned to the wrong parcel, and compare issue recurrence without exposing precise farm data broadly.", "architecture": [ { "title": "Farm/parcel registry", "description": "Owns farmer relationship, parcel identity, consent, crop/season and authorized users; geometry versions are governed spatial assets." }, { "title": "Seasonal planning", "description": "Creates plot-specific work and inspection requirements, skills, windows, inputs and equipment eligibility." }, { "title": "Offline field execution", "description": "Mobile tasks, map packages, ordered commands and evidence manifests survive connectivity gaps with stable idempotency and versions." }, { "title": "Equipment telemetry", "description": "InTouch device observations derive utilization and exceptions by event time without replacing operator or maintenance records." }, { "title": "Spatial agronomy analysis", "description": "Joins exact parcel/evidence/weather/input versions, applies access controls and produces coarse shared insights with lineage." } ], "dataContracts": [ "Parcel ↔ stable ID, geometry version, CRS, farmer consent and season", "Task ↔ parcel/version, policy, assignee/equipment, offline command IDs", "Observation ↔ evidence hash, accuracy, event/receipt time, source and reviewer", "Analysis ↔ input versions, parameters, agronomist decision and audience policy" ], "risks": [ { "title": "Observation falls near a parcel boundary", "recovery": "Retain accuracy and candidate parcels, require field-worker confirmation or review, and never snap silently." }, { "title": "Offline task was reassigned", "recovery": "Reject stale actor/version commands on sync, retain evidence and route it to an accountable reconciliation queue." }, { "title": "Equipment telemetry is shared across farms", "recovery": "Scope events to authorized device/time/operation assignments and prevent cross-farm projections at the data boundary." } ], "rollout": [ "Govern parcel identities, geometry versions and consent", "Pilot offline inspection for one crop and region", "Add equipment utilization with explicit assignment boundaries", "Build reproducible recurrence analysis for agronomists", "Expand after farmer privacy, language/accessibility, agronomic validation and offline-support readiness" ] } ``` ## industry-solution · Move material safely across a changing mine - Identity: `industry-solution:mining-haulage-safety` - Canonical: https://developer.mappls.com/use-cases/mining-haulage-safety ```json { "slug": "mining-haulage-safety", "industry": "Mining", "title": "Move material safely across a changing mine", "summary": "Version haul roads and exclusion zones, dispatch compatible equipment, track cycles, and reconcile safety and production evidence.", "outcome": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses.", "products": [ "gis-analytics", "intouch-telematics", "workmate", "offline-automotive", "capture-feedback" ], "workflow": [ "Publish the approved pit, road, and exclusion-zone version", "Assign compatible equipment and operators", "Guide and observe offline-capable haul cycles", "Stop and review safety or geofence exceptions", "Reconcile tonnes, cycles, maintenance, and shift closure" ], "metrics": [ "Tonnes per operating hour", "Cycle-time variance", "Geofence exceptions", "Unplanned equipment idle time" ], "personas": [ "Mine dispatcher", "Pit supervisor", "Haul-truck operator", "Geotechnical engineer", "Safety and production reviewer" ], "scenario": "A blast changes the active pit and closes a ramp midway through a shift. Dispatch must publish the newly approved road and exclusion-zone version, reassign compatible trucks and loaders, guide offline-capable cycles, distinguish telemetry delay from a stopped vehicle, preserve safety interventions, and reconcile production only from accepted load and dump evidence.", "architecture": [ { "title": "Mine plan and safety authority", "description": "The mine system of record owns surveyed geometry, blast areas, geotechnical restrictions, road classes, equipment compatibility and operating authorization." }, { "title": "Versioned offline map release", "description": "Approved pit, road, zone and configuration manifests move through signed dual-slot qualification and rollback before vehicles activate them." }, { "title": "Dispatch aggregate", "description": "Application state owns shift, equipment/operator assignments, load/dump targets, priorities, expected versions and deliberate cancellation." }, { "title": "Haul-cycle evidence", "description": "InTouch observations and offline commands derive travel, queue, load and dump stages by event time while keeping raw source identity and freshness." }, { "title": "Safety and production reconciliation", "description": "Geofence or route exceptions stop automatic progress and require human review; tonnes and cycles close only against authoritative scale and dispatch evidence." } ], "dataContracts": [ "Mine map package ↔ survey/version, region, signature, compatibility and approval", "Assignment ↔ equipment/operator capability, shift, plan version and expected aggregate version", "Cycle event ↔ source/content identity, event/receipt time, map version and stage", "Safety exception ↔ zone/rule version, accuracy, intervention and reviewer decision", "Production result ↔ accepted load/dump identities, tonnes, shift and reconciliation status" ], "risks": [ { "title": "A truck wakes with the previous pit map", "recovery": "Block the changed operating zone, retain the compatible prior slot for recovery, and require a qualified signed update before dispatch." }, { "title": "Telemetry silence looks like an idle vehicle", "recovery": "Separate freshness from motion state, show last verified evidence, and ask dispatch to reconcile rather than charging productive-time loss automatically." }, { "title": "Duplicate dump evidence inflates tonnes", "recovery": "Deduplicate by source/content and cycle identity, reject conflicting replays, and reconcile against the authoritative scale record." } ], "rollout": [ "Version one pit and equipment compatibility matrix", "Prove offline package update and rollback on representative hardware", "Run haul cycles in shadow mode with event-time reconciliation", "Pilot safety exception review and authoritative scale matching", "Expand after geotechnical, functional-safety, workforce, cyber, environmental and emergency-response approval" ] } ``` ## industry-solution · Operate the network from tower to doorstep - Identity: `industry-solution:telecom-network-care` - Canonical: https://developer.mappls.com/use-cases/telecom-network-care ```json { "slug": "telecom-network-care", "industry": "Telecommunications", "title": "Operate the network from tower to doorstep", "summary": "Link network assets, alarms, field teams, and customer impact spatially.", "outcome": "Faster restoration with better prioritization and fewer repeat dispatches.", "products": [ "gis-analytics", "workmate", "routes-navigation", "capture-feedback" ], "workflow": [ "Model towers, links, cabinets, and service areas", "Correlate alarms with impacted customers", "Create skill-aware repair tasks", "Navigate and capture repair proof", "Analyze chronic failure clusters" ], "metrics": [ "Mean time to repair", "Customers restored per action", "Truck rolls", "Repeat alarm rate" ], "personas": [ "Network operations engineer", "Alarm correlator", "Field dispatcher", "Technician", "Customer-impact manager" ], "scenario": "A fibre cut triggers alarms across cabinets and cell sites while customers report outages. Operations must correlate evidence to the affected topology, estimate customer impact, create skill/tool/access-aware repair work, route teams around road disruption, capture splice/test proof, and avoid declaring restoration until network telemetry and customer-impact projections reconcile.", "architecture": [ { "title": "Network inventory/topology", "description": "Owns towers, fibre, links, cabinets, service areas, dependencies, maintenance windows and authoritative asset versions." }, { "title": "Alarm and impact correlation", "description": "Appends source alarms, maps them to exact inventory versions and derives incidents/affected customers under a versioned topology rule." }, { "title": "Repair orchestration", "description": "Creates Workmate tasks with skill, tools, access, safety and SLA requirements; eligible teams are ranked by fresh network ETA." }, { "title": "Field evidence", "description": "Offline-safe guidance, asset identity, images/readings/test results and reviewer decisions produce an immutable repair timeline." }, { "title": "Restoration reconciliation", "description": "Requires network alarm clearance, task proof and impact recovery before closure; chronic clusters derive from versioned evidence." } ], "dataContracts": [ "Network asset ↔ topology/inventory version, geometry and owner", "Alarm ↔ source/event/content identity, event/receipt time, mapped asset", "Impact projection ↔ topology rule/version and affected service IDs/counts", "Repair ↔ task/provider identity, required capability, evidence and restoration checks" ], "risks": [ { "title": "Many alarms represent one fibre cut", "recovery": "Preserve every alarm, derive one incident using a versioned topology/correlation rule and allow operator correction." }, { "title": "Inventory geometry/topology is stale", "recovery": "Mark confidence, route to data-steward correction and never rewrite prior incident lineage after the new version." }, { "title": "Technician closes before alarms clear", "recovery": "Keep work proof submitted but incident in reconciliation; query authoritative telemetry and escalate mismatches." } ], "rollout": [ "Reconcile inventory layers and data ownership", "Replay historical outages through correlation in shadow mode", "Pilot skill/ETA dispatch and immutable field proof", "Require multi-source restoration reconciliation for one region", "Scale after NOC runbooks, topology quality, safety, workforce, customer-communication and failover drills" ] } ``` ## stateful-journey · Field-service task lifecycle - Identity: `stateful-journey:field-service-task` - Canonical: https://developer.mappls.com/journeys/field-service-task - State model: stateful ```json { "slug": "field-service-task", "title": "Field-service task lifecycle", "eyebrow": "Workmate · command-driven aggregate", "productSlug": "workmate", "stateModel": "stateful", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "aggregate": "task", "actors": [ "Dispatcher", "Field worker", "Supervisor", "Integration service" ], "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "contractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "states": [ { "id": "unassigned", "label": "Unassigned", "meaning": "The job exists with client, site, SLA, skills, window, and proof policy but no worker owns it.", "recovery": "Re-run assignment using the same external job identifier; never create a second job to recover a timeout." }, { "id": "assigned", "label": "Assigned", "meaning": "A specific eligible worker owns the next decision and dispatch has recorded why they were selected.", "recovery": "Expire or explicitly reassign after checking worker availability and the last committed task version." }, { "id": "accepted", "label": "Accepted", "meaning": "The worker has acknowledged responsibility and the customer-facing plan can become firm.", "recovery": "If the device is offline, accept locally with a client command ID and reconcile once connectivity returns." }, { "id": "en_route", "label": "En route", "meaning": "Travel has begun and ETA, route deviation, and SLA-risk observations may change continuously.", "recovery": "Resume from the last task version and latest trusted position; recalculate route rather than replaying old guidance." }, { "id": "in_progress", "label": "In progress", "meaning": "Arrival is established and work evidence can be gathered under the declared proof policy.", "recovery": "Keep an offline evidence queue with hashes and local IDs; upload without losing capture time or actor." }, { "id": "proof_pending", "label": "Proof pending", "meaning": "The worker submitted an immutable evidence set awaiting automated or supervisor validation.", "recovery": "A rejected set returns to in-progress through an explicit event; retain the rejected evidence for audit." }, { "id": "completed", "label": "Completed", "meaning": "Required proof is accepted and downstream billing, inventory, SLA, and customer workflows may run.", "recovery": "Treat completion as terminal; corrections are compensating records, not destructive edits to history.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "A named actor stopped the job with a reason before completion.", "recovery": "Create a replacement job only when business intent genuinely changes and link it to the cancelled task.", "terminal": true } ], "transitions": [ { "command": "create_task", "actor": "Integration service", "from": [], "to": "unassigned", "event": "task.created", "idempotency": "Use the upstream job ID as a stable creation key." }, { "command": "assign", "actor": "Dispatcher", "from": [ "unassigned", "assigned" ], "to": "assigned", "event": "task.assigned", "idempotency": "Deduplicate by dispatcher command ID and compare expected task version." }, { "command": "accept", "actor": "Field worker", "from": [ "assigned" ], "to": "accepted", "event": "task.accepted", "idempotency": "Generate the key on-device before network transmission and persist it through retry." }, { "command": "start_travel", "actor": "Field worker", "from": [ "accepted" ], "to": "en_route", "event": "task.en_route", "idempotency": "A repeated start must return the same state and must not create a second trip." }, { "command": "arrive", "actor": "Field worker", "from": [ "en_route" ], "to": "in_progress", "event": "task.started", "idempotency": "Bind arrival evidence and command ID to the same transition transaction." }, { "command": "submit_proof", "actor": "Field worker", "from": [ "in_progress" ], "to": "proof_pending", "event": "task.proof_submitted", "idempotency": "Hash the evidence manifest and reject a reused key with different content." }, { "command": "approve_proof", "actor": "Supervisor", "from": [ "proof_pending" ], "to": "completed", "event": "task.completed", "idempotency": "Commit approval and downstream outbox entries atomically." }, { "command": "reject_proof", "actor": "Supervisor", "from": [ "proof_pending" ], "to": "in_progress", "event": "task.proof_rejected", "idempotency": "Preserve decision reason and the rejected evidence version." } ], "invariants": [ "One upstream external job maps to one durable task aggregate.", "Only the assigned worker can accept, travel, arrive, or submit proof unless an attributable override is recorded.", "Every command carries tenant, actor, idempotency key, expected version, and occurrence time.", "Completion is impossible until the declared proof policy passes.", "Task history is append-only; corrections use new events or compensating work." ], "records": [ { "name": "Task snapshot", "purpose": "Fast current-state reads and optimistic concurrency.", "keyFields": [ "taskId", "externalId", "state", "version", "assigneeId", "mapplsPin" ] }, { "name": "Audit event", "purpose": "Attributable, replayable history for support and compliance.", "keyFields": [ "eventId", "aggregateVersion", "actor", "commandId", "occurredAt" ] }, { "name": "Evidence manifest", "purpose": "Immutable references and hashes for checklist, media, signature, and consent.", "keyFields": [ "manifestId", "taskVersion", "captureTime", "contentHash", "retentionClass" ] }, { "name": "Transactional outbox", "purpose": "Reliable downstream billing, inventory, notification, and analytics delivery.", "keyFields": [ "outboxId", "eventId", "status", "attempts", "nextAttemptAt" ] } ], "failures": [ { "trigger": "Create-task response times out", "detection": "No provider response but the upstream external ID and idempotency key are known.", "recovery": "Query by known identity or repeat the same command; do not mint a new job ID." }, { "trigger": "Two dispatchers edit the same task", "detection": "The submitted expected version is older than the current aggregate version.", "recovery": "Return conflict with current state; refresh context and require an intentional new command." }, { "trigger": "Worker is offline during proof capture", "detection": "Evidence exists locally but no server acknowledgement or event ID exists.", "recovery": "Retain command ID, hashes, capture timestamps, and retry queue until the committed event is returned." }, { "trigger": "Downstream system is unavailable after completion", "detection": "Task is complete but its outbox entry remains pending or retrying.", "recovery": "Retry outbox delivery independently; never reopen or re-complete the task to trigger side effects." } ], "observability": [ "Command acceptance, rejection code, actor, task version, and latency", "Time spent in each state and SLA-risk interval", "Duplicate command rate and version-conflict rate", "Offline queue age and proof upload completeness", "Outbox backlog, attempt count, and dead-letter age", "Precise-location access with purpose and retention class" ] } ``` ## stateful-journey · Connected fleet trip - Identity: `stateful-journey:connected-fleet-trip` - Canonical: https://developer.mappls.com/journeys/connected-fleet-trip - State model: stateful ```json { "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" ] } ``` ## stateful-journey · Fleet geofence exception - Identity: `stateful-journey:fleet-geofence-exception` - Canonical: https://developer.mappls.com/journeys/fleet-geofence-exception - State model: stateful ```json { "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" ] } ``` ## stateful-journey · Coordinated incident response - Identity: `stateful-journey:emergency-incident-response` - Canonical: https://developer.mappls.com/journeys/emergency-incident-response - State model: stateful ```json { "slug": "emergency-incident-response", "title": "Coordinated incident response", "eyebrow": "Search + Routes + InTouch · command and evidence lifecycle", "productSlug": "routes-navigation", "stateModel": "stateful", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "aggregate": "incident", "actors": [ "Call taker", "Dispatcher", "Responder", "Incident commander", "Telematics service" ], "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "states": [ { "id": "reported", "label": "Reported", "meaning": "A stable CAD or operations identifier, incident type, severity, caller reference, required capability, and location intent are recorded.", "recovery": "Reconcile creation by external incident ID; never mint a second incident because a response timed out." }, { "id": "located", "label": "Located", "meaning": "A provider-backed Mappls identity, coordinate, formatted address, confidence, and resolution method are committed.", "recovery": "Require operator confirmation for weak or ambiguous candidates while retaining the original report." }, { "id": "dispatched", "label": "Dispatched", "meaning": "A capable available unit is selected with matrix ETA, route identity, constraints, and attributable rationale.", "recovery": "Reconcile unit availability and the incident version before any reassignment." }, { "id": "en_route", "label": "En route", "meaning": "The assigned unit accepted and current event-time telemetry drives route progress and ETA.", "recovery": "Retain late observations as evidence without allowing them to replace current progress." }, { "id": "on_scene", "label": "On scene", "meaning": "Distance, speed, and dwell policy establish arrival; scene hazards and coordination remain active.", "recovery": "If evidence is weak, keep the unit en route and request a deliberate operator override rather than inferring arrival." }, { "id": "resolved", "label": "Resolved", "meaning": "Outcome, responsible responder, and external evidence references are committed.", "recovery": "Corrections append evidence or create a linked follow-up incident; they do not erase the resolution event." }, { "id": "reviewed", "label": "Reviewed", "meaning": "A commander signs off the replay, disposition, response timings, telemetry count, hazards, and evidence completeness.", "recovery": "Keep review immutable and issue a supplemental review when later evidence changes conclusions.", "terminal": true } ], "transitions": [ { "command": "report_incident", "actor": "Call taker", "from": [], "to": "reported", "event": "incident.reported", "idempotency": "Use the external CAD or operations identity across retries." }, { "command": "resolve_location", "actor": "Dispatcher", "from": [ "reported" ], "to": "located", "event": "incident.located", "idempotency": "Bind the accepted candidate, method, confidence, and operator decision to one command." }, { "command": "dispatch", "actor": "Dispatcher", "from": [ "located" ], "to": "dispatched", "event": "incident.dispatched", "idempotency": "Compare incident version and reserve the selected unit under the same command identity." }, { "command": "accept_dispatch", "actor": "Responder", "from": [ "dispatched" ], "to": "en_route", "event": "dispatch.accepted", "idempotency": "The assigned unit generates and persists a command ID before transmission." }, { "command": "record_position", "actor": "Telematics service", "from": [ "en_route" ], "to": "en_route", "event": "unit.position_recorded", "idempotency": "Use provider event identity and preserve event and receipt time." }, { "command": "confirm_arrival", "actor": "Responder", "from": [ "en_route" ], "to": "on_scene", "event": "incident.arrived", "idempotency": "Bind distance, speed, dwell, policy version, and incident version." }, { "command": "resolve", "actor": "Responder", "from": [ "on_scene" ], "to": "resolved", "event": "incident.resolved", "idempotency": "Commit outcome, responder, evidence manifest, and outbox atomically." }, { "command": "review", "actor": "Incident commander", "from": [ "resolved" ], "to": "reviewed", "event": "incident.reviewed", "idempotency": "Review identity and incident terminal version form the stable key." } ], "invariants": [ "One external report maps to one incident aggregate.", "Only available units with the required capability are eligible for ranking.", "A unit is assigned to at most one active incident in the same operational context.", "Only the assigned unit can accept dispatch and publish operational telemetry.", "Raw telemetry preserves event and receipt time; late evidence never regresses latest state.", "Arrival requires explicit distance, speed, and dwell evidence.", "Resolution cannot occur without external evidence references." ], "records": [ { "name": "Incident aggregate", "purpose": "Business identity, lifecycle, location, assignment, hazards, outcome, and review.", "keyFields": [ "incidentId", "externalIncidentId", "state", "version", "severity", "requiredCapability" ] }, { "name": "Location decision", "purpose": "Provider-backed location and human confirmation evidence.", "keyFields": [ "mapplsPin", "coordinate", "formattedAddress", "method", "confidence" ] }, { "name": "Assignment decision", "purpose": "Capability, availability, matrix, route, constraints, and selection rationale.", "keyFields": [ "unitId", "routeId", "capabilities", "eta", "selectedBy", "reason" ] }, { "name": "Telemetry envelope", "purpose": "Immutable responder position and vehicle evidence.", "keyFields": [ "providerEventId", "unitId", "eventTime", "receivedTime", "position", "quality" ] }, { "name": "Review record", "purpose": "Attributable disposition and metrics derived from committed events.", "keyFields": [ "reviewer", "disposition", "timings", "positionCount", "hazardCount" ] } ], "failures": [ { "trigger": "Caller location is ambiguous", "detection": "Search candidates are low-confidence, far apart, or conflict with caller/device context.", "recovery": "Keep the report unresolved, ask a targeted confirmation question, and record the chosen candidate and reason." }, { "trigger": "Two dispatchers select the same unit", "detection": "Unit reservation or incident expected version conflicts.", "recovery": "Return the current assignments and require an intentional new selection from refreshed availability." }, { "trigger": "Telemetry is late or out of order", "detection": "Event time is behind the incident position watermark.", "recovery": "Store it, emit a late-evidence event, and do not replace latest route progress." }, { "trigger": "Route becomes unsafe after dispatch", "detection": "A new hazard, closure, or restriction intersects the current route or approach policy.", "recovery": "Record the hazard, calculate a versioned replacement route, and keep the last safe guidance until accepted." }, { "trigger": "Resolution side effects fail", "detection": "Incident is resolved while notification or downstream outbox entries remain pending.", "recovery": "Retry the outbox independently; never re-resolve the incident to trigger delivery." } ], "observability": [ "Report-to-location and call-to-dispatch time", "Eligible responder count and rejected capability reasons", "Matrix ranking, selected unit, override, and route latency", "Telemetry freshness, ordering lag, and route revision", "Hazard age and approach-policy changes", "Arrival evidence pass/fail and override rate", "Scene-to-resolution time and evidence completeness", "Outbox backlog and review completion" ] } ``` ## stateful-journey · Recoverable navigation session - Identity: `stateful-journey:navigation-session` - Canonical: https://developer.mappls.com/journeys/navigation-session - State model: hybrid ```json { "slug": "navigation-session", "title": "Recoverable navigation session", "eyebrow": "Navigation · device session lifecycle", "productSlug": "routes-navigation", "stateModel": "hybrid", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "aggregate": "navigation session", "actors": [ "Driver", "Navigation application", "Mappls navigation SDK", "Operations backend" ], "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "contractSlugs": [], "sampleSlug": "trip-planner", "states": [ { "id": "draft", "label": "Draft", "meaning": "Origin, destination, stops, vehicle profile, and constraints are incomplete or editable.", "recovery": "Persist intent separately from SDK runtime state." }, { "id": "preview", "label": "Preview", "meaning": "Alternatives and trade-offs are visible but guidance and sensor use have not started.", "recovery": "Refresh stale route and traffic inputs before starting." }, { "id": "navigating", "label": "Navigating", "meaning": "Guidance owns an active route and consumes position, progress, traffic, and user commands.", "recovery": "Checkpoint minimal resumable intent and progress; reinitialize SDK resources after process death." }, { "id": "rerouting", "label": "Rerouting", "meaning": "The active route is temporarily superseded by a recalculation caused by deviation, traffic, or destination change.", "recovery": "Continue safe guidance on the last valid route until the replacement is accepted." }, { "id": "arrived", "label": "Arrived", "meaning": "Arrival policy passed and the application is waiting for confirmation or final trip actions.", "recovery": "Require an explicit end or continue decision when multiple stops remain." }, { "id": "ended", "label": "Ended", "meaning": "Sensors, audio, observers, foreground services, and SDK session resources are released.", "recovery": "Cleanup is idempotent and safe after partial initialization.", "terminal": true } ], "transitions": [ { "command": "calculate_route", "actor": "Navigation application", "from": [ "draft", "preview" ], "to": "preview", "event": "route.calculated", "idempotency": "Hash normalized intent and constraints for request deduplication and caching." }, { "command": "start_guidance", "actor": "Driver", "from": [ "preview" ], "to": "navigating", "event": "navigation.started", "idempotency": "Persist a session command ID before starting foreground resources." }, { "command": "request_reroute", "actor": "Navigation application", "from": [ "navigating", "rerouting" ], "to": "rerouting", "event": "reroute.requested", "idempotency": "Coalesce equivalent deviations while one calculation is outstanding." }, { "command": "accept_reroute", "actor": "Mappls navigation SDK", "from": [ "rerouting" ], "to": "navigating", "event": "route.updated", "idempotency": "Apply only a response matching the latest route-intent version." }, { "command": "confirm_arrival", "actor": "Navigation application", "from": [ "navigating" ], "to": "arrived", "event": "navigation.arrived", "idempotency": "Arrival policy version and stop ID form the stable key." }, { "command": "end_session", "actor": "Driver", "from": [ "preview", "navigating", "rerouting", "arrived" ], "to": "ended", "event": "navigation.ended", "idempotency": "Cleanup must tolerate repeated calls and partial startup." } ], "invariants": [ "Only one guidance session owns foreground navigation resources at a time.", "Every route result is applied only to the intent version that requested it.", "The last valid route remains available while a reroute is pending.", "Arrival requires an explicit distance, speed, dwell, and stop policy.", "End releases every observer, sensor, audio, and service resource exactly once in effect." ], "records": [ { "name": "Route intent", "purpose": "Portable origin, stops, profile, constraints, and version.", "keyFields": [ "intentId", "version", "waypoints", "profile", "constraints" ] }, { "name": "Session checkpoint", "purpose": "Minimal recoverable progress without persisting unsafe SDK internals.", "keyFields": [ "sessionId", "intentVersion", "routeId", "legIndex", "lastPositionTime" ] }, { "name": "Navigation trace", "purpose": "Privacy-bounded operational and quality evidence.", "keyFields": [ "sessionId", "eventType", "occurredAt", "routeVersion", "quality" ] } ], "failures": [ { "trigger": "Application process is killed", "detection": "A persisted active checkpoint exists without a live runtime owner.", "recovery": "Recreate resources, validate destination intent, recalculate if stale, and ask before resuming guidance." }, { "trigger": "GNSS quality degrades", "detection": "Accuracy, age, speed consistency, or map-matching confidence crosses policy.", "recovery": "Surface degraded positioning, use supported dead-reckoning inputs, and avoid false reroutes." }, { "trigger": "Reroute response arrives after destination changed", "detection": "Response intent version is older than the active intent.", "recovery": "Discard it and keep the latest calculation; never apply by arrival order alone." }, { "trigger": "Network disappears", "detection": "Online route, traffic, or search dependency fails while local guidance remains active.", "recovery": "Keep last valid guidance, expose freshness, and use entitled offline capability when available." } ], "observability": [ "Route calculation latency and alternative selection", "Position age, accuracy, and map-matching confidence", "Reroute cause, time, cancellation, and supersession", "Guidance session starts without matching cleanup", "Arrival false-positive and manual-override rate", "Crash/restart recovery outcome" ] } ``` ## stateful-journey · Governed spatial analysis - Identity: `stateful-journey:governed-spatial-analysis` - Canonical: https://developer.mappls.com/journeys/governed-spatial-analysis - State model: hybrid ```json { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "eyebrow": "mGIS & Insight · asynchronous resource graph", "productSlug": "gis-analytics", "stateModel": "hybrid", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "aggregate": "analysis run", "actors": [ "Data engineer", "Spatial analyst", "Workspace administrator", "Decision consumer" ], "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "contractSlugs": [], "sampleSlug": "retail-site-lab", "states": [ { "id": "draft", "label": "Draft", "meaning": "Inputs, schema, coordinate system, ownership, and processing intent are declared but not accepted.", "recovery": "Keep uploads resumable and preserve the client dataset identity." }, { "id": "validating", "label": "Validating", "meaning": "Format, schema, geometry, coordinate reference, limits, and policy are being checked.", "recovery": "Return row- or feature-level diagnostics without discarding the original version." }, { "id": "published", "label": "Published", "meaning": "An immutable dataset version is queryable with explicit workspace access and lineage.", "recovery": "Create a corrected version rather than overwriting the published input." }, { "id": "processing", "label": "Processing", "meaning": "An analysis job references fixed input versions, parameters, runtime, and output ownership.", "recovery": "Retry from a durable job identity and checkpoint; never launch duplicate untracked computation." }, { "id": "ready", "label": "Ready", "meaning": "Outputs, quality metrics, logs, lineage, and visualization metadata are complete.", "recovery": "A failed visualization does not invalidate the output dataset; rebuild presentation independently." }, { "id": "shared", "label": "Shared", "meaning": "A governed audience can view or embed a selected output version under explicit policy.", "recovery": "Revoke the share without deleting the analysis or its audit history." }, { "id": "failed", "label": "Failed", "meaning": "Validation or processing stopped with typed, attributable diagnostics and retained inputs.", "recovery": "Fix intent or input and create a linked retry attempt.", "terminal": true } ], "transitions": [ { "command": "create_dataset_version", "actor": "Data engineer", "from": [], "to": "draft", "event": "dataset.version_created", "idempotency": "Key by workspace, logical dataset, source hash, and intended version." }, { "command": "validate", "actor": "Spatial analyst", "from": [ "draft" ], "to": "validating", "event": "dataset.validation_started", "idempotency": "Reuse the same validation attempt for identical content and policy." }, { "command": "publish", "actor": "Workspace administrator", "from": [ "validating" ], "to": "published", "event": "dataset.published", "idempotency": "Commit immutable version and permissions atomically." }, { "command": "run_analysis", "actor": "Spatial analyst", "from": [ "published", "ready" ], "to": "processing", "event": "analysis.started", "idempotency": "Hash input versions, parameters, runtime, and output owner." }, { "command": "complete_analysis", "actor": "Spatial processing service", "from": [ "processing" ], "to": "ready", "event": "analysis.completed", "idempotency": "One attempt identity can publish one immutable output manifest." }, { "command": "create_share", "actor": "Workspace administrator", "from": [ "ready" ], "to": "shared", "event": "share.created", "idempotency": "Key by output version, audience, policy, and expiry." } ], "invariants": [ "Published input and output versions are immutable.", "Every output records exact input versions, parameters, runtime, and actor.", "Workspace authorization applies separately to source, job, output, visualization, and share.", "A retry is linked to its previous attempt and never overwrites it.", "Revoking a share does not destroy dataset or analysis lineage." ], "records": [ { "name": "Dataset version", "purpose": "Immutable source or derived spatial asset.", "keyFields": [ "datasetId", "version", "contentHash", "crs", "schema", "owner" ] }, { "name": "Analysis attempt", "purpose": "Reproducible execution and typed status.", "keyFields": [ "analysisId", "attempt", "inputs", "parameters", "runtime", "status" ] }, { "name": "Lineage manifest", "purpose": "Auditable graph from source versions to outputs and shares.", "keyFields": [ "outputVersion", "inputVersions", "operation", "generatedAt", "quality" ] }, { "name": "Share policy", "purpose": "Audience, expiry, export, embedding, and revocation controls.", "keyFields": [ "shareId", "resourceVersion", "audience", "permissions", "expiresAt" ] } ], "failures": [ { "trigger": "Upload is interrupted", "detection": "The client upload ID has incomplete acknowledged parts.", "recovery": "Resume only missing parts and verify the final content hash before validation." }, { "trigger": "Coordinate reference is missing or wrong", "detection": "Extent, geometry validity, or known control points conflict with the declaration.", "recovery": "Fail validation with actionable diagnostics; require an explicit corrected version." }, { "trigger": "Analysis worker dies", "detection": "Lease expires without a terminal attempt record.", "recovery": "Resume from supported checkpoint or create a linked retry under the same analysis identity." }, { "trigger": "Share is used after policy changes", "detection": "Resource policy version or expiry no longer authorizes the audience.", "recovery": "Deny access immediately, record the decision, and require a newly authorized share." } ], "observability": [ "Upload completeness, validation failures, and feature-level error rate", "Queue, execution, and total analysis time", "Input/output size and spatial operation cost", "Retry, cancellation, and orphaned-job rate", "Lineage completeness and reproducibility checks", "Share access, export, denial, expiry, and revocation" ] } ``` ## stateful-journey · Durable multi-stop itinerary - Identity: `stateful-journey:durable-weekend-itinerary` - Canonical: https://developer.mappls.com/journeys/durable-weekend-itinerary - State model: hybrid ```json { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "eyebrow": "Search + Routes · intent and route revisions", "productSlug": "routes-navigation", "stateModel": "hybrid", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "aggregate": "trip itinerary", "actors": [ "Traveller", "Collaborator", "Mappls discovery service", "Mappls routing service" ], "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "states": [ { "id": "draft", "label": "Draft", "meaning": "An ordered, bounded set of provider-backed places represents current trip intent without claiming a valid route.", "recovery": "Resolve edits by aggregate version and retain stable Mappls Pins; never merge by display label." }, { "id": "planned", "label": "Planned", "meaning": "A route revision is bound to the exact ordered stop identities, travel profile, provider response, and planning time.", "recovery": "Any stop, order, profile, or constraint change invalidates the revision and returns the itinerary to draft." }, { "id": "active", "label": "Active", "meaning": "The traveller started the current route revision and each next stop receives an explicit visited or skipped outcome.", "recovery": "Resume from durable progress; recalculate from current trusted context instead of replaying stale guidance." }, { "id": "paused", "label": "Paused", "meaning": "An attributable interruption stops progress without discarding saved stops, outcomes, or route identity.", "recovery": "Refresh time-sensitive context and require deliberate resume or cancellation." }, { "id": "completed", "label": "Completed", "meaning": "Every stop is visited or explicitly skipped and the terminal itinerary, route revision, outcomes, and event history are retained.", "recovery": "Later edits create a new trip or linked revision rather than rewriting completed history.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "A named actor ended the itinerary with a reason while retaining all committed place, route, and progress evidence.", "recovery": "Create a linked replacement trip when intent returns rather than reactivating terminal history.", "terminal": true } ], "transitions": [ { "command": "create_trip", "actor": "Traveller", "from": [], "to": "draft", "event": "trip.created", "idempotency": "Use a client trip command ID before the first network attempt." }, { "command": "add_or_reorder_stop", "actor": "Traveller", "from": [ "draft", "planned" ], "to": "draft", "event": "trip.sequence_changed", "idempotency": "Compare trip version and bind every saved item to a unique Mappls Pin." }, { "command": "preview_route", "actor": "Mappls routing service", "from": [ "draft" ], "to": "planned", "event": "trip.route_previewed", "idempotency": "Hash ordered pins, profile, constraints, departure intent, and aggregate version." }, { "command": "start_trip", "actor": "Traveller", "from": [ "planned" ], "to": "active", "event": "trip.started", "idempotency": "Bind start to the current trip and route revision." }, { "command": "pause_trip", "actor": "Traveller", "from": [ "active" ], "to": "paused", "event": "trip.paused", "idempotency": "Record the interruption reason once under a stable client command identity." }, { "command": "resume_trip", "actor": "Traveller", "from": [ "paused" ], "to": "active", "event": "trip.resumed", "idempotency": "Bind resume to the paused aggregate and current route revision." }, { "command": "visit_or_skip_next", "actor": "Traveller", "from": [ "active" ], "to": "active", "event": "trip.stop_completed", "idempotency": "Generate one command identity per stop outcome; require a reason for skip." }, { "command": "complete_trip", "actor": "Traveller", "from": [ "active" ], "to": "completed", "event": "trip.completed", "idempotency": "Terminal version and command ID identify one completion." }, { "command": "cancel_trip", "actor": "Traveller", "from": [ "draft", "planned", "active", "paused" ], "to": "cancelled", "event": "trip.cancelled", "idempotency": "One command records actor, reason, previous state, and terminal version." } ], "invariants": [ "Every saved stop originated from provider-backed discovery and retains its Mappls Pin and provenance.", "A Mappls Pin occurs at most once in an itinerary.", "A route revision is valid only for the exact ordered stop list and constraints that produced it.", "Only the next pending stop may receive a visit or skip outcome.", "Completion is impossible while any stop remains pending.", "Commands are idempotent and compare the expected trip version." ], "records": [ { "name": "Trip aggregate", "purpose": "Business identity, date, party, lifecycle, current route revision, and optimistic version.", "keyFields": [ "tripId", "state", "version", "date", "partySize", "routeRevision" ] }, { "name": "Itinerary stop", "purpose": "Ordered provider-backed place and progress outcome.", "keyFields": [ "mapplsPin", "position", "providerProvenance", "status", "completedAt", "skipReason" ] }, { "name": "Route revision", "purpose": "Immutable preview for one exact intent version.", "keyFields": [ "routeId", "revision", "orderedPins", "profile", "legs", "distance", "duration", "plannedAt" ] }, { "name": "Audit and outbox", "purpose": "Attributable changes and reliable downstream collaboration or notification.", "keyFields": [ "eventId", "aggregateVersion", "actor", "commandId", "outboxStatus" ] } ], "failures": [ { "trigger": "A collaborator edits after route preview", "detection": "Current stop identities or aggregate version differ from the route's intent version.", "recovery": "Invalidate the route, show the edit, and require a new preview before start." }, { "trigger": "Routing succeeds but response is lost", "detection": "The same ordered intent and request identity has no committed route revision.", "recovery": "Reconcile or repeat the same idempotent request; never attach a response to newer intent." }, { "trigger": "A venue becomes unavailable during the trip", "detection": "Traveller or fresh provider/business data marks the next stop unavailable.", "recovery": "Record an explicit skip with reason, then offer a newly versioned replan from current context." }, { "trigger": "Application restarts mid-trip", "detection": "A durable active aggregate exists without current client state.", "recovery": "Restore visit/skip progress and current revision, refresh stale operational data, and ask before resuming guidance." } ], "observability": [ "Discovery-to-save rate and Mappls Pin continuity", "Stop edits, duplicates, limits, and version conflicts", "Route preview latency, failures, profiles, and revisions", "Time from preview to start and stale-preview invalidation", "Visited and skipped stops with reason", "Active trips without recent progress", "Idempotent replay, outbox backlog, and restart recovery" ] } ``` ## stateful-journey · Consented address verification - Identity: `stateful-journey:consented-address-verification` - Canonical: https://developer.mappls.com/journeys/consented-address-verification - State model: stateful ```json { "slug": "consented-address-verification", "title": "Consented address verification", "eyebrow": "Search & Places · purpose-bound evidence decision", "productSlug": "search-places", "stateModel": "stateful", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "aggregate": "address verification", "actors": [ "Application user", "Evidence capture application", "Policy service", "Human reviewer", "Privacy service" ], "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "states": [ { "id": "entered", "label": "Entered", "meaning": "One external business reference, opaque subject reference, declared purpose, and raw address intent are recorded.", "recovery": "Reconcile by external reference and idempotency key instead of minting a duplicate verification." }, { "id": "normalized", "label": "Normalized", "meaning": "The declared address maps to a provider-backed Mappls Pin, coordinate, components, confidence, and provenance.", "recovery": "Keep ambiguous candidates visible and request subject or operator confirmation before capture." }, { "id": "capture_authorized", "label": "Capture authorized", "meaning": "A specific subject granted one purpose-bound, expiring, accuracy- and retention-governed evidence capture.", "recovery": "Reject expired or withdrawn grants and issue a new consent event when purpose or policy changes." }, { "id": "evidence_captured", "label": "Evidence captured", "meaning": "Immutable source identity, event and receipt time, coordinate, accuracy, provider context, and integrity hash are committed.", "recovery": "Deduplicate by source event and preserve conflicting or late observations as separate evidence rather than overwriting them." }, { "id": "compared", "label": "Compared", "meaning": "A versioned policy records distance, effective uncertainty, thresholds, and its verify, reject, or review recommendation.", "recovery": "Recompute only as a new policy decision version and retain the earlier recommendation." }, { "id": "review_required", "label": "Review required", "meaning": "Weak, conflicting, or policy-sensitive evidence is assigned to an attributable human decision.", "recovery": "Keep the case pending with an SLA; never auto-verify merely because a review queue is unavailable." }, { "id": "verified", "label": "Verified", "meaning": "A policy or human decision accepted the declared address for the exact recorded purpose.", "recovery": "A later change creates a linked verification; it does not rewrite the evidence and policy that supported this outcome.", "terminal": true }, { "id": "rejected", "label": "Rejected", "meaning": "Evidence did not establish the declared address, with reason, recommendation, actor, and appeal path retained.", "recovery": "Offer correction or a new independent attempt without exposing sensitive fraud or policy signals.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "Consent was withdrawn before evidence capture and no precise observation may be accepted.", "recovery": "A later attempt requires a fresh purpose-bound consent, not reactivation of the revoked grant.", "terminal": true } ], "transitions": [ { "command": "enter_verification", "actor": "Application user", "from": [], "to": "entered", "event": "address_verification.entered", "idempotency": "Use the external application or case reference as durable business identity." }, { "command": "normalize_address", "actor": "Policy service", "from": [ "entered" ], "to": "normalized", "event": "address_verification.normalized", "idempotency": "Bind normalized provider response to address-input hash and request identity." }, { "command": "authorize_capture", "actor": "Application user", "from": [ "normalized" ], "to": "capture_authorized", "event": "address_verification.capture_authorized", "idempotency": "Consent identity, text version, subject, purpose, expiry, and retention policy form one grant." }, { "command": "revoke_consent", "actor": "Application user", "from": [ "capture_authorized" ], "to": "cancelled", "event": "address_verification.consent_revoked", "idempotency": "Commit withdrawal once and reject all later evidence under that grant." }, { "command": "capture_evidence", "actor": "Evidence capture application", "from": [ "capture_authorized" ], "to": "evidence_captured", "event": "address_verification.evidence_captured", "idempotency": "Use a device-generated source-event identity created before transmission." }, { "command": "compare", "actor": "Policy service", "from": [ "evidence_captured" ], "to": "compared", "event": "address_verification.compared", "idempotency": "Evidence hash, normalized-place version, and policy version identify the exact comparison." }, { "command": "verify", "actor": "Policy service", "from": [ "compared" ], "to": "verified", "event": "address_verification.verified", "idempotency": "Bind the terminal decision to comparison and aggregate version." }, { "command": "reject", "actor": "Policy service", "from": [ "compared" ], "to": "rejected", "event": "address_verification.rejected", "idempotency": "Bind the terminal decision to comparison and aggregate version." }, { "command": "defer", "actor": "Policy service", "from": [ "compared" ], "to": "review_required", "event": "address_verification.review_required", "idempotency": "Create one review case per comparison version." }, { "command": "review_verify", "actor": "Human reviewer", "from": [ "review_required" ], "to": "verified", "event": "address_verification.verified", "idempotency": "Reviewer decision records reason, independent evidence, and any override under one identity." }, { "command": "review_reject", "actor": "Human reviewer", "from": [ "review_required" ], "to": "rejected", "event": "address_verification.rejected", "idempotency": "Reviewer decision records reason, independent evidence, and any override under one identity." } ], "invariants": [ "One external business reference maps to one verification aggregate.", "Precise evidence is accepted only under active consent for the exact declared purpose and time window.", "Provider normalization and application policy are identified separately.", "An automated actor cannot override its own policy recommendation.", "Every terminal outcome retains evidence hash, policy version, actor, and attributable reason.", "Precise evidence can be redacted without erasing the audit trail or claiming that retained hashes can reconstruct it." ], "records": [ { "name": "Verification aggregate", "purpose": "Business identity, purpose, lifecycle, selected evidence, comparison, decision, and version.", "keyFields": [ "verificationId", "externalReference", "subjectReference", "purpose", "state", "version" ] }, { "name": "Normalized address", "purpose": "Provider-backed place identity and address interpretation.", "keyFields": [ "mapplsPin", "coordinate", "formattedAddress", "components", "confidence", "provenance" ] }, { "name": "Consent grant", "purpose": "Attributable authority and privacy bounds for precise capture.", "keyFields": [ "consentId", "subject", "purpose", "textVersion", "grantedAt", "expiresAt", "retentionUntil", "status" ] }, { "name": "Evidence envelope", "purpose": "Immutable device observation with quality, timing, provenance, and integrity identity.", "keyFields": [ "evidenceId", "sourceEventId", "eventTime", "receivedAt", "coordinate", "accuracy", "contentHash" ] }, { "name": "Decision record", "purpose": "Explainable recommendation, human disposition, override, and appeal context.", "keyFields": [ "policyVersion", "thresholds", "recommendation", "outcome", "actor", "reason" ] } ], "failures": [ { "trigger": "Capture arrives after consent expiry or withdrawal", "detection": "Receipt or evidence event falls outside the committed grant window or grant status is revoked.", "recovery": "Reject it without retaining precise payload and require a fresh consent for another attempt." }, { "trigger": "Device evidence is replayed", "detection": "Source-event identity or content hash already belongs to an accepted evidence envelope.", "recovery": "Return the original result for an idempotent retry or reject conflicting reuse as a security event." }, { "trigger": "Address candidate is ambiguous or evidence accuracy is weak", "detection": "Provider confidence, device accuracy, separation, or policy combination enters the review band.", "recovery": "Request clarification or independent review; do not transform uncertainty into a definitive match." }, { "trigger": "Retention deadline passes", "detection": "Precise evidence remains present beyond purpose, tenant, or jurisdiction policy.", "recovery": "Redact coordinate and place payloads, retain the minimum decision and integrity record, and audit completion." } ], "observability": [ "Normalization confidence, ambiguity, latency, and provider failures", "Consent grant, expiry, withdrawal, and out-of-window capture attempts", "Evidence accuracy, age, source integrity, replay, and mock-location risk", "Distance and recommendation distribution by versioned policy", "Review queue age, outcome, override rate, and supporting-evidence class", "False-match, false-reject, correction, and appeal outcomes", "Precise-data access, export, retention expiry, redaction, and legal hold", "Idempotency conflicts, version conflicts, outbox backlog, and restart recovery" ] } ``` ## stateful-journey · Governed spatial agent run - Identity: `stateful-journey:governed-spatial-agent-run` - Canonical: https://developer.mappls.com/journeys/governed-spatial-agent-run - State model: stateful ```json { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "eyebrow": "Mappls MCP · approval-bound tool orchestration", "productSlug": "ai-location", "stateModel": "stateful", "summary": "Turn a natural-language spatial objective into an inspectable plan, obtain an exact least-privilege approval, execute allow-listed Mappls tools, and cite provider evidence without exposing credentials to the model.", "aggregate": "agent run", "actors": [ "Application user", "Agent planner", "Human approver", "Execution service", "Mappls MCP server" ], "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "states": [ { "id": "asked", "label": "Asked", "meaning": "A stable run records the user's objective, scenario, actor, tenant, purpose, and bounded inputs before any provider access.", "recovery": "Replay creation by client command identity and never create a second run merely because a response timed out." }, { "id": "planned", "label": "Planned", "meaning": "A schema-valid allow-listed dependency graph, risk class, scopes, argument bounds, and canonical plan hash are available for inspection.", "recovery": "Treat any change as a new plan version and invalidate prior approvals rather than editing an approved plan in place." }, { "id": "approved", "label": "Approved", "meaning": "An attributable person approved the exact plan hash, every required scope, purpose, data boundary, policy version, and expiry.", "recovery": "If scope, plan, policy, or context changes, expire the grant and request a fresh independent approval." }, { "id": "executing", "label": "Executing", "meaning": "A service-side lease owns execution and calls each Mappls tool only after dependencies and authorization are satisfied.", "recovery": "Reconcile ambiguous provider outcomes by stable request identity before retrying any step with side effects." }, { "id": "completed", "label": "Completed", "meaning": "The grounded answer, structured outputs, exact tool evidence, provenance, citations, cost, and terminal audit event are committed.", "recovery": "Corrections create a linked run or derived answer revision; they do not rewrite executed evidence.", "terminal": true }, { "id": "rejected", "label": "Rejected", "meaning": "A named approver denied the proposed plan with an attributable reason and no provider calls occurred.", "recovery": "Revise the objective or reduce risk and scopes in a new plan; never silently resubmit the same grant.", "terminal": true }, { "id": "failed", "label": "Failed", "meaning": "Execution stopped with a typed, secret-safe error and retained evidence for every completed step.", "recovery": "Classify retryability, reconcile completed calls, and create a linked retry attempt when policy permits.", "terminal": true } ], "transitions": [ { "command": "ask", "actor": "Application user", "from": [], "to": "asked", "event": "agent.question_received", "idempotency": "Use a client-generated run command ID across network retries." }, { "command": "create_plan", "actor": "Agent planner", "from": [ "asked" ], "to": "planned", "event": "agent.plan_created", "idempotency": "Canonical objective, policy, planner version, and normalized plan produce one immutable hash." }, { "command": "approve_plan", "actor": "Human approver", "from": [ "planned" ], "to": "approved", "event": "agent.plan_approved", "idempotency": "Bind approver decision to run version, exact plan hash, scopes, purpose, and expiry." }, { "command": "reject_plan", "actor": "Human approver", "from": [ "planned" ], "to": "rejected", "event": "agent.plan_rejected", "idempotency": "Persist the review decision and reason under one command identity." }, { "command": "start_execution", "actor": "Execution service", "from": [ "approved" ], "to": "executing", "event": "agent.execution_started", "idempotency": "Acquire one lease only after recalculating plan hash and rechecking approval, scopes, expiry, and policy." }, { "command": "complete_execution", "actor": "Execution service", "from": [ "executing" ], "to": "completed", "event": "agent.execution_completed", "idempotency": "Commit terminal result, citations, audit, and outbox against the execution attempt identity." } ], "invariants": [ "The model never receives Mappls or customer credentials.", "Only schema-valid allow-listed tools and bounded arguments can enter a plan.", "Approval names the canonical immutable plan hash and every required scope.", "An expired, superseded, partially scoped, or self-approved plan cannot execute.", "Every factual provider claim is traceable to retained Mappls provenance.", "Tool failures and persisted evidence never expose secrets." ], "records": [ { "name": "Agent run", "purpose": "Durable objective, lifecycle, version, risk, actor, tenant, and purpose boundary.", "keyFields": [ "runId", "state", "version", "tenantId", "question", "risk" ] }, { "name": "Plan manifest", "purpose": "Canonical tool graph, dependencies, arguments, requested scopes, and integrity identity.", "keyFields": [ "planVersion", "planHash", "plannerVersion", "steps", "requiredScopes", "policyVersion" ] }, { "name": "Approval grant", "purpose": "Independent attributable authority for one exact plan and bounded time window.", "keyFields": [ "planHash", "approvedBy", "approvedScopes", "purpose", "approvedAt", "expiresAt" ] }, { "name": "Tool evidence", "purpose": "Resolved arguments, structured response, provider provenance, status, timing, and stable request identity.", "keyFields": [ "toolCallId", "stepId", "tool", "requestId", "provenance", "completedAt" ] }, { "name": "Grounded result", "purpose": "Answer and machine-readable outputs with per-step citations and inference labels.", "keyFields": [ "runId", "answer", "citations", "generatedAt", "modelVersion" ] } ], "failures": [ { "trigger": "Prompt or retrieved content asks for an unapproved tool", "detection": "The proposed tool, scope, host, or argument is absent from the validated plan policy.", "recovery": "Reject the plan or stop execution and surface the exact policy denial for human review." }, { "trigger": "Plan changes after approval", "detection": "Recomputed canonical hash differs from the approved plan hash.", "recovery": "Refuse execution, append a tamper or supersession event, and require a new review." }, { "trigger": "Provider call succeeds but the worker loses its response", "detection": "Execution lease expires with an ambiguous step and stable request identity.", "recovery": "Reconcile by provider or application request identity before retrying, especially for side-effecting tools." }, { "trigger": "Tool output lacks provenance or contains a secret", "detection": "Response-envelope validation or redaction policy fails.", "recovery": "Quarantine the output, stop the run safely, rotate any exposed secret, and retain only a sanitized incident record." } ], "observability": [ "Runs and time spent in asked, planned, approved, and executing states", "Approval, rejection, expiry, and scope-reduction rate by risk class", "Plan hash mismatch, policy denial, and prompt-injection detection", "Tool latency, quota, retry, reconciliation, and cost by operation", "Provider provenance and citation coverage", "Sensitive-location access by tenant, actor, purpose, and retention class", "Execution leases, orphaned attempts, outbox backlog, and restart recovery" ] } ``` ## stateful-journey · Offline automotive release - Identity: `stateful-journey:offline-automotive-release` - Canonical: https://developer.mappls.com/journeys/offline-automotive-release - State model: stateful ```json { "slug": "offline-automotive-release", "title": "Offline automotive release", "eyebrow": "Embedded navigation · fleet control plane", "productSlug": "offline-automotive", "stateModel": "stateful", "summary": "Manufacture, activate, install, operate, update, recover, and retire a navigation runtime and map-data release as one compatible system.", "aggregate": "device release", "actors": [ "Manufacturing system", "Fleet release manager", "Vehicle runtime", "Support engineer" ], "sourceGuideSlugs": [], "contractSlugs": [], "sampleSlug": "offline-release-control", "states": [ { "id": "manufactured", "label": "Manufactured", "meaning": "Hardware identity, target architecture, software edition, and vehicle configuration are recorded.", "recovery": "Quarantine duplicate or unreadable hardware identity before activation." }, { "id": "activated", "label": "Activated", "meaning": "The device has a scoped entitlement and trusted activation identity.", "recovery": "Refresh or rotate activation without replacing the durable vehicle identity." }, { "id": "installed", "label": "Installed", "meaning": "A verified compatible runtime, configuration, voice set, and base map package are staged.", "recovery": "Reject incompatible manifests before touching the active slot." }, { "id": "operational", "label": "Operational", "meaning": "The active slot passed startup, route, search, positioning, audio, storage, and health checks.", "recovery": "Remain on or revert to the last-known-good slot when qualification fails." }, { "id": "updating", "label": "Updating", "meaning": "A cohort release is downloading, verifying, staging, switching, and qualifying under a durable plan.", "recovery": "Resume downloads by part and make the active-slot switch atomic across power loss." }, { "id": "recovering", "label": "Recovering", "meaning": "Watchdog or health policy selected rollback, repair, or safe degraded operation.", "recovery": "Record the failing manifest and recovery reason before switching to last known good." }, { "id": "retired", "label": "Retired", "meaning": "Activation is revoked and the device no longer receives protected packages or service.", "recovery": "Reactivation is a new controlled authorization event, not a local flag change.", "terminal": true } ], "transitions": [ { "command": "register_device", "actor": "Manufacturing system", "from": [], "to": "manufactured", "event": "device.registered", "idempotency": "Hardware identity and manufacturing batch form the stable key." }, { "command": "activate", "actor": "Fleet release manager", "from": [ "manufactured" ], "to": "activated", "event": "license.activated", "idempotency": "Activation request and entitlement version must be replay-safe." }, { "command": "stage_base_release", "actor": "Vehicle runtime", "from": [ "activated" ], "to": "installed", "event": "release.installed", "idempotency": "Manifest digest identifies the exact runtime-data-config unit." }, { "command": "qualify", "actor": "Vehicle runtime", "from": [ "installed", "recovering" ], "to": "operational", "event": "release.qualified", "idempotency": "Qualification result is bound to manifest and test-suite version." }, { "command": "start_update", "actor": "Fleet release manager", "from": [ "operational" ], "to": "updating", "event": "release.update_started", "idempotency": "Device, target manifest, and rollout campaign identify one plan." }, { "command": "rollback", "actor": "Vehicle runtime", "from": [ "updating", "operational" ], "to": "recovering", "event": "release.rollback_started", "idempotency": "Watchdog incident ID prevents repeated rollback side effects." }, { "command": "retire", "actor": "Fleet release manager", "from": [ "manufactured", "activated", "installed", "operational", "recovering" ], "to": "retired", "event": "device.retired", "idempotency": "Revoke activation and package access under one retirement identity." } ], "invariants": [ "Runtime, map data, configuration, and voice assets are qualified as one compatible manifest.", "Only a verified inactive slot may replace the active slot.", "Power loss at any update point leaves one bootable known-good slot.", "Activation identity and secrets are distinct from vehicle business identity.", "Retirement revokes protected access without erasing support and release history." ], "records": [ { "name": "Device identity", "purpose": "Manufacturing, vehicle, activation, and hardware trust mapping.", "keyFields": [ "deviceId", "hardwareId", "vehicleId", "edition", "activationState" ] }, { "name": "Release manifest", "purpose": "Signed compatibility unit for runtime, data, configuration, and assets.", "keyFields": [ "manifestId", "digest", "target", "components", "signature", "compatibility" ] }, { "name": "Update plan", "purpose": "Durable per-device progress through download, verify, stage, switch, and qualify.", "keyFields": [ "planId", "campaignId", "deviceId", "targetManifest", "phase", "checkpoint" ] }, { "name": "Health incident", "purpose": "Watchdog evidence, recovery action, and support context.", "keyFields": [ "incidentId", "activeManifest", "signal", "action", "outcome", "occurredAt" ] } ], "failures": [ { "trigger": "Power loss during update", "detection": "Boot control sees an incomplete plan and unchanged or unqualified target slot.", "recovery": "Boot the known-good slot and resume or discard staging from the durable checkpoint." }, { "trigger": "Runtime and map package are incompatible", "detection": "Manifest compatibility or startup qualification fails.", "recovery": "Reject before activation and report exact component constraints." }, { "trigger": "Activation cannot refresh while offline", "detection": "Entitlement is near expiry and network is unavailable.", "recovery": "Apply the licensed offline grace policy visibly; never extend entitlement by changing device time." }, { "trigger": "New release causes route or crash regression", "detection": "Cohort health breaches automated rollout thresholds.", "recovery": "Halt the campaign, roll affected devices back, and retain incident-linked diagnostic bundles." } ], "observability": [ "Fleet distribution by active and target manifest", "Download, verification, switch, and qualification duration", "Interrupted and resumed update phase", "Activation refresh health and offline grace usage", "Crash, watchdog, routing, positioning, and storage health by cohort", "Rollback cause, success, and last-known-good age" ] } ``` ## stateful-journey · Application-owned widget selection - Identity: `stateful-journey:widget-selection-session` - Canonical: https://developer.mappls.com/journeys/widget-selection-session - State model: hybrid ```json { "slug": "widget-selection-session", "title": "Application-owned widget selection", "eyebrow": "Widgets · host-owned candidate lifecycle", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "summary": "Launch a Mappls widget, recover through a useful fallback, validate a narrow candidate, commit it deliberately, invalidate stale selection, and submit one durable business record.", "aggregate": "widget selection session", "actors": [ "Application user", "Host application", "Platform adapter", "Mappls widget" ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "contractSlugs": [], "sampleSlug": "widget-journey-host", "states": [ { "id": "draft", "label": "Draft", "meaning": "Host-owned address or place intent exists without an active provider surface or committed Mappls identity.", "recovery": "Restore only the host draft; never serialize a widget view, controller, listener, Promise, or opaque provider result." }, { "id": "widget_open", "label": "Widget open", "meaning": "One launch generation owns the provider surface, lifecycle callbacks, focus, cancellation, and timeout.", "recovery": "Dispose the generation exactly once and either retry explicitly or activate the host-owned fallback." }, { "id": "fallback_active", "label": "Fallback active", "meaning": "The provider surface is unavailable and a bounded manual or search-assisted host path remains operable.", "recovery": "Preserve the same session identity and record why fallback was selected before returning a candidate." }, { "id": "candidate_received", "label": "Candidate received", "meaning": "An exact-origin or native-adapter result passed schema validation but is not yet a business selection.", "recovery": "Discard malformed, late, duplicated, or superseded candidates; retain only the narrow normalized value." }, { "id": "selected", "label": "Selected", "meaning": "The user deliberately committed a normalized Mappls Pin and label against the current host draft version.", "recovery": "Any material host edit clears selection and returns the aggregate to draft." }, { "id": "submitted", "label": "Submitted", "meaning": "Host text and committed selection form one immutable, attributable business record with an outbox event.", "recovery": "Treat submission as terminal; corrections create a new version or linked replacement rather than changing history.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "A named actor ended the journey without submission and with a recorded reason.", "recovery": "Start a new session for renewed intent; do not silently resurrect a cancelled provider generation.", "terminal": true } ], "transitions": [ { "command": "create_session", "actor": "Host application", "from": [], "to": "draft", "event": "host.session_created", "idempotency": "The external checkout/form identity maps to one aggregate across retries." }, { "command": "open_widget", "actor": "Application user", "from": [ "draft", "fallback_active" ], "to": "widget_open", "event": "widget.opened", "idempotency": "Persist one launch generation and ignore every callback belonging to an older generation." }, { "command": "activate_fallback", "actor": "Platform adapter", "from": [ "widget_open" ], "to": "fallback_active", "event": "widget.fallback_activated", "idempotency": "One failed generation produces at most one fallback transition and focus restoration." }, { "command": "receive_candidate", "actor": "Platform adapter", "from": [ "widget_open", "fallback_active" ], "to": "candidate_received", "event": "location.candidate_received", "idempotency": "Deduplicate the terminal adapter result and bind it to session and launch generation." }, { "command": "accept_selection", "actor": "Application user", "from": [ "candidate_received" ], "to": "selected", "event": "location.selected", "idempotency": "Compare aggregate version and hash the normalized candidate before committing." }, { "command": "edit_host_text", "actor": "Application user", "from": [ "draft", "widget_open", "fallback_active", "candidate_received", "selected" ], "to": "draft", "event": "host.text_edited", "idempotency": "The edit command version determines whether candidate and selection invalidation already occurred." }, { "command": "submit", "actor": "Application user", "from": [ "selected" ], "to": "submitted", "event": "host.submitted", "idempotency": "Commit the record, audit event, processed command, and outbox entry atomically." }, { "command": "cancel", "actor": "Application user", "from": [ "draft", "widget_open", "fallback_active", "candidate_received", "selected" ], "to": "cancelled", "event": "host.cancelled", "idempotency": "Repeated cancellation returns the terminal record without rerunning cleanup side effects." } ], "invariants": [ "A provider callback or browser message creates only a candidate, never a submitted business record.", "Every browser message matches the exact reviewed origin and a versioned allow-listed schema.", "Only a six-character alphanumeric Mappls Pin and bounded printable label enter durable selection state.", "A host-text edit invalidates every candidate and committed selection from the previous draft version.", "One launch generation produces at most one terminal adapter outcome; late callbacks are ignored.", "Credentials, provider controllers, native views, bridge objects, and opaque response payloads are never persisted." ], "records": [ { "name": "Selection session", "purpose": "Current host draft, lifecycle state, launch generation, candidate, selection, and optimistic version.", "keyFields": [ "sessionId", "externalId", "state", "version", "launchGeneration", "hostText" ] }, { "name": "Normalized selection", "purpose": "Application-owned portable place identity independent of provider UI lifetime.", "keyFields": [ "schemaVersion", "mapplsPin", "label", "source", "selectedAt", "selectedBy" ] }, { "name": "Audit event", "purpose": "Attributable state transition and recovery history.", "keyFields": [ "eventId", "aggregateVersion", "type", "actor", "idempotencyKey", "occurredAt" ] }, { "name": "Transactional outbox", "purpose": "Exactly-once-in-effect notification and downstream form processing.", "keyFields": [ "outboxId", "eventId", "status", "attempts", "nextAttemptAt" ] } ], "failures": [ { "trigger": "Widget fails, is denied, or times out", "detection": "The active generation reaches a typed failure without a valid terminal candidate.", "recovery": "Dispose it, restore focus, record the reason, and activate a useful host-owned fallback." }, { "trigger": "Message arrives from a wrong origin or with unknown fields", "detection": "Exact origin or narrow schema validation fails before domain processing.", "recovery": "Reject without changing aggregate state and emit a safe rejection metric without storing opaque content." }, { "trigger": "Callback arrives after screen disposal or a newer launch", "detection": "Owner is inactive or result generation differs from the current session generation.", "recovery": "Ignore the late result and clean up its provider resources without committing state." }, { "trigger": "User edits the address after selecting a place", "detection": "Host draft version changes while a candidate or selection exists.", "recovery": "Clear both values, return to draft, and require a new selection before submission." }, { "trigger": "Submit response is lost", "detection": "Client lacks acknowledgement but retains session and idempotency identity.", "recovery": "Repeat the same command key or read the session; never create a second business record." } ], "observability": [ "Widget launch, time-to-active, and terminal outcome by platform and component version", "Origin and schema rejection counts without raw payload retention", "Fallback activation, completion, and abandonment rate", "Candidate-to-selection and selection-to-submit conversion", "Stale selection invalidation after host edits", "Duplicate, late, and superseded callback count", "Idempotency replay and optimistic version conflict rate", "Outbox backlog, retry, and dead-letter age" ] } ``` ## stateful-journey · iOS direction planning and navigation handoff - Identity: `stateful-journey:ios-direction-planning-handoff` - Canonical: https://developer.mappls.com/journeys/ios-direction-planning-handoff - State model: hybrid ```json { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "eyebrow": "MapplsDirectionUI · route candidate lifecycle", "productSlug": "routes-navigation", "stateModel": "hybrid", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "aggregate": "route planning session", "actors": [ "Traveler", "Host application", "MapplsDirectionUI", "Navigation adapter" ], "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "contractSlugs": [], "sampleSlug": "deep-link-journey-host", "tutorialSlugs": [ "ios-direction-geofence-handoffs" ], "states": [ { "id": "draft", "label": "Draft", "meaning": "The host owns one route intent, traveler context, and revision before presenting provider UI.", "recovery": "Restore only normalized locations and host preferences; never serialize a view controller, delegate, or provider route object." }, { "id": "editing", "label": "Editing", "meaning": "One presented controller generation owns source, destination, via points, options, delegates, dismissal, and accessibility focus.", "recovery": "Dismiss and dispose the active generation once; a new presentation receives a new generation and route revision." }, { "id": "calculating", "label": "Calculating", "meaning": "The provider surface is resolving route alternatives for the current immutable location and option revision.", "recovery": "Retain the host draft and expose retry or edit; never reuse candidates calculated for an older revision." }, { "id": "candidates_ready", "label": "Candidates ready", "meaning": "One or more provider route objects are visible for comparison but remain controller-scoped candidates.", "recovery": "If stops or route options change, invalidate the full candidate set and calculate again." }, { "id": "selected", "label": "Selected", "meaning": "The traveler selected an in-range route index and the adapter copied a bounded route handoff value plus the exact location revision.", "recovery": "A subsequent edit invalidates selection; do not persist the opaque Route instance as application state." }, { "id": "handoff_pending", "label": "Handoff pending", "meaning": "The documented start-navigation callback requested a host-owned navigation action, but no target navigator acknowledgement exists yet.", "recovery": "Retry with the same handoff identity or return visibly to selection; never report navigation as active from the button callback alone." }, { "id": "handed_off", "label": "Handed off", "meaning": "The configured navigation adapter accepted the normalized route request and returned its own attributable session identity or acknowledgement.", "recovery": "Navigation progress and completion belong to the selected navigation product's separate lifecycle.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "The traveler dismissed or backed out and the host recorded one terminal cancellation without a route handoff.", "recovery": "Renewed intent creates a new planning session rather than resurrecting the disposed controller.", "terminal": true } ], "transitions": [ { "command": "create_plan", "actor": "Host application", "from": [], "to": "draft", "event": "route_plan.created", "idempotency": "One external journey intent maps to one route-planning aggregate across retries." }, { "command": "open_direction_ui", "actor": "Traveler", "from": [ "draft", "selected" ], "to": "editing", "event": "route_plan.editor_opened", "idempotency": "One command creates one presentation generation and one delegate ownership record." }, { "command": "request_routes", "actor": "Traveler", "from": [ "editing" ], "to": "calculating", "event": "route_plan.calculation_requested", "idempotency": "Hash normalized locations, options, and revision so duplicate requests share one logical calculation." }, { "command": "receive_routes", "actor": "MapplsDirectionUI", "from": [ "calculating" ], "to": "candidates_ready", "event": "route_plan.candidates_received", "idempotency": "Accept only the active generation and revision; repeated callbacks replace no committed state." }, { "command": "select_route", "actor": "Traveler", "from": [ "candidates_ready" ], "to": "selected", "event": "route_plan.route_selected", "idempotency": "Validate selectedRouteIndex against the returned collection and commit one normalized handoff value for the route revision." }, { "command": "request_navigation", "actor": "Traveler", "from": [ "selected", "candidates_ready" ], "to": "handoff_pending", "event": "route_plan.navigation_requested", "idempotency": "Bind callback generation, route revision, selected index, and host command key to one handoff attempt." }, { "command": "confirm_handoff", "actor": "Navigation adapter", "from": [ "handoff_pending" ], "to": "handed_off", "event": "route_plan.navigation_handed_off", "idempotency": "Persist the target acknowledgement once and let its separate lifecycle own later progress." }, { "command": "cancel_plan", "actor": "Traveler", "from": [ "draft", "editing", "calculating", "candidates_ready", "selected", "handoff_pending" ], "to": "cancelled", "event": "route_plan.cancelled", "idempotency": "Repeated back, dismissal, or cancel signals dispose once and return the same terminal outcome." } ], "invariants": [ "Stops, options, route candidates, and selection share one explicit revision.", "A selected index is validated before dereferencing its Route candidate.", "The provider controller and opaque Route objects never become durable application records.", "The start-navigation callback expresses intent, not proof that navigation started or completed.", "One presentation generation produces at most one terminal handoff or cancellation.", "Credentials and unrestricted location histories never enter route-planning audit events." ], "records": [ { "name": "Route plan", "purpose": "Host-owned normalized stops, options, revision, lifecycle state, and optimistic version.", "keyFields": [ "planId", "externalId", "state", "routeRevision", "version", "owner" ] }, { "name": "Route handoff candidate", "purpose": "Bounded portable value copied from the active route selection without retaining provider UI objects.", "keyFields": [ "candidateId", "routeRevision", "selectedIndex", "locationDigest", "optionDigest", "createdAt" ] }, { "name": "Handoff attempt", "purpose": "Immutable request and target acknowledgement separating planning from navigation runtime.", "keyFields": [ "attemptId", "candidateId", "target", "status", "targetSessionRef", "requestedAt" ] }, { "name": "Audit and outbox", "purpose": "Attributable transitions and exactly-once-in-effect downstream notification.", "keyFields": [ "eventId", "aggregateVersion", "actor", "idempotencyKey", "outboxStatus" ] } ], "failures": [ { "trigger": "Route calculation fails or returns no alternatives", "detection": "The active controller reports an error or has no valid selected route for the current revision.", "recovery": "Keep the editable draft, show a safe error, and allow option or stop revision before retry." }, { "trigger": "A delegate callback arrives from an old controller", "detection": "The callback presentation generation differs from the aggregate's active generation.", "recovery": "Ignore it, dispose its resources, and leave the current route revision unchanged." }, { "trigger": "Selected route index is stale or invalid", "detection": "The index is outside the current route collection or belongs to a superseded calculation revision.", "recovery": "Reject the handoff and require visible reselection from current candidates." }, { "trigger": "Navigation target rejects or times out", "detection": "No target acknowledgement exists for the handoff identity inside the bounded deadline.", "recovery": "Remain handoff pending, expose retry or return-to-selection, and do not claim an active navigation session." } ], "observability": [ "Editor presentation, dismissal, and terminal result by released component version", "Calculation latency, failure, and zero-alternative rate", "Stop and option revision count before selection", "Candidate-to-selection and selection-to-handoff conversion", "Invalid index, stale generation, duplicate callback, and late callback rejection", "Handoff acknowledgement latency and target rejection rate", "Idempotency replay and optimistic version conflict rate" ] } ``` ## stateful-journey · iOS geofence draft and publication boundary - Identity: `stateful-journey:ios-geofence-draft` - Canonical: https://developer.mappls.com/journeys/ios-geofence-draft - State model: hybrid ```json { "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" ] } ``` ## stateful-journey · iOS feedback report and review - Identity: `stateful-journey:ios-feedback-report-review` - Canonical: https://developer.mappls.com/journeys/ios-feedback-report-review - State model: hybrid ```json { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "eyebrow": "Mappls Feedback Kit · evidence before resolution", "productSlug": "capture-feedback", "stateModel": "hybrid", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "aggregate": "feedback report", "actors": [ "Contributor", "Host application", "Mappls Feedback Kit", "Provider adapter", "Operations reviewer" ], "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "contractSlugs": [], "sampleSlug": "place-contribution-desk", "states": [ { "id": "draft", "label": "Draft", "meaning": "The host owns purpose, category intent, reporter consent, location context, and retention policy before opening provider UI.", "recovery": "Restore only bounded host fields; never serialize a view controller, delegate, credential, attachment body, or opaque provider object." }, { "id": "capturing", "label": "Capturing", "meaning": "One presented feedback generation owns UI, focus, permission prompts, callbacks, cancellation, and cleanup.", "recovery": "Dismiss and dispose once; a later attempt receives a new generation and cannot accept callbacks from the old one." }, { "id": "candidate", "label": "Candidate", "meaning": "The adapter copied allow-listed category, bounded description, normalized location identity, and attachment references into application state.", "recovery": "Reject malformed, oversized, stale, unexpected, or late output without retaining an opaque payload." }, { "id": "submitted", "label": "Submitted", "meaning": "The contributor deliberately committed one immutable application report with idempotency, expected version, audit, and outbox evidence.", "recovery": "Submission proves only the application's accepted record; provider receipt and publication or resolution remain separate facts." }, { "id": "provider_pending", "label": "Provider pending", "meaning": "A separately selected adapter has an acknowledged or unknown provider submission outcome that requires reconciliation.", "recovery": "Query or reconcile using the original application and provider identity; never blind-retry with a new command key." }, { "id": "review_pending", "label": "Review pending", "meaning": "Submission evidence and any provider acknowledgement await an attributable quality, privacy, duplication, or policy decision.", "recovery": "Request rework as a new immutable attempt or reject with a bounded reason; never overwrite the submitted evidence." }, { "id": "resolved", "label": "Resolved", "meaning": "An authorized reviewer recorded the disposition and exact supporting evidence, with provider resolution only when independently proven.", "recovery": "Corrections append a linked decision revision rather than mutating the terminal record.", "terminal": true }, { "id": "rejected", "label": "Rejected", "meaning": "Review found the report invalid, duplicate, out of scope, or unsupported and preserved the reason plus evidence lineage.", "recovery": "A contributor may create a linked retry with a new attempt identity.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "The contributor ended the active attempt before application submission and every UI resource was disposed.", "recovery": "Renewed intent creates a new report aggregate or explicitly linked attempt.", "terminal": true } ], "transitions": [ { "command": "create_report", "actor": "Host application", "from": [], "to": "draft", "event": "feedback_report.created", "idempotency": "One external case and purpose maps to one draft aggregate across retries." }, { "command": "open_feedback_ui", "actor": "Contributor", "from": [ "draft" ], "to": "capturing", "event": "feedback_report.ui_opened", "idempotency": "One command creates one active presentation generation and ownership record." }, { "command": "receive_candidate", "actor": "Mappls Feedback Kit", "from": [ "capturing" ], "to": "candidate", "event": "feedback_report.candidate_received", "idempotency": "Accept one terminal allow-listed result for the active generation and normalized content hash." }, { "command": "commit_submission", "actor": "Contributor", "from": [ "candidate" ], "to": "submitted", "event": "feedback_report.submitted", "idempotency": "Commit report, processed command, audit event, and outbox atomically under expected version." }, { "command": "request_provider_submission", "actor": "Provider adapter", "from": [ "submitted" ], "to": "provider_pending", "event": "feedback_report.provider_requested", "idempotency": "Persist application command and provider request identities before attempting the separately approved contract." }, { "command": "queue_review", "actor": "Host application", "from": [ "submitted", "provider_pending" ], "to": "review_pending", "event": "feedback_report.review_queued", "idempotency": "One immutable submission revision creates at most one active review case." }, { "command": "resolve_report", "actor": "Operations reviewer", "from": [ "review_pending" ], "to": "resolved", "event": "feedback_report.resolved", "idempotency": "Bind actor, disposition, exact evidence revision, audit, and notification outbox in one commit." }, { "command": "reject_report", "actor": "Operations reviewer", "from": [ "review_pending" ], "to": "rejected", "event": "feedback_report.rejected", "idempotency": "One reviewer decision applies once to one immutable report revision." }, { "command": "cancel_report", "actor": "Contributor", "from": [ "draft", "capturing", "candidate" ], "to": "cancelled", "event": "feedback_report.cancelled", "idempotency": "Repeated cancellation returns the terminal result while cleanup remains exactly-once-in-effect." } ], "invariants": [ "A UI callback creates only a candidate; it cannot prove application submission, provider receipt, publication, or resolution.", "One presentation generation produces at most one accepted terminal result and all late callbacks are ignored.", "Every submission revision is immutable and content-hashed; rework creates a new linked attempt.", "Provider acknowledgement and reviewer disposition are separate attributable records.", "Credentials, view controllers, delegates, attachment bodies, and opaque provider payloads never enter durable state.", "Idempotency, optimistic concurrency, audit, outbox, privacy purpose, retention, and redaction apply to every committed transition." ], "records": [ { "name": "Feedback report", "purpose": "Host-owned intent, lifecycle state, current immutable submission, and optimistic version.", "keyFields": [ "reportId", "externalId", "purpose", "state", "submissionRevision", "version" ] }, { "name": "Submission revision", "purpose": "Allow-listed category, description, normalized location, consent, attachment references, and content identity.", "keyFields": [ "submissionId", "reportId", "contentHash", "locationIdentity", "consentVersion", "submittedAt" ] }, { "name": "Provider attempt", "purpose": "Separately selected contract request, acknowledgement, unknown outcome, and reconciliation evidence.", "keyFields": [ "attemptId", "submissionId", "providerRequestId", "status", "receiptReference", "lastCheckedAt" ] }, { "name": "Review decision", "purpose": "Attributable disposition against one exact submission and provider-evidence revision.", "keyFields": [ "reviewId", "submissionId", "reviewer", "decision", "reason", "decidedAt" ] } ], "failures": [ { "trigger": "UI is denied, blocked, dismissed, or times out", "detection": "The active generation ends without a valid allow-listed candidate.", "recovery": "Dispose, restore focus, retain the draft, record a safe reason, and offer a purpose-appropriate manual fallback." }, { "trigger": "A callback arrives after replacement or disposal", "detection": "Its presentation generation differs from the report's active generation.", "recovery": "Ignore it, release its resources, and keep current report state unchanged." }, { "trigger": "Provider submission response is lost", "detection": "The application has a durable request identity but no authoritative acknowledgement.", "recovery": "Remain provider pending and reconcile under the same identity before any retry." }, { "trigger": "Review rejects or requests corrected evidence", "detection": "Policy, privacy, duplication, location, or content validation fails for the immutable revision.", "recovery": "Preserve the decision and original revision; create a new linked attempt rather than editing history." } ], "observability": [ "UI open, activation, cancellation, candidate, and terminal outcome by released component version", "Schema, size, stale-generation, duplicate, and late-callback rejection", "Draft-to-candidate and candidate-to-submit conversion", "Provider pending age, acknowledgement, unknown outcome, and reconciliation", "Review queue age, disposition, rework, and duplicate rate", "Idempotency replay, version conflict, audit, and outbox health", "Privacy retention and redaction completion without attachment-body logging" ] } ``` ## stateful-journey · Consent-bound location capture evidence - Identity: `stateful-journey:location-capture-evidence` - Canonical: https://developer.mappls.com/journeys/location-capture-evidence - State model: hybrid ```json { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "eyebrow": "Location Capture SDK · application-owned evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "aggregate": "location capture attempt", "actors": [ "Application user", "Host application", "Platform adapter", "Evidence reviewer", "Mappls Location Capture SDK" ], "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "contractSlugs": [], "sampleSlug": "address-verifier", "states": [ { "id": "draft", "label": "Draft", "meaning": "The host owns a business purpose, subject or case identity, capture policy, and retention class before requesting device access.", "recovery": "Restore only host-owned intent; never persist a location manager, callback, permission prompt, or opaque SDK object." }, { "id": "permission_pending", "label": "Permission pending", "meaning": "The user is deciding the minimum native permission for the declared purpose and visible capture behavior.", "recovery": "Represent denial, restriction, and interruption separately; offer a purpose-appropriate manual path without repeatedly prompting." }, { "id": "ready", "label": "Ready", "meaning": "SDK initialization, entitlement, permission, policy validation, and one launch generation have succeeded.", "recovery": "If configuration changes or the app backgrounds, invalidate the generation before starting another acquisition." }, { "id": "acquiring", "label": "Acquiring", "meaning": "Exactly one single-shot request or bounded subscription owns timeout, accuracy, distance, packet-size, callback, and cleanup responsibility.", "recovery": "Stop the active request once on timeout, cancellation, owner disposal, or replacement; late callbacks cannot mutate the aggregate." }, { "id": "candidate", "label": "Candidate", "meaning": "A returned event has normalized coordinates, horizontal accuracy, event time, receipt time, policy result, and source generation, but is not yet accepted evidence.", "recovery": "Reject malformed, stale, impossible, duplicated, or superseded events and retain a safe reason without an opaque payload." }, { "id": "review_pending", "label": "Review pending", "meaning": "The candidate is usable only with human review because accuracy, freshness, or policy confidence is below the automatic threshold.", "recovery": "A reviewer may accept with an attributable reason, request a new immutable attempt, or choose an approved alternate evidence source." }, { "id": "accepted", "label": "Accepted", "meaning": "An actor accepted one immutable normalized fix for the declared purpose and policy version, with an audit event and retention deadline.", "recovery": "Corrections create a linked evidence revision or new attempt rather than changing the accepted observation.", "terminal": true }, { "id": "cancelled", "label": "Cancelled", "meaning": "The user or host ended the attempt and every active SDK resource was stopped or unsubscribed.", "recovery": "Renewed intent creates a new attempt and permission decision where required; do not revive an old callback generation.", "terminal": true } ], "transitions": [ { "command": "create_attempt", "actor": "Host application", "from": [], "to": "draft", "event": "location_capture.attempt_created", "idempotency": "Map one external case and capture-purpose identity to one attempt across retries." }, { "command": "request_permission", "actor": "Application user", "from": [ "draft" ], "to": "permission_pending", "event": "location_capture.permission_requested", "idempotency": "Record one visible request per policy decision and current native authorization state." }, { "command": "prepare_sdk", "actor": "Platform adapter", "from": [ "permission_pending" ], "to": "ready", "event": "location_capture.sdk_ready", "idempotency": "Bind initialization and validated configuration to one launch generation without persisting credentials or SDK instances." }, { "command": "start_acquisition", "actor": "Application user", "from": [ "ready", "review_pending" ], "to": "acquiring", "event": "location_capture.acquisition_started", "idempotency": "A command key starts at most one single-shot request or subscription generation." }, { "command": "receive_location", "actor": "Platform adapter", "from": [ "acquiring" ], "to": "candidate", "event": "location_capture.candidate_received", "idempotency": "Normalize and hash one qualifying terminal event per single-shot generation, or deduplicate subscribed events by bounded source identity." }, { "command": "queue_review", "actor": "Host application", "from": [ "candidate" ], "to": "review_pending", "event": "location_capture.review_queued", "idempotency": "The evidence hash and policy version create at most one review case." }, { "command": "accept_evidence", "actor": "Application user", "from": [ "candidate" ], "to": "accepted", "event": "location_capture.evidence_accepted", "idempotency": "Commit evidence, policy result, processed command, audit event, and outbox record atomically." }, { "command": "approve_weak_evidence", "actor": "Evidence reviewer", "from": [ "review_pending" ], "to": "accepted", "event": "location_capture.weak_evidence_approved", "idempotency": "Bind the reviewer identity and bounded justification to the immutable candidate hash." }, { "command": "cancel_attempt", "actor": "Application user", "from": [ "draft", "permission_pending", "ready", "acquiring", "candidate", "review_pending" ], "to": "cancelled", "event": "location_capture.attempt_cancelled", "idempotency": "Repeated cancellation returns the terminal record while stop and unsubscribe cleanup remain exactly-once-in-effect." } ], "invariants": [ "A permission grant is not consent for every purpose; purpose, policy, and retention are recorded separately.", "One acquisition generation owns one callback family, timeout, stop, and unsubscribe lifecycle.", "Accuracy, event time, receipt time, and policy result remain attached to the normalized coordinates.", "A callback creates a candidate, never an accepted business decision.", "Weak or stale evidence cannot pass an automatic acceptance threshold by omitting quality fields.", "Credentials, native manager instances, full opaque payloads, and callback closures never enter durable storage." ], "records": [ { "name": "Capture attempt", "purpose": "Current host-owned purpose, policy, lifecycle state, generation, and optimistic version.", "keyFields": [ "attemptId", "externalId", "purpose", "policyVersion", "state", "generation", "version" ] }, { "name": "Normalized location evidence", "purpose": "Immutable accuracy-bearing observation independent of the SDK object's lifetime.", "keyFields": [ "evidenceId", "latitude", "longitude", "horizontalAccuracy", "eventTime", "receivedTime", "sourceGeneration", "contentHash" ] }, { "name": "Review decision", "purpose": "Attributable disposition of evidence that cannot be accepted automatically.", "keyFields": [ "reviewId", "evidenceId", "reviewer", "decision", "reason", "decidedAt" ] }, { "name": "Audit and outbox", "purpose": "Append-only transitions and exactly-once-in-effect downstream notification.", "keyFields": [ "eventId", "aggregateVersion", "actor", "idempotencyKey", "outboxStatus" ] } ], "failures": [ { "trigger": "Permission is denied or restricted", "detection": "The native authorization result cannot satisfy the declared capture mode.", "recovery": "Explain the affected outcome, offer settings or a manual fallback where appropriate, and keep the attempt non-acquiring." }, { "trigger": "Initialization or entitlement fails", "detection": "The documented initialize operation returns failure before the generation becomes ready.", "recovery": "Expose a safe configuration or entitlement error, retain no credential value, and require a deliberate retry after correction." }, { "trigger": "Acquisition times out or misses the accuracy budget", "detection": "The configured deadline expires or every event remains outside policy.", "recovery": "Stop or unsubscribe once, preserve the quality reason, and route to review, retry, or fallback rather than fabricating a precise fix." }, { "trigger": "A callback arrives after cancellation or screen disposal", "detection": "The owner is inactive or callback generation differs from the current attempt generation.", "recovery": "Ignore the event, perform idempotent cleanup, and do not change the terminal or newer attempt." }, { "trigger": "The app restarts during review", "detection": "The immutable candidate exists but the review command lacks acknowledgement.", "recovery": "Reload the attempt and replay the same command key; never reacquire or duplicate evidence merely to recover workflow state." } ], "observability": [ "Initialization and configuration outcomes by SDK platform and released version", "Permission denied, restricted, and settings-return rate", "Time to first event and time to policy-acceptable event", "Accuracy and freshness distributions without high-cardinality coordinate labels", "Single-shot, subscription, timeout, stop, unsubscribe, and late-callback counts", "Automatic acceptance, review, retry, fallback, and cancellation rate", "Idempotency replay and optimistic version conflict rate", "Outbox backlog, retry, and dead-letter age" ] } ``` ## stateful-journey · Governed place contribution and publication - Identity: `stateful-journey:place-contribution-publication` - Canonical: https://developer.mappls.com/journeys/place-contribution-publication - State model: stateful ```json { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "eyebrow": "App Widgets · contribution reconciliation", "productSlug": "capture-feedback", "stateModel": "stateful", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "aggregate": "place contribution", "actors": [ "Contributor", "Host application", "Operations reviewer", "Mappls hosted widget and search" ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "states": [ { "id": "draft", "label": "Draft", "meaning": "The host owns a bounded contribution intent, business purpose, and external identity before any provider surface opens.", "recovery": "Restore only host-owned fields and version; never persist the iframe DOM, browser session, or undocumented provider payload." }, { "id": "widget_open", "label": "Widget open", "meaning": "The Mappls-hosted form is visible for one recorded attempt, while provider UI and submission remain outside the host contract.", "recovery": "Let the contributor reopen or abandon the attempt; never infer success from frame navigation or inaccessible DOM state." }, { "id": "submission_reported", "label": "Submission reported", "meaning": "The contributor says the hosted form showed success, which is useful testimony but not a receipt or publication result.", "recovery": "Preserve actor, attempt, and report time, then queue an independent reconciliation check." }, { "id": "publication_pending", "label": "Publication pending", "meaning": "An operations process is checking supported Mappls search or an approved provider receipt for a stable published identity.", "recovery": "Retry under a bounded schedule and keep the case visibly pending when no result exists; do not manufacture a Mappls Pin." }, { "id": "published", "label": "Published", "meaning": "A supported provider surface returned a six-character Mappls Pin with attributable observation evidence.", "recovery": "Treat publication evidence as immutable; later corrections create a linked case or evidence revision.", "terminal": true }, { "id": "rejected", "label": "Rejected", "meaning": "A reviewer found a duplicate, invalid, unsafe, or otherwise non-publishable contribution and recorded why.", "recovery": "Retain the failed attempt and allow an explicit retry that opens a new attempt rather than rewriting history." }, { "id": "withdrawn", "label": "Withdrawn", "meaning": "The host stopped its own follow-up workflow at the contributor's request without claiming that the provider submission was deleted.", "recovery": "Treat withdrawal as terminal application state; use a separately documented provider channel for any provider-side request.", "terminal": true } ], "transitions": [ { "command": "create_contribution", "actor": "Host application", "from": [], "to": "draft", "event": "place_contribution.created", "idempotency": "Map one bounded external case identity to one aggregate across network retries." }, { "command": "open_widget", "actor": "Contributor", "from": [ "draft" ], "to": "widget_open", "event": "place_contribution.widget_opened", "idempotency": "Create at most one immutable attempt per command key and aggregate version." }, { "command": "report_submission", "actor": "Contributor", "from": [ "widget_open" ], "to": "submission_reported", "event": "place_contribution.submission_reported", "idempotency": "Record one acknowledgement for the active attempt without inventing a provider receipt." }, { "command": "queue_reconciliation", "actor": "Host application", "from": [ "submission_reported" ], "to": "publication_pending", "event": "place_contribution.reconciliation_queued", "idempotency": "The same scheduling key creates at most one pending transition and outbox event." }, { "command": "confirm_publication", "actor": "Operations reviewer", "from": [ "submission_reported", "publication_pending" ], "to": "published", "event": "place_contribution.published", "idempotency": "Hash the supported evidence source, Mappls Pin, observation time, and source fingerprint before committing." }, { "command": "reject", "actor": "Operations reviewer", "from": [ "submission_reported", "publication_pending" ], "to": "rejected", "event": "place_contribution.rejected", "idempotency": "Preserve the review decision, reason, and attempt version under the reviewer command key." }, { "command": "retry", "actor": "Contributor", "from": [ "rejected" ], "to": "widget_open", "event": "place_contribution.retried", "idempotency": "Create a new immutable attempt once while retaining the rejected attempt and decision in audit history." }, { "command": "withdraw", "actor": "Contributor", "from": [ "draft", "widget_open", "submission_reported", "publication_pending" ], "to": "withdrawn", "event": "place_contribution.withdrawn", "idempotency": "Stop host follow-up once without representing this as provider-side deletion." } ], "invariants": [ "A hosted success screen or contributor report never proves publication.", "No callback, browser message, receipt, moderation status, or withdrawal capability is invented when the public source does not document it.", "Only provider-backed evidence containing a valid Mappls Pin can close the aggregate as published.", "Every widget attempt is immutable and linked to the aggregate version that opened it.", "Commands are idempotent, compare expected version, and commit audit plus outbox atomically.", "Contribution text, actor identity, and precise location follow declared purpose, access, and retention boundaries." ], "records": [ { "name": "Contribution aggregate", "purpose": "Current host-owned state, business identity, purpose, ownership, and optimistic version.", "keyFields": [ "contributionId", "externalId", "state", "version", "purpose", "owner" ] }, { "name": "Widget attempt", "purpose": "Immutable record of each frame launch and contributor-reported outcome without provider-internal data.", "keyFields": [ "attemptId", "aggregateVersion", "openedAt", "reportedAt", "documentedSourceUrl" ] }, { "name": "Publication evidence", "purpose": "Attributable supported-source proof that a stable Mappls identity is observable.", "keyFields": [ "mapplsPin", "evidenceSource", "observedAt", "sourceFingerprint", "reviewer" ] }, { "name": "Audit and outbox", "purpose": "Append-only transitions and exactly-once-in-effect downstream notifications.", "keyFields": [ "eventId", "aggregateVersion", "actor", "idempotencyKey", "outboxStatus" ] } ], "failures": [ { "trigger": "Hosted frame is blocked or unavailable", "detection": "The host cannot load the established HTTPS source within its timeout and CSP boundary.", "recovery": "Keep the contribution in draft, explain the boundary, and offer an external open or later retry without claiming a submission." }, { "trigger": "User loses the success acknowledgement", "detection": "No provider receipt exists and the contributor cannot confirm what the hosted surface showed.", "recovery": "Leave the attempt unresolved and allow a deliberate new attempt; never infer completion from iframe navigation." }, { "trigger": "Reconciliation finds an existing duplicate", "detection": "Supported search resolves the same place identity or a reviewer establishes duplicate ownership.", "recovery": "Reject with duplicate reason and link the known Mappls Pin as context, not as evidence that this attempt created it." }, { "trigger": "No public result appears within the operating window", "detection": "Every bounded supported-source check returns no qualifying Mappls identity before the stated review deadline.", "recovery": "Keep pending or reject according to published host policy and expose the last check time without promising a provider SLA." }, { "trigger": "Application restarts during review", "detection": "An in-flight command lacks acknowledgement while aggregate, command key, and outbox state are durable.", "recovery": "Reload the aggregate and replay the same command key; do not duplicate an attempt, decision, or notification." } ], "observability": [ "Widget opens, contributor reports, and abandonment by attempt", "Time from report to first reconciliation and terminal decision", "Pending age and last supported-source check", "Publication evidence source and Mappls Pin validity", "Duplicate and rejection reasons without opaque provider payloads", "Withdrawal count explicitly separated from provider-side deletion", "Idempotency replay and optimistic version conflict rate", "Outbox backlog, retry, and dead-letter age" ] } ``` ## stateful-journey · Entitled RealView remote inspection - Identity: `stateful-journey:realview-remote-inspection` - Canonical: https://developer.mappls.com/journeys/realview-remote-inspection - State model: stateful ```json { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "eyebrow": "RealView · human observation and review", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "summary": "Qualify paid RealView entitlement, open one browser-visible-token viewer attempt, handle the documented no-imagery signal safely, and turn human observations into a reviewed business record without inventing panorama metadata.", "aggregate": "remote visual inspection", "actors": [ "Inspector", "Inspection reviewer", "Platform administrator", "Host application", "Mappls RealView widget" ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "contractSlugs": [], "sampleSlug": "realview-inspection-desk", "states": [ { "id": "draft", "label": "Draft", "meaning": "The host owns an inspection purpose, external asset/site identity, Mappls Pin or coordinate, classification, and policy version.", "recovery": "Restore only host-owned data; never persist a token, complete iframe URL, provider DOM, controller, or opaque imagery payload." }, { "id": "entitlement_pending", "label": "Entitlement pending", "meaning": "Paid product access, exact host generation, browser credential class, restrictions, expiry, quota, and permitted use are being approved.", "recovery": "Keep the case pending until an administrator records a current entitlement reference; do not substitute another Mappls credential." }, { "id": "ready", "label": "Ready", "meaning": "The approved entitlement reference and bounded viewer configuration are current enough to open an attempt.", "recovery": "If the entitlement expires or configuration changes, invalidate readiness before a browser-visible token is requested." }, { "id": "viewing", "label": "Viewing", "meaning": "One browser lifecycle owns the iframe, exact origin, location/radius configuration, ephemeral token-handle reference, listener, timeout, and disposal.", "recovery": "Dispose exactly once and ignore every message from a superseded attempt; return to entitlement pending on token expiry." }, { "id": "coverage_unavailable", "label": "Coverage unavailable", "meaning": "The exact Auth2 origin emitted the documented schema-valid status 204 for this attempt and configuration.", "recovery": "Adjust only a justified location/radius or choose field evidence; never generalize one 204 into permanent area-wide absence." }, { "id": "observation_recorded", "label": "Observation recorded", "meaning": "An inspector saved a bounded human checklist and notes linked to the viewer attempt, without claiming provider metadata or copying imagery.", "recovery": "Corrections create a linked observation revision; the source attempt and original observation remain immutable." }, { "id": "review_pending", "label": "Review pending", "meaning": "An immutable observation set awaits a separately authorized reviewer under the declared purpose and policy.", "recovery": "Reassign review explicitly and keep its SLA independent from provider availability." }, { "id": "accepted", "label": "Accepted", "meaning": "A named reviewer accepted the observation set for the exact business decision and policy version.", "recovery": "Later evidence creates a new inspection or linked revision rather than rewriting acceptance.", "terminal": true }, { "id": "rework_required", "label": "Rework required", "meaning": "Review retained the prior observation and reason while requiring a new viewer attempt or alternate field evidence.", "recovery": "Open a new immutable attempt after requalifying entitlement and configuration." }, { "id": "cancelled", "label": "Cancelled", "meaning": "An authorized actor ended the inspection with a bounded reason while preserving prior attempts and observations.", "recovery": "Renewed business intent creates a new linked inspection.", "terminal": true } ], "transitions": [ { "command": "create_inspection", "actor": "Host application", "from": [], "to": "draft", "event": "realview_inspection.created", "idempotency": "One external inspection identity maps to one aggregate across retries." }, { "command": "request_entitlement", "actor": "Inspector", "from": [ "draft" ], "to": "entitlement_pending", "event": "realview_inspection.entitlement_requested", "idempotency": "The product, environment, and account request identity is stable and contains no credential value." }, { "command": "confirm_entitlement", "actor": "Platform administrator", "from": [ "entitlement_pending" ], "to": "ready", "event": "realview_inspection.entitlement_confirmed", "idempotency": "Commit only entitlement reference, exact host, restrictions, and expiry metadata—not the issued token." }, { "command": "open_viewer", "actor": "Inspector", "from": [ "ready", "coverage_unavailable", "rework_required" ], "to": "viewing", "event": "realview_inspection.viewer_opened", "idempotency": "One command creates one immutable attempt and one ephemeral token-handle reference." }, { "command": "record_no_coverage", "actor": "Host application", "from": [ "viewing" ], "to": "coverage_unavailable", "event": "realview_inspection.coverage_unavailable", "idempotency": "Accept one exact-origin, one-field status 204 result for the active attempt only." }, { "command": "record_observation", "actor": "Inspector", "from": [ "viewing" ], "to": "observation_recorded", "event": "realview_inspection.observation_recorded", "idempotency": "Hash the bounded checklist, notes, attempt, actor, and observation time." }, { "command": "submit_review", "actor": "Inspector", "from": [ "observation_recorded" ], "to": "review_pending", "event": "realview_inspection.review_requested", "idempotency": "Freeze one observation set and enqueue review atomically." }, { "command": "accept", "actor": "Inspection reviewer", "from": [ "review_pending" ], "to": "accepted", "event": "realview_inspection.accepted", "idempotency": "Bind reviewer, reason, policy version, observation IDs, and command identity." }, { "command": "request_rework", "actor": "Inspection reviewer", "from": [ "review_pending" ], "to": "rework_required", "event": "realview_inspection.rework_requested", "idempotency": "Retain the reviewed evidence and create one attributable rework decision." }, { "command": "record_entitlement_expired", "actor": "Host application", "from": [ "ready", "viewing" ], "to": "entitlement_pending", "event": "realview_inspection.entitlement_expired", "idempotency": "Invalidate the active attempt once and discard only its ephemeral token handle." }, { "command": "cancel", "actor": "Inspector", "from": [ "draft", "entitlement_pending", "ready", "viewing", "coverage_unavailable", "observation_recorded", "review_pending", "rework_required" ], "to": "cancelled", "event": "realview_inspection.cancelled", "idempotency": "Commit actor, reason, cleanup, audit, and outbox exactly once." } ], "invariants": [ "No server secret, browser token value, or complete token-bearing iframe URL is persisted, logged, analyzed, exported, or sent to a model.", "The exact selected origin and narrow documented schema are checked before any browser message reaches domain state.", "Status 204 proves only no imagery for one attempt and configuration; HTTP 200 and frame load prove only a delivered shell.", "Human observation is distinct from provider imagery, panorama metadata, measurement, currentness, and inspection acceptance.", "Imagery is not copied, screenshotted, exported, or retained without an explicit licensed product contract and purpose-specific policy.", "Every command is idempotent, compares expected version, and commits snapshot, audit, receipt, and outbox atomically.", "Reviewer acceptance is attributable and cannot be performed by the same automated actor that created the observation." ], "records": [ { "name": "Inspection aggregate", "purpose": "Current purpose, asset/site and location identity, ownership, policy, state, and optimistic version.", "keyFields": [ "inspectionId", "externalId", "assetId", "mapplsPinOrCoordinate", "purpose", "state", "version" ] }, { "name": "Entitlement reference", "purpose": "Non-secret proof of the approved product generation and credential policy.", "keyFields": [ "entitlementRef", "product", "host", "environment", "credentialClass", "expiresAt", "restrictionFingerprint" ] }, { "name": "Viewer attempt", "purpose": "Immutable browser lifecycle and documented no-imagery outcome.", "keyFields": [ "attemptId", "configFingerprint", "tokenHandleRef", "openedAt", "disposedAt", "coverageStatus" ] }, { "name": "Observation and review", "purpose": "Human-authored evidence and separately authorized decision without copied imagery.", "keyFields": [ "observationId", "attemptId", "checklist", "notes", "observedAt", "reviewer", "decision", "policyVersion" ] }, { "name": "Audit and outbox", "purpose": "Append-only transitions and exactly-once-in-effect downstream delivery.", "keyFields": [ "eventId", "aggregateVersion", "actor", "idempotencyKey", "outboxStatus" ] } ], "failures": [ { "trigger": "Iframe returns a shell but no usable imagery", "detection": "HTTP/frame load occurred without entitled viewing or the documented 204 signal.", "recovery": "Keep viewing unresolved until a bounded timeout, then record a host technical outcome rather than coverage or completion." }, { "trigger": "Message uses a lookalike origin or malformed payload", "detection": "Exact origin, object shape, field count, or integer status validation fails.", "recovery": "Reject before domain processing, retain only a safe rejection metric, and never store the opaque payload." }, { "trigger": "Entitlement expires during viewing", "detection": "The entitlement reference is expired/revoked or the account-approved broker reports token expiry.", "recovery": "Dispose the viewer, remove the ephemeral handle, return to entitlement pending, and retain the incomplete attempt." }, { "trigger": "Imagery is unavailable for the selected radius", "detection": "The active attempt receives the documented exact-origin status 204 message.", "recovery": "Record configuration-specific no coverage and offer justified radius/location retry or alternate field evidence." }, { "trigger": "Reviewer cannot rely on the observation", "detection": "Checklist is incomplete, limitations are missing, purpose changed, or stronger field evidence is required.", "recovery": "Request rework without overwriting the observation or prior viewer attempt." }, { "trigger": "Application restarts after an unknown command outcome", "detection": "Client lacks acknowledgement while aggregate, command key, and outbox state are durable.", "recovery": "Reload and replay the same command key; never create another attempt or review decision to recover transport uncertainty." } ], "observability": [ "Entitlement request age, confirmation, expiry, revocation, and renewal without token values", "Viewer open, time-to-first-useful-state, timeout, disposal, and superseded-attempt count", "Exact-origin/schema rejection counts without raw payload retention", "Status 204 rate by bounded configuration fingerprint, not generalized geography", "Observation completeness, limitation flags, and review duration", "Rework reason and new-attempt conversion", "Credential-bearing URL log/screenshot/model-context prevention checks", "Idempotency replay, optimistic conflict, audit, outbox backlog, retry, and dead-letter age" ] } ``` ## stateful-journey · Governed SkyDNN inference review - Identity: `stateful-journey:vision-inference-review` - Canonical: https://developer.mappls.com/journeys/vision-inference-review - State model: stateful ```json { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "eyebrow": "SkyDNN AI · synchronous inference, durable evidence", "productSlug": "ai-location", "stateModel": "stateful", "summary": "Lock an entitled model to an immutable asset identity, call the documented synchronous prediction boundary, validate geometry and confidence, require independent review, and redact derived detections on schedule.", "aggregate": "vision evidence case", "actors": [ "Asset steward", "Vision worker", "Policy service", "Independent reviewer", "Privacy worker", "Mappls SkyDNN API" ], "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "contractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "states": [ { "id": "registered", "label": "Registered", "meaning": "The application owns a purpose-bound case with opaque asset identity, SHA-256 content hash, media facts, capture time, location context, lawful-basis reference, and retention deadline.", "recovery": "Reject raw media, URLs, credentials, sensitive labels, or incomplete authority before a provider call is possible." }, { "id": "model_locked", "label": "Model locked", "meaning": "An entitled server-discovery result and one exact API model key, fingerprint, class vocabulary, and policy version are frozen for the case.", "recovery": "Model drift creates a new lock and inference attempt; never reinterpret an old response under current metadata." }, { "id": "inference_requested", "label": "Inference requested", "meaning": "One worker owns an idempotent synchronous provider-call attempt against the exact asset and model identities.", "recovery": "An ambiguous transport outcome remains unresolved until reconciled or deliberately retried as a linked attempt." }, { "id": "inferred", "label": "Inferred", "meaning": "A schema-valid provider response has normalized labels, confidence, bounded geometry, timing, provenance, and response hash without becoming a business decision.", "recovery": "Malformed or unsafe output fails closed and retains only a safe error class plus hashes." }, { "id": "review_pending", "label": "Review pending", "meaning": "Versioned policy places the immutable result in an uncertainty, sensitive-class, or mandatory-sampling review lane.", "recovery": "Reassign under SLA without altering the model output, thresholds, or reason codes." }, { "id": "accepted", "label": "Accepted", "meaning": "An independent reviewer accepted the derived evidence for the declared purpose and exact policy/model/output versions.", "recovery": "Corrections create a linked revision or new case rather than rewriting inference or decision evidence.", "terminal": true }, { "id": "rejected", "label": "Rejected", "meaning": "An independent reviewer rejected the result with an attributable reason while retaining the immutable provider evidence.", "recovery": "A new capture or model produces a linked case or attempt; rejection is never overwritten.", "terminal": true }, { "id": "redacted", "label": "Redacted", "meaning": "Derived labels and geometry were removed at the retention deadline while the minimum decision, hashes, policy, and audit record remain.", "recovery": "Redaction is irreversible in the application store; a renewed purpose requires new source evidence.", "terminal": true } ], "transitions": [ { "command": "register_case", "actor": "Asset steward", "from": [], "to": "registered", "event": "vision.case_registered", "idempotency": "One external reference and asset hash map to one case across retries." }, { "command": "lock_model", "actor": "Vision worker", "from": [ "registered" ], "to": "model_locked", "event": "vision.model_locked", "idempotency": "Server reference, model key, metadata fingerprint, and policy version identify one lock." }, { "command": "request_inference", "actor": "Vision worker", "from": [ "model_locked" ], "to": "inference_requested", "event": "vision.inference_requested", "idempotency": "One attempt identity binds the case version, asset hash, model fingerprint, and request policy." }, { "command": "record_inference", "actor": "Vision worker", "from": [ "inference_requested" ], "to": "inferred", "event": "vision.inference_recorded", "idempotency": "Provider status and response hash close one active attempt exactly once." }, { "command": "submit_review", "actor": "Policy service", "from": [ "inferred" ], "to": "review_pending", "event": "vision.review_requested", "idempotency": "Thresholds, reason codes, policy version, and attempt identity create one immutable review request." }, { "command": "accept", "actor": "Independent reviewer", "from": [ "review_pending" ], "to": "accepted", "event": "vision.accepted", "idempotency": "Reviewer, reason, policy, attempt, and expected aggregate version identify the terminal decision." }, { "command": "reject", "actor": "Independent reviewer", "from": [ "review_pending" ], "to": "rejected", "event": "vision.rejected", "idempotency": "Reviewer, reason, policy, attempt, and expected aggregate version identify the terminal decision." }, { "command": "redact", "actor": "Privacy worker", "from": [ "inferred", "review_pending", "accepted", "rejected" ], "to": "redacted", "event": "vision.redacted", "idempotency": "One retention action removes derived detail while preserving the minimum integrity and audit record." } ], "invariants": [ "No image bytes, media URL, bearer token, credential, face, number plate, or provider-internal file path enters the reference case store.", "The provider POST /predict call is synchronous; application queue, review, retry, decision, and retention states are never attributed to SkyDNN.", "Every attempt binds an immutable asset hash to one discovered model fingerprint and policy version.", "Confidence and geometry are evidence, not a business outcome or live safety command.", "Reviewer identity is independent from the fixture inference actor and every override or rejection has a reason.", "Idempotency, optimistic versions, audit, receipts, and outbox commit atomically." ], "records": [ { "name": "Vision case", "purpose": "Business purpose, external identity, lifecycle, policy, retention, and optimistic version.", "keyFields": [ "caseId", "externalId", "purpose", "state", "version", "policyVersion", "retentionUntil" ] }, { "name": "Asset envelope", "purpose": "Opaque, non-media identity and integrity facts for one captured source.", "keyFields": [ "assetRef", "sha256", "mediaClass", "width", "height", "capturedAt", "lawfulBasisRef" ] }, { "name": "Model lock", "purpose": "Exact entitled discovery evidence and immutable model selection.", "keyFields": [ "serverRef", "apiModelKey", "modelFingerprint", "classes", "lockedAt" ] }, { "name": "Inference attempt", "purpose": "Synchronous request lifecycle, normalized response, safe failure, timing, and provenance.", "keyFields": [ "attemptId", "assetHash", "modelFingerprint", "status", "resultHash", "regions", "timings" ] }, { "name": "Review and retention", "purpose": "Policy reasoning, attributable disposition, and derived-detail redaction evidence.", "keyFields": [ "reviewId", "reasonCodes", "reviewer", "decision", "redactedAt" ] }, { "name": "Audit and outbox", "purpose": "Append-only state evidence and exactly-once-in-effect downstream notification.", "keyFields": [ "eventId", "aggregateVersion", "idempotencyKey", "actor", "outboxStatus" ] } ], "failures": [ { "trigger": "Model discovery changes after the case is prepared", "detection": "Current metadata fingerprint differs from the locked fingerprint.", "recovery": "Stop, create a new model lock and attempt, and retain the original lock for comparison." }, { "trigger": "Provider response is lost after a synchronous request", "detection": "The active attempt has no terminal response hash and transport outcome is ambiguous.", "recovery": "Reconcile with the approved provider boundary when possible or record a safe failed attempt before a deliberate linked retry." }, { "trigger": "Geometry, label, or confidence is malformed", "detection": "Schema, bounds, topology, vocabulary, or numeric validation fails.", "recovery": "Quarantine derived detail, retain a safe error class, and do not send it to policy or review." }, { "trigger": "Sensitive or uncertain inference reaches policy", "detection": "A privacy class, low confidence, unsupported label, or mandatory sample rule matches.", "recovery": "Require independent review and prevent automation from issuing a terminal business or safety action." }, { "trigger": "Retention deadline passes while review is open", "detection": "Derived output remains present after the committed policy deadline.", "recovery": "Redact on schedule, close or fail the review with explicit expiry, and retain minimum audit evidence." }, { "trigger": "Process restarts after a command timeout", "detection": "The client lacks acknowledgement while snapshot, receipt, audit, and outbox are durable.", "recovery": "Reload and replay the same idempotency key without duplicating attempts, decisions, or events." } ], "observability": [ "Cases by state, purpose, media class, model fingerprint, and policy version", "Model discovery drift, lock age, and incompatible input rate", "Inference latency, safe error class, result-schema rejection, and ambiguous outcome", "Confidence, label, geometry type, and review-reason distributions", "Review queue age, disposition, override, disagreement, and sampling coverage", "Sensitive-class access and derived-output retention/redaction deadlines", "Idempotency replay, version conflict, restart recovery, audit, and outbox age" ] } ``` ## journey-workshop · Build Field-service task lifecycle - Identity: `journey-workshop:field-service-task` - Canonical: https://developer.mappls.com/journeys/field-service-task/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "field-service-task", "journeySlug": "field-service-task", "title": "Build Field-service task lifecycle", "summary": "An eight-lab, source-bounded workshop for the complete task lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task", "actorCount": 4, "stateCount": 8, "transitionCount": 8, "eventCount": 8, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "contractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "relatedTutorialSlugs": [], "sample": { "slug": "field-service", "name": "Field Service Console", "downloadPath": "/downloads/field-service.zip", "checksumPath": "/downloads/field-service.zip.sha256", "verifiedTestCount": 6, "runCommand": "npm test --workspace @mappls-example/field-service" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the task blueprint into an explicit aggregate boundary owned by the application.", "build": [ "unassigned: The job exists with client, site, SLA, skills, window, and proof policy but no worker owns it.", "assigned: A specific eligible worker owns the next decision and dispatch has recorded why they were selected.", "accepted: The worker has acknowledged responsibility and the customer-facing plan can become firm.", "en_route: Travel has begun and ETA, route deviation, and SLA-risk observations may change continuously.", "in_progress: Arrival is established and work evidence can be gathered under the declared proof policy.", "proof_pending: The worker submitted an immutable evidence set awaiting automated or supervisor validation.", "completed: Required proof is accepted and downstream billing, inventory, SLA, and customer workflows may run.", "cancelled: A named actor stopped the job with a reason before completion." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_task by Integration service: new aggregate → unassigned; emit task.created.", "assign by Dispatcher: unassigned | assigned → assigned; emit task.assigned.", "accept by Field worker: assigned → accepted; emit task.accepted.", "start_travel by Field worker: accepted → en_route; emit task.en_route.", "arrive by Field worker: en_route → in_progress; emit task.started.", "submit_proof by Field worker: in_progress → proof_pending; emit task.proof_submitted.", "approve_proof by Supervisor: proof_pending → completed; emit task.completed.", "reject_proof by Supervisor: proof_pending → in_progress; emit task.proof_rejected." ], "prove": [ "create_task resolves to field-service-task-task-created without claiming a provider webhook payload.", "assign resolves to field-service-task-task-assigned without claiming a provider webhook payload.", "accept resolves to field-service-task-task-accepted without claiming a provider webhook payload.", "start_travel resolves to field-service-task-task-en-route without claiming a provider webhook payload.", "arrive resolves to field-service-task-task-started without claiming a provider webhook payload.", "submit_proof resolves to field-service-task-task-proof-submitted without claiming a provider webhook payload.", "approve_proof resolves to field-service-task-task-completed without claiming a provider webhook payload.", "reject_proof resolves to field-service-task-task-proof-rejected without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Task snapshot: Fast current-state reads and optimistic concurrency. Keys: taskId, externalId, state, version, assigneeId, mapplsPin.", "Audit event: Attributable, replayable history for support and compliance. Keys: eventId, aggregateVersion, actor, commandId, occurredAt.", "Evidence manifest: Immutable references and hashes for checklist, media, signature, and consent. Keys: manifestId, taskVersion, captureTime, contentHash, retentionClass.", "Transactional outbox: Reliable downstream billing, inventory, notification, and analytics delivery. Keys: outboxId, eventId, status, attempts, nextAttemptAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "One upstream external job maps to one durable task aggregate.", "Only the assigned worker can accept, travel, arrive, or submit proof unless an attributable override is recorded.", "Every command carries tenant, actor, idempotency key, expected version, and occurrence time.", "Completion is impossible until the declared proof policy passes.", "Task history is append-only; corrections use new events or compensating work." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Create-task response times out: detect with No provider response but the upstream external ID and idempotency key are known. Recover with Query by known identity or repeat the same command; do not mint a new job ID.", "Two dispatchers edit the same task: detect with The submitted expected version is older than the current aggregate version. Recover with Return conflict with current state; refresh context and require an intentional new command.", "Worker is offline during proof capture: detect with Evidence exists locally but no server acknowledgement or event ID exists. Recover with Retain command ID, hashes, capture timestamps, and retry queue until the committed event is returned.", "Downstream system is unavailable after completion: detect with Task is complete but its outbox entry remains pending or retrying. Recover with Retry outbox delivery independently; never reopen or re-complete the task to trigger side effects." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Field Service Console capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (6 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Command acceptance, rejection code, actor, task version, and latency", "Time spent in each state and SLA-risk interval", "Duplicate command rate and version-conflict rate", "Offline queue age and proof upload completeness", "Outbox backlog, attempt count, and dead-letter age", "Precise-location access with purpose and retention class" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"unassigned\" | \"assigned\" | \"accepted\" | \"en_route\" | \"in_progress\" | \"proof_pending\" | \"completed\" | \"cancelled\";\ntype CommandName = \"create_task\" | \"assign\" | \"accept\" | \"start_travel\" | \"arrive\" | \"submit_proof\" | \"approve_proof\" | \"reject_proof\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_task\": { from: [null], to: \"unassigned\", event: \"task.created\" },\n \"assign\": { from: [\"unassigned\", \"assigned\"], to: \"assigned\", event: \"task.assigned\" },\n \"accept\": { from: [\"assigned\"], to: \"accepted\", event: \"task.accepted\" },\n \"start_travel\": { from: [\"accepted\"], to: \"en_route\", event: \"task.en_route\" },\n \"arrive\": { from: [\"en_route\"], to: \"in_progress\", event: \"task.started\" },\n \"submit_proof\": { from: [\"in_progress\"], to: \"proof_pending\", event: \"task.proof_submitted\" },\n \"approve_proof\": { from: [\"proof_pending\"], to: \"completed\", event: \"task.completed\" },\n \"reject_proof\": { from: [\"proof_pending\"], to: \"in_progress\", event: \"task.proof_rejected\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_field_service_task (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_field_service_task_commands (\n aggregate_id text NOT NULL REFERENCES journey_field_service_task(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_field_service_task_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"field-service-task\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"field-service-task\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile task identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_task\",\n \"aggregateId\": \"fixture-field-service-task-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_field-service-task_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=field-service-task&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=field-service-task&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=field-service-task&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=field-service-task&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=field-service-task&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 8 reviewed transitions are implemented with actor and source-state checks.", "All 8 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Field Service Console capstone passes 6 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/field-service-task/workshop", "apiPath": "/api/journey-workshops?journey=field-service-task", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Connected fleet trip - Identity: `journey-workshop:connected-fleet-trip` - Canonical: https://developer.mappls.com/journeys/connected-fleet-trip/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "connected-fleet-trip", "journeySlug": "connected-fleet-trip", "title": "Build Connected fleet trip", "summary": "An eight-lab, source-bounded workshop for the complete trip lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip", "actorCount": 4, "stateCount": 6, "transitionCount": 7, "eventCount": 7, "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" ], "relatedTutorialSlugs": [], "sample": { "slug": "delivery-control-tower", "name": "Delivery Control Tower", "downloadPath": "/downloads/delivery-control-tower.zip", "checksumPath": "/downloads/delivery-control-tower.zip.sha256", "verifiedTestCount": 7, "runCommand": "npm test --workspace @mappls-example/delivery-control-tower" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the trip blueprint into an explicit aggregate boundary owned by the application.", "build": [ "planned: Stops, service window, asset, driver, and business identifiers are fixed enough to create the trip.", "ready: The trip and assigned device are provisioned, entitled, and emitting sufficiently fresh location.", "active: Positions, events, progress, ETA, and exception state are continuously observed.", "exception: A deviation, delay, device gap, geofence, or safety event requires operator attention.", "closing: Arrival is plausible but late events, final proof, and device state are still being reconciled.", "closed: The provider trip and internal aggregate are closed with a final trace, metrics, and exception record." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_trip by Fleet planner: new aggregate → planned; emit trip.created.", "confirm_device_ready by Telematics service: planned → ready; emit trip.ready.", "start_trip by Driver: ready → active; emit trip.started.", "raise_exception by Telematics service: active | exception → exception; emit trip.exception_raised.", "resolve_exception by Operations controller: exception → active; emit trip.exception_resolved.", "request_close by Driver: active | exception → closing; emit trip.close_requested.", "close_trip by Telematics service: closing → closed; emit trip.closed." ], "prove": [ "create_trip resolves to connected-fleet-trip-trip-created without claiming a provider webhook payload.", "confirm_device_ready resolves to connected-fleet-trip-trip-ready without claiming a provider webhook payload.", "start_trip resolves to connected-fleet-trip-trip-started without claiming a provider webhook payload.", "raise_exception resolves to connected-fleet-trip-trip-exception-raised without claiming a provider webhook payload.", "resolve_exception resolves to connected-fleet-trip-trip-exception-resolved without claiming a provider webhook payload.", "request_close resolves to connected-fleet-trip-trip-close-requested without claiming a provider webhook payload.", "close_trip resolves to connected-fleet-trip-trip-closed without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Trip aggregate: Current operational state and identity mapping. Keys: tripId, externalId, providerTripId, deviceId, state, version.", "Telemetry envelope: Immutable position and vehicle observation. Keys: sourceEventId, deviceId, eventTime, receivedTime, position, quality.", "Exception case: Operator-owned acknowledgement and resolution workflow. Keys: caseId, rule, severity, owner, status, sourceEventIds.", "Trip revision: Recomputed summary when bounded late data arrives. Keys: tripId, revision, inputWatermark, metrics, generatedAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "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." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Telemetry arrives late or out of order: detect with Event time is behind the trip watermark or its sequence creates a gap. Recover with Store raw input, recompute the bounded affected window, and publish a new derived revision.", "Device stops reporting: detect with Freshness exceeds the vehicle-specific health threshold. Recover with Raise a connection exception, show last-known time explicitly, and avoid extrapolating authoritative position.", "Close succeeds remotely but the response is lost: detect with Internal trip remains closing while provider detail reports closed. Recover with Reconciliation closes the internal aggregate with the original command identity.", "Driver or vehicle assignment changes mid-trip: detect with A control-plane version differs from the assignment captured at trip start. Recover with Use an explicit transfer transition and retain both assignment intervals." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Delivery Control Tower capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (7 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "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" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"planned\" | \"ready\" | \"active\" | \"exception\" | \"closing\" | \"closed\";\ntype CommandName = \"create_trip\" | \"confirm_device_ready\" | \"start_trip\" | \"raise_exception\" | \"resolve_exception\" | \"request_close\" | \"close_trip\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_trip\": { from: [null], to: \"planned\", event: \"trip.created\" },\n \"confirm_device_ready\": { from: [\"planned\"], to: \"ready\", event: \"trip.ready\" },\n \"start_trip\": { from: [\"ready\"], to: \"active\", event: \"trip.started\" },\n \"raise_exception\": { from: [\"active\", \"exception\"], to: \"exception\", event: \"trip.exception_raised\" },\n \"resolve_exception\": { from: [\"exception\"], to: \"active\", event: \"trip.exception_resolved\" },\n \"request_close\": { from: [\"active\", \"exception\"], to: \"closing\", event: \"trip.close_requested\" },\n \"close_trip\": { from: [\"closing\"], to: \"closed\", event: \"trip.closed\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_connected_fleet_trip (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_connected_fleet_trip_commands (\n aggregate_id text NOT NULL REFERENCES journey_connected_fleet_trip(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_connected_fleet_trip_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"connected-fleet-trip\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"connected-fleet-trip\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile trip identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_trip\",\n \"aggregateId\": \"fixture-connected-fleet-trip-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_connected-fleet-trip_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=connected-fleet-trip&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=connected-fleet-trip&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=connected-fleet-trip&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=connected-fleet-trip&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=connected-fleet-trip&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 7 reviewed transitions are implemented with actor and source-state checks.", "All 7 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Delivery Control Tower capstone passes 7 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/connected-fleet-trip/workshop", "apiPath": "/api/journey-workshops?journey=connected-fleet-trip", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Fleet geofence exception - Identity: `journey-workshop:fleet-geofence-exception` - Canonical: https://developer.mappls.com/journeys/fleet-geofence-exception/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "fleet-geofence-exception", "journeySlug": "fleet-geofence-exception", "title": "Build Fleet geofence exception", "summary": "An eight-lab, source-bounded workshop for the complete geofence case lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "geofence case", "actorCount": 4, "stateCount": 6, "transitionCount": 5, "eventCount": 5, "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" ], "relatedTutorialSlugs": [], "sample": { "slug": "fleet-geofence", "name": "Fleet Geofence Monitor", "downloadPath": "/downloads/fleet-geofence.zip", "checksumPath": "/downloads/fleet-geofence.zip.sha256", "verifiedTestCount": 7, "runCommand": "npm test --workspace @mappls-example/fleet-geofence" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the geofence case blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: Geometry, rule semantics, asset scope, schedule, and notification policy are being validated.", "active: The versioned zone is deployed and evaluated against an explicit asset and schedule scope.", "breached: A debounced enter, exit, dwell, or prohibited-presence event created an operational case.", "acknowledged: A named operator owns investigation, severity, and response deadline.", "resolved: The outcome and evidence are recorded without erasing the initiating activity.", "retired: The zone no longer generates new cases but historical activities remain queryable." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "publish_geofence by Fleet administrator: draft → active; emit geofence.published.", "record_breach by Telematics service: active | breached → breached; emit geofence.breached.", "acknowledge_case by Operations controller: breached → acknowledged; emit geofence_case.acknowledged.", "resolve_case by Operations controller: acknowledged → resolved; emit geofence_case.resolved.", "retire_geofence by Fleet administrator: draft | active → retired; emit geofence.retired." ], "prove": [ "publish_geofence resolves to fleet-geofence-exception-geofence-published without claiming a provider webhook payload.", "record_breach resolves to fleet-geofence-exception-geofence-breached without claiming a provider webhook payload.", "acknowledge_case resolves to fleet-geofence-exception-geofence-case-acknowledged without claiming a provider webhook payload.", "resolve_case resolves to fleet-geofence-exception-geofence-case-resolved without claiming a provider webhook payload.", "retire_geofence resolves to fleet-geofence-exception-geofence-retired without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Geofence definition: Versioned geometry, schedule, assets, and rule policy. Keys: ruleId, version, providerId, geometryHash, assetScope, status.", "Source activity: Immutable enter, exit, dwell, or presence evidence. Keys: activityId, ruleVersion, deviceId, eventTime, position.", "Exception case: Human ownership, SLA, disposition, and notification state. Keys: caseId, activityIds, severity, owner, status, resolution." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "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." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "GPS jitter creates repeated boundary crossings: detect with Alternating activities occur inside the configured hysteresis time and distance. Recover with Debounce into one case while retaining raw activities for review.", "Rule update races with incoming activity: detect with The activity cites an earlier provider or internal definition version. Recover with Evaluate and display it under the cited version; never reinterpret history silently.", "Provider deletion times out: detect with Internal retirement is pending and provider reconciliation is unknown. Recover with Retry the same delete identity and keep the rule visibly retiring until confirmed.", "Notification delivery fails: detect with The case exists but the notification outbox remains pending. Recover with Retry independently and escalate by age; do not create another case." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Fleet Geofence Monitor capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (7 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "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" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"active\" | \"breached\" | \"acknowledged\" | \"resolved\" | \"retired\";\ntype CommandName = \"publish_geofence\" | \"record_breach\" | \"acknowledge_case\" | \"resolve_case\" | \"retire_geofence\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"publish_geofence\": { from: [\"draft\"], to: \"active\", event: \"geofence.published\" },\n \"record_breach\": { from: [\"active\", \"breached\"], to: \"breached\", event: \"geofence.breached\" },\n \"acknowledge_case\": { from: [\"breached\"], to: \"acknowledged\", event: \"geofence_case.acknowledged\" },\n \"resolve_case\": { from: [\"acknowledged\"], to: \"resolved\", event: \"geofence_case.resolved\" },\n \"retire_geofence\": { from: [\"draft\", \"active\"], to: \"retired\", event: \"geofence.retired\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_fleet_geofence_exception (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_fleet_geofence_exception_commands (\n aggregate_id text NOT NULL REFERENCES journey_fleet_geofence_exception(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_fleet_geofence_exception_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"fleet-geofence-exception\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"fleet-geofence-exception\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile geofencecase identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"publish_geofence\",\n \"aggregateId\": \"fixture-fleet-geofence-exception-001\",\n \"expectedVersion\": 1,\n \"idempotencyKey\": \"cmd_fleet-geofence-exception_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=fleet-geofence-exception&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=fleet-geofence-exception&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=fleet-geofence-exception&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=fleet-geofence-exception&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=fleet-geofence-exception&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 5 reviewed transitions are implemented with actor and source-state checks.", "All 5 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Fleet Geofence Monitor capstone passes 7 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/fleet-geofence-exception/workshop", "apiPath": "/api/journey-workshops?journey=fleet-geofence-exception", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Coordinated incident response - Identity: `journey-workshop:emergency-incident-response` - Canonical: https://developer.mappls.com/journeys/emergency-incident-response/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "emergency-incident-response", "journeySlug": "emergency-incident-response", "title": "Build Coordinated incident response", "summary": "An eight-lab, source-bounded workshop for the complete incident lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident", "actorCount": 5, "stateCount": 7, "transitionCount": 8, "eventCount": 8, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "relatedTutorialSlugs": [], "sample": { "slug": "incident-dispatch", "name": "Incident Dispatch", "downloadPath": "/downloads/incident-dispatch.zip", "checksumPath": "/downloads/incident-dispatch.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/incident-dispatch" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the incident blueprint into an explicit aggregate boundary owned by the application.", "build": [ "reported: A stable CAD or operations identifier, incident type, severity, caller reference, required capability, and location intent are recorded.", "located: A provider-backed Mappls identity, coordinate, formatted address, confidence, and resolution method are committed.", "dispatched: A capable available unit is selected with matrix ETA, route identity, constraints, and attributable rationale.", "en_route: The assigned unit accepted and current event-time telemetry drives route progress and ETA.", "on_scene: Distance, speed, and dwell policy establish arrival; scene hazards and coordination remain active.", "resolved: Outcome, responsible responder, and external evidence references are committed.", "reviewed: A commander signs off the replay, disposition, response timings, telemetry count, hazards, and evidence completeness." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "report_incident by Call taker: new aggregate → reported; emit incident.reported.", "resolve_location by Dispatcher: reported → located; emit incident.located.", "dispatch by Dispatcher: located → dispatched; emit incident.dispatched.", "accept_dispatch by Responder: dispatched → en_route; emit dispatch.accepted.", "record_position by Telematics service: en_route → en_route; emit unit.position_recorded.", "confirm_arrival by Responder: en_route → on_scene; emit incident.arrived.", "resolve by Responder: on_scene → resolved; emit incident.resolved.", "review by Incident commander: resolved → reviewed; emit incident.reviewed." ], "prove": [ "report_incident resolves to emergency-incident-response-incident-reported without claiming a provider webhook payload.", "resolve_location resolves to emergency-incident-response-incident-located without claiming a provider webhook payload.", "dispatch resolves to emergency-incident-response-incident-dispatched without claiming a provider webhook payload.", "accept_dispatch resolves to emergency-incident-response-dispatch-accepted without claiming a provider webhook payload.", "record_position resolves to emergency-incident-response-unit-position-recorded without claiming a provider webhook payload.", "confirm_arrival resolves to emergency-incident-response-incident-arrived without claiming a provider webhook payload.", "resolve resolves to emergency-incident-response-incident-resolved without claiming a provider webhook payload.", "review resolves to emergency-incident-response-incident-reviewed without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Incident aggregate: Business identity, lifecycle, location, assignment, hazards, outcome, and review. Keys: incidentId, externalIncidentId, state, version, severity, requiredCapability.", "Location decision: Provider-backed location and human confirmation evidence. Keys: mapplsPin, coordinate, formattedAddress, method, confidence.", "Assignment decision: Capability, availability, matrix, route, constraints, and selection rationale. Keys: unitId, routeId, capabilities, eta, selectedBy, reason.", "Telemetry envelope: Immutable responder position and vehicle evidence. Keys: providerEventId, unitId, eventTime, receivedTime, position, quality.", "Review record: Attributable disposition and metrics derived from committed events. Keys: reviewer, disposition, timings, positionCount, hazardCount." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "One external report maps to one incident aggregate.", "Only available units with the required capability are eligible for ranking.", "A unit is assigned to at most one active incident in the same operational context.", "Only the assigned unit can accept dispatch and publish operational telemetry.", "Raw telemetry preserves event and receipt time; late evidence never regresses latest state.", "Arrival requires explicit distance, speed, and dwell evidence.", "Resolution cannot occur without external evidence references." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Caller location is ambiguous: detect with Search candidates are low-confidence, far apart, or conflict with caller/device context. Recover with Keep the report unresolved, ask a targeted confirmation question, and record the chosen candidate and reason.", "Two dispatchers select the same unit: detect with Unit reservation or incident expected version conflicts. Recover with Return the current assignments and require an intentional new selection from refreshed availability.", "Telemetry is late or out of order: detect with Event time is behind the incident position watermark. Recover with Store it, emit a late-evidence event, and do not replace latest route progress.", "Route becomes unsafe after dispatch: detect with A new hazard, closure, or restriction intersects the current route or approach policy. Recover with Record the hazard, calculate a versioned replacement route, and keep the last safe guidance until accepted.", "Resolution side effects fail: detect with Incident is resolved while notification or downstream outbox entries remain pending. Recover with Retry the outbox independently; never re-resolve the incident to trigger delivery." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Incident Dispatch capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Report-to-location and call-to-dispatch time", "Eligible responder count and rejected capability reasons", "Matrix ranking, selected unit, override, and route latency", "Telemetry freshness, ordering lag, and route revision", "Hazard age and approach-policy changes", "Arrival evidence pass/fail and override rate", "Scene-to-resolution time and evidence completeness", "Outbox backlog and review completion" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"reported\" | \"located\" | \"dispatched\" | \"en_route\" | \"on_scene\" | \"resolved\" | \"reviewed\";\ntype CommandName = \"report_incident\" | \"resolve_location\" | \"dispatch\" | \"accept_dispatch\" | \"record_position\" | \"confirm_arrival\" | \"resolve\" | \"review\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"report_incident\": { from: [null], to: \"reported\", event: \"incident.reported\" },\n \"resolve_location\": { from: [\"reported\"], to: \"located\", event: \"incident.located\" },\n \"dispatch\": { from: [\"located\"], to: \"dispatched\", event: \"incident.dispatched\" },\n \"accept_dispatch\": { from: [\"dispatched\"], to: \"en_route\", event: \"dispatch.accepted\" },\n \"record_position\": { from: [\"en_route\"], to: \"en_route\", event: \"unit.position_recorded\" },\n \"confirm_arrival\": { from: [\"en_route\"], to: \"on_scene\", event: \"incident.arrived\" },\n \"resolve\": { from: [\"on_scene\"], to: \"resolved\", event: \"incident.resolved\" },\n \"review\": { from: [\"resolved\"], to: \"reviewed\", event: \"incident.reviewed\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_emergency_incident_response (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_emergency_incident_response_commands (\n aggregate_id text NOT NULL REFERENCES journey_emergency_incident_response(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_emergency_incident_response_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"emergency-incident-response\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"emergency-incident-response\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile incident identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"report_incident\",\n \"aggregateId\": \"fixture-emergency-incident-response-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_emergency-incident-response_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=emergency-incident-response&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=emergency-incident-response&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=emergency-incident-response&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=emergency-incident-response&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=emergency-incident-response&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 8 reviewed transitions are implemented with actor and source-state checks.", "All 8 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Incident Dispatch capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/emergency-incident-response/workshop", "apiPath": "/api/journey-workshops?journey=emergency-incident-response", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Recoverable navigation session - Identity: `journey-workshop:navigation-session` - Canonical: https://developer.mappls.com/journeys/navigation-session/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "navigation-session", "journeySlug": "navigation-session", "title": "Build Recoverable navigation session", "summary": "An eight-lab, source-bounded workshop for the complete navigation session lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session", "actorCount": 4, "stateCount": 6, "transitionCount": 6, "eventCount": 6, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "trip-planner", "name": "Weekend Trip Planner", "downloadPath": "/downloads/trip-planner.zip", "checksumPath": "/downloads/trip-planner.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/trip-planner" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the navigation session blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: Origin, destination, stops, vehicle profile, and constraints are incomplete or editable.", "preview: Alternatives and trade-offs are visible but guidance and sensor use have not started.", "navigating: Guidance owns an active route and consumes position, progress, traffic, and user commands.", "rerouting: The active route is temporarily superseded by a recalculation caused by deviation, traffic, or destination change.", "arrived: Arrival policy passed and the application is waiting for confirmation or final trip actions.", "ended: Sensors, audio, observers, foreground services, and SDK session resources are released." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "calculate_route by Navigation application: draft | preview → preview; emit route.calculated.", "start_guidance by Driver: preview → navigating; emit navigation.started.", "request_reroute by Navigation application: navigating | rerouting → rerouting; emit reroute.requested.", "accept_reroute by Mappls navigation SDK: rerouting → navigating; emit route.updated.", "confirm_arrival by Navigation application: navigating → arrived; emit navigation.arrived.", "end_session by Driver: preview | navigating | rerouting | arrived → ended; emit navigation.ended." ], "prove": [ "calculate_route resolves to navigation-session-route-calculated without claiming a provider webhook payload.", "start_guidance resolves to navigation-session-navigation-started without claiming a provider webhook payload.", "request_reroute resolves to navigation-session-reroute-requested without claiming a provider webhook payload.", "accept_reroute resolves to navigation-session-route-updated without claiming a provider webhook payload.", "confirm_arrival resolves to navigation-session-navigation-arrived without claiming a provider webhook payload.", "end_session resolves to navigation-session-navigation-ended without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Route intent: Portable origin, stops, profile, constraints, and version. Keys: intentId, version, waypoints, profile, constraints.", "Session checkpoint: Minimal recoverable progress without persisting unsafe SDK internals. Keys: sessionId, intentVersion, routeId, legIndex, lastPositionTime.", "Navigation trace: Privacy-bounded operational and quality evidence. Keys: sessionId, eventType, occurredAt, routeVersion, quality." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "Only one guidance session owns foreground navigation resources at a time.", "Every route result is applied only to the intent version that requested it.", "The last valid route remains available while a reroute is pending.", "Arrival requires an explicit distance, speed, dwell, and stop policy.", "End releases every observer, sensor, audio, and service resource exactly once in effect." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Application process is killed: detect with A persisted active checkpoint exists without a live runtime owner. Recover with Recreate resources, validate destination intent, recalculate if stale, and ask before resuming guidance.", "GNSS quality degrades: detect with Accuracy, age, speed consistency, or map-matching confidence crosses policy. Recover with Surface degraded positioning, use supported dead-reckoning inputs, and avoid false reroutes.", "Reroute response arrives after destination changed: detect with Response intent version is older than the active intent. Recover with Discard it and keep the latest calculation; never apply by arrival order alone.", "Network disappears: detect with Online route, traffic, or search dependency fails while local guidance remains active. Recover with Keep last valid guidance, expose freshness, and use entitled offline capability when available." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Weekend Trip Planner capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Route calculation latency and alternative selection", "Position age, accuracy, and map-matching confidence", "Reroute cause, time, cancellation, and supersession", "Guidance session starts without matching cleanup", "Arrival false-positive and manual-override rate", "Crash/restart recovery outcome" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"preview\" | \"navigating\" | \"rerouting\" | \"arrived\" | \"ended\";\ntype CommandName = \"calculate_route\" | \"start_guidance\" | \"request_reroute\" | \"accept_reroute\" | \"confirm_arrival\" | \"end_session\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"calculate_route\": { from: [\"draft\", \"preview\"], to: \"preview\", event: \"route.calculated\" },\n \"start_guidance\": { from: [\"preview\"], to: \"navigating\", event: \"navigation.started\" },\n \"request_reroute\": { from: [\"navigating\", \"rerouting\"], to: \"rerouting\", event: \"reroute.requested\" },\n \"accept_reroute\": { from: [\"rerouting\"], to: \"navigating\", event: \"route.updated\" },\n \"confirm_arrival\": { from: [\"navigating\"], to: \"arrived\", event: \"navigation.arrived\" },\n \"end_session\": { from: [\"preview\", \"navigating\", \"rerouting\", \"arrived\"], to: \"ended\", event: \"navigation.ended\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_navigation_session (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_navigation_session_commands (\n aggregate_id text NOT NULL REFERENCES journey_navigation_session(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_navigation_session_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"navigation-session\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"navigation-session\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile navigationsession identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"calculate_route\",\n \"aggregateId\": \"fixture-navigation-session-001\",\n \"expectedVersion\": 1,\n \"idempotencyKey\": \"cmd_navigation-session_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=navigation-session&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=navigation-session&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=navigation-session&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=navigation-session&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=navigation-session&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 6 reviewed transitions are implemented with actor and source-state checks.", "All 6 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Weekend Trip Planner capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/navigation-session/workshop", "apiPath": "/api/journey-workshops?journey=navigation-session", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Governed spatial analysis - Identity: `journey-workshop:governed-spatial-analysis` - Canonical: https://developer.mappls.com/journeys/governed-spatial-analysis/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "governed-spatial-analysis", "journeySlug": "governed-spatial-analysis", "title": "Build Governed spatial analysis", "summary": "An eight-lab, source-bounded workshop for the complete analysis run lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run", "actorCount": 4, "stateCount": 7, "transitionCount": 6, "eventCount": 6, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "retail-site-lab", "name": "Retail Site Lab", "downloadPath": "/downloads/retail-site-lab.zip", "checksumPath": "/downloads/retail-site-lab.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/retail-site-lab" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the analysis run blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: Inputs, schema, coordinate system, ownership, and processing intent are declared but not accepted.", "validating: Format, schema, geometry, coordinate reference, limits, and policy are being checked.", "published: An immutable dataset version is queryable with explicit workspace access and lineage.", "processing: An analysis job references fixed input versions, parameters, runtime, and output ownership.", "ready: Outputs, quality metrics, logs, lineage, and visualization metadata are complete.", "shared: A governed audience can view or embed a selected output version under explicit policy.", "failed: Validation or processing stopped with typed, attributable diagnostics and retained inputs." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_dataset_version by Data engineer: new aggregate → draft; emit dataset.version_created.", "validate by Spatial analyst: draft → validating; emit dataset.validation_started.", "publish by Workspace administrator: validating → published; emit dataset.published.", "run_analysis by Spatial analyst: published | ready → processing; emit analysis.started.", "complete_analysis by Spatial processing service: processing → ready; emit analysis.completed.", "create_share by Workspace administrator: ready → shared; emit share.created." ], "prove": [ "create_dataset_version resolves to governed-spatial-analysis-dataset-version-created without claiming a provider webhook payload.", "validate resolves to governed-spatial-analysis-dataset-validation-started without claiming a provider webhook payload.", "publish resolves to governed-spatial-analysis-dataset-published without claiming a provider webhook payload.", "run_analysis resolves to governed-spatial-analysis-analysis-started without claiming a provider webhook payload.", "complete_analysis resolves to governed-spatial-analysis-analysis-completed without claiming a provider webhook payload.", "create_share resolves to governed-spatial-analysis-share-created without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Dataset version: Immutable source or derived spatial asset. Keys: datasetId, version, contentHash, crs, schema, owner.", "Analysis attempt: Reproducible execution and typed status. Keys: analysisId, attempt, inputs, parameters, runtime, status.", "Lineage manifest: Auditable graph from source versions to outputs and shares. Keys: outputVersion, inputVersions, operation, generatedAt, quality.", "Share policy: Audience, expiry, export, embedding, and revocation controls. Keys: shareId, resourceVersion, audience, permissions, expiresAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "Published input and output versions are immutable.", "Every output records exact input versions, parameters, runtime, and actor.", "Workspace authorization applies separately to source, job, output, visualization, and share.", "A retry is linked to its previous attempt and never overwrites it.", "Revoking a share does not destroy dataset or analysis lineage." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Upload is interrupted: detect with The client upload ID has incomplete acknowledged parts. Recover with Resume only missing parts and verify the final content hash before validation.", "Coordinate reference is missing or wrong: detect with Extent, geometry validity, or known control points conflict with the declaration. Recover with Fail validation with actionable diagnostics; require an explicit corrected version.", "Analysis worker dies: detect with Lease expires without a terminal attempt record. Recover with Resume from supported checkpoint or create a linked retry under the same analysis identity.", "Share is used after policy changes: detect with Resource policy version or expiry no longer authorizes the audience. Recover with Deny access immediately, record the decision, and require a newly authorized share." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Retail Site Lab capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Upload completeness, validation failures, and feature-level error rate", "Queue, execution, and total analysis time", "Input/output size and spatial operation cost", "Retry, cancellation, and orphaned-job rate", "Lineage completeness and reproducibility checks", "Share access, export, denial, expiry, and revocation" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"validating\" | \"published\" | \"processing\" | \"ready\" | \"shared\" | \"failed\";\ntype CommandName = \"create_dataset_version\" | \"validate\" | \"publish\" | \"run_analysis\" | \"complete_analysis\" | \"create_share\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_dataset_version\": { from: [null], to: \"draft\", event: \"dataset.version_created\" },\n \"validate\": { from: [\"draft\"], to: \"validating\", event: \"dataset.validation_started\" },\n \"publish\": { from: [\"validating\"], to: \"published\", event: \"dataset.published\" },\n \"run_analysis\": { from: [\"published\", \"ready\"], to: \"processing\", event: \"analysis.started\" },\n \"complete_analysis\": { from: [\"processing\"], to: \"ready\", event: \"analysis.completed\" },\n \"create_share\": { from: [\"ready\"], to: \"shared\", event: \"share.created\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_governed_spatial_analysis (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_governed_spatial_analysis_commands (\n aggregate_id text NOT NULL REFERENCES journey_governed_spatial_analysis(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_governed_spatial_analysis_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"governed-spatial-analysis\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"governed-spatial-analysis\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile analysisrun identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_dataset_version\",\n \"aggregateId\": \"fixture-governed-spatial-analysis-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_governed-spatial-analysis_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=governed-spatial-analysis&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=governed-spatial-analysis&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=governed-spatial-analysis&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=governed-spatial-analysis&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=governed-spatial-analysis&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 6 reviewed transitions are implemented with actor and source-state checks.", "All 6 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Retail Site Lab capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/governed-spatial-analysis/workshop", "apiPath": "/api/journey-workshops?journey=governed-spatial-analysis", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Durable multi-stop itinerary - Identity: `journey-workshop:durable-weekend-itinerary` - Canonical: https://developer.mappls.com/journeys/durable-weekend-itinerary/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "durable-weekend-itinerary", "journeySlug": "durable-weekend-itinerary", "title": "Build Durable multi-stop itinerary", "summary": "An eight-lab, source-bounded workshop for the complete trip itinerary lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary", "actorCount": 4, "stateCount": 6, "transitionCount": 9, "eventCount": 9, "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "relatedTutorialSlugs": [], "sample": { "slug": "trip-planner", "name": "Weekend Trip Planner", "downloadPath": "/downloads/trip-planner.zip", "checksumPath": "/downloads/trip-planner.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/trip-planner" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the trip itinerary blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: An ordered, bounded set of provider-backed places represents current trip intent without claiming a valid route.", "planned: A route revision is bound to the exact ordered stop identities, travel profile, provider response, and planning time.", "active: The traveller started the current route revision and each next stop receives an explicit visited or skipped outcome.", "paused: An attributable interruption stops progress without discarding saved stops, outcomes, or route identity.", "completed: Every stop is visited or explicitly skipped and the terminal itinerary, route revision, outcomes, and event history are retained.", "cancelled: A named actor ended the itinerary with a reason while retaining all committed place, route, and progress evidence." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_trip by Traveller: new aggregate → draft; emit trip.created.", "add_or_reorder_stop by Traveller: draft | planned → draft; emit trip.sequence_changed.", "preview_route by Mappls routing service: draft → planned; emit trip.route_previewed.", "start_trip by Traveller: planned → active; emit trip.started.", "pause_trip by Traveller: active → paused; emit trip.paused.", "resume_trip by Traveller: paused → active; emit trip.resumed.", "visit_or_skip_next by Traveller: active → active; emit trip.stop_completed.", "complete_trip by Traveller: active → completed; emit trip.completed.", "cancel_trip by Traveller: draft | planned | active | paused → cancelled; emit trip.cancelled." ], "prove": [ "create_trip resolves to durable-weekend-itinerary-trip-created without claiming a provider webhook payload.", "add_or_reorder_stop resolves to durable-weekend-itinerary-trip-sequence-changed without claiming a provider webhook payload.", "preview_route resolves to durable-weekend-itinerary-trip-route-previewed without claiming a provider webhook payload.", "start_trip resolves to durable-weekend-itinerary-trip-started without claiming a provider webhook payload.", "pause_trip resolves to durable-weekend-itinerary-trip-paused without claiming a provider webhook payload.", "resume_trip resolves to durable-weekend-itinerary-trip-resumed without claiming a provider webhook payload.", "visit_or_skip_next resolves to durable-weekend-itinerary-trip-stop-completed without claiming a provider webhook payload.", "complete_trip resolves to durable-weekend-itinerary-trip-completed without claiming a provider webhook payload.", "cancel_trip resolves to durable-weekend-itinerary-trip-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Trip aggregate: Business identity, date, party, lifecycle, current route revision, and optimistic version. Keys: tripId, state, version, date, partySize, routeRevision.", "Itinerary stop: Ordered provider-backed place and progress outcome. Keys: mapplsPin, position, providerProvenance, status, completedAt, skipReason.", "Route revision: Immutable preview for one exact intent version. Keys: routeId, revision, orderedPins, profile, legs, distance, duration, plannedAt.", "Audit and outbox: Attributable changes and reliable downstream collaboration or notification. Keys: eventId, aggregateVersion, actor, commandId, outboxStatus." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "Every saved stop originated from provider-backed discovery and retains its Mappls Pin and provenance.", "A Mappls Pin occurs at most once in an itinerary.", "A route revision is valid only for the exact ordered stop list and constraints that produced it.", "Only the next pending stop may receive a visit or skip outcome.", "Completion is impossible while any stop remains pending.", "Commands are idempotent and compare the expected trip version." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "A collaborator edits after route preview: detect with Current stop identities or aggregate version differ from the route's intent version. Recover with Invalidate the route, show the edit, and require a new preview before start.", "Routing succeeds but response is lost: detect with The same ordered intent and request identity has no committed route revision. Recover with Reconcile or repeat the same idempotent request; never attach a response to newer intent.", "A venue becomes unavailable during the trip: detect with Traveller or fresh provider/business data marks the next stop unavailable. Recover with Record an explicit skip with reason, then offer a newly versioned replan from current context.", "Application restarts mid-trip: detect with A durable active aggregate exists without current client state. Recover with Restore visit/skip progress and current revision, refresh stale operational data, and ask before resuming guidance." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Weekend Trip Planner capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Discovery-to-save rate and Mappls Pin continuity", "Stop edits, duplicates, limits, and version conflicts", "Route preview latency, failures, profiles, and revisions", "Time from preview to start and stale-preview invalidation", "Visited and skipped stops with reason", "Active trips without recent progress", "Idempotent replay, outbox backlog, and restart recovery" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"planned\" | \"active\" | \"paused\" | \"completed\" | \"cancelled\";\ntype CommandName = \"create_trip\" | \"add_or_reorder_stop\" | \"preview_route\" | \"start_trip\" | \"pause_trip\" | \"resume_trip\" | \"visit_or_skip_next\" | \"complete_trip\" | \"cancel_trip\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_trip\": { from: [null], to: \"draft\", event: \"trip.created\" },\n \"add_or_reorder_stop\": { from: [\"draft\", \"planned\"], to: \"draft\", event: \"trip.sequence_changed\" },\n \"preview_route\": { from: [\"draft\"], to: \"planned\", event: \"trip.route_previewed\" },\n \"start_trip\": { from: [\"planned\"], to: \"active\", event: \"trip.started\" },\n \"pause_trip\": { from: [\"active\"], to: \"paused\", event: \"trip.paused\" },\n \"resume_trip\": { from: [\"paused\"], to: \"active\", event: \"trip.resumed\" },\n \"visit_or_skip_next\": { from: [\"active\"], to: \"active\", event: \"trip.stop_completed\" },\n \"complete_trip\": { from: [\"active\"], to: \"completed\", event: \"trip.completed\" },\n \"cancel_trip\": { from: [\"draft\", \"planned\", \"active\", \"paused\"], to: \"cancelled\", event: \"trip.cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_durable_weekend_itinerary (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_durable_weekend_itinerary_commands (\n aggregate_id text NOT NULL REFERENCES journey_durable_weekend_itinerary(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_durable_weekend_itinerary_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"durable-weekend-itinerary\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"durable-weekend-itinerary\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile tripitinerary identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_trip\",\n \"aggregateId\": \"fixture-durable-weekend-itinerary-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_durable-weekend-itinerary_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=durable-weekend-itinerary&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=durable-weekend-itinerary&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=durable-weekend-itinerary&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=durable-weekend-itinerary&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=durable-weekend-itinerary&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 9 reviewed transitions are implemented with actor and source-state checks.", "All 9 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Weekend Trip Planner capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/durable-weekend-itinerary/workshop", "apiPath": "/api/journey-workshops?journey=durable-weekend-itinerary", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Consented address verification - Identity: `journey-workshop:consented-address-verification` - Canonical: https://developer.mappls.com/journeys/consented-address-verification/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "consented-address-verification", "journeySlug": "consented-address-verification", "title": "Build Consented address verification", "summary": "An eight-lab, source-bounded workshop for the complete address verification lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification", "actorCount": 5, "stateCount": 9, "transitionCount": 11, "eventCount": 9, "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "relatedTutorialSlugs": [], "sample": { "slug": "address-verifier", "name": "Address Verifier", "downloadPath": "/downloads/address-verifier.zip", "checksumPath": "/downloads/address-verifier.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/address-verifier" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the address verification blueprint into an explicit aggregate boundary owned by the application.", "build": [ "entered: One external business reference, opaque subject reference, declared purpose, and raw address intent are recorded.", "normalized: The declared address maps to a provider-backed Mappls Pin, coordinate, components, confidence, and provenance.", "capture_authorized: A specific subject granted one purpose-bound, expiring, accuracy- and retention-governed evidence capture.", "evidence_captured: Immutable source identity, event and receipt time, coordinate, accuracy, provider context, and integrity hash are committed.", "compared: A versioned policy records distance, effective uncertainty, thresholds, and its verify, reject, or review recommendation.", "review_required: Weak, conflicting, or policy-sensitive evidence is assigned to an attributable human decision.", "verified: A policy or human decision accepted the declared address for the exact recorded purpose.", "rejected: Evidence did not establish the declared address, with reason, recommendation, actor, and appeal path retained.", "cancelled: Consent was withdrawn before evidence capture and no precise observation may be accepted." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "enter_verification by Application user: new aggregate → entered; emit address_verification.entered.", "normalize_address by Policy service: entered → normalized; emit address_verification.normalized.", "authorize_capture by Application user: normalized → capture_authorized; emit address_verification.capture_authorized.", "revoke_consent by Application user: capture_authorized → cancelled; emit address_verification.consent_revoked.", "capture_evidence by Evidence capture application: capture_authorized → evidence_captured; emit address_verification.evidence_captured.", "compare by Policy service: evidence_captured → compared; emit address_verification.compared.", "verify by Policy service: compared → verified; emit address_verification.verified.", "reject by Policy service: compared → rejected; emit address_verification.rejected.", "defer by Policy service: compared → review_required; emit address_verification.review_required.", "review_verify by Human reviewer: review_required → verified; emit address_verification.verified.", "review_reject by Human reviewer: review_required → rejected; emit address_verification.rejected." ], "prove": [ "enter_verification resolves to consented-address-verification-address-verification-entered without claiming a provider webhook payload.", "normalize_address resolves to consented-address-verification-address-verification-normalized without claiming a provider webhook payload.", "authorize_capture resolves to consented-address-verification-address-verification-capture-authorized without claiming a provider webhook payload.", "revoke_consent resolves to consented-address-verification-address-verification-consent-revoked without claiming a provider webhook payload.", "capture_evidence resolves to consented-address-verification-address-verification-evidence-captured without claiming a provider webhook payload.", "compare resolves to consented-address-verification-address-verification-compared without claiming a provider webhook payload.", "verify resolves to consented-address-verification-address-verification-verified without claiming a provider webhook payload.", "reject resolves to consented-address-verification-address-verification-rejected without claiming a provider webhook payload.", "defer resolves to consented-address-verification-address-verification-review-required without claiming a provider webhook payload.", "review_verify resolves to consented-address-verification-address-verification-verified without claiming a provider webhook payload.", "review_reject resolves to consented-address-verification-address-verification-rejected without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Verification aggregate: Business identity, purpose, lifecycle, selected evidence, comparison, decision, and version. Keys: verificationId, externalReference, subjectReference, purpose, state, version.", "Normalized address: Provider-backed place identity and address interpretation. Keys: mapplsPin, coordinate, formattedAddress, components, confidence, provenance.", "Consent grant: Attributable authority and privacy bounds for precise capture. Keys: consentId, subject, purpose, textVersion, grantedAt, expiresAt, retentionUntil, status.", "Evidence envelope: Immutable device observation with quality, timing, provenance, and integrity identity. Keys: evidenceId, sourceEventId, eventTime, receivedAt, coordinate, accuracy, contentHash.", "Decision record: Explainable recommendation, human disposition, override, and appeal context. Keys: policyVersion, thresholds, recommendation, outcome, actor, reason." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "One external business reference maps to one verification aggregate.", "Precise evidence is accepted only under active consent for the exact declared purpose and time window.", "Provider normalization and application policy are identified separately.", "An automated actor cannot override its own policy recommendation.", "Every terminal outcome retains evidence hash, policy version, actor, and attributable reason.", "Precise evidence can be redacted without erasing the audit trail or claiming that retained hashes can reconstruct it." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Capture arrives after consent expiry or withdrawal: detect with Receipt or evidence event falls outside the committed grant window or grant status is revoked. Recover with Reject it without retaining precise payload and require a fresh consent for another attempt.", "Device evidence is replayed: detect with Source-event identity or content hash already belongs to an accepted evidence envelope. Recover with Return the original result for an idempotent retry or reject conflicting reuse as a security event.", "Address candidate is ambiguous or evidence accuracy is weak: detect with Provider confidence, device accuracy, separation, or policy combination enters the review band. Recover with Request clarification or independent review; do not transform uncertainty into a definitive match.", "Retention deadline passes: detect with Precise evidence remains present beyond purpose, tenant, or jurisdiction policy. Recover with Redact coordinate and place payloads, retain the minimum decision and integrity record, and audit completion." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Address Verifier capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Normalization confidence, ambiguity, latency, and provider failures", "Consent grant, expiry, withdrawal, and out-of-window capture attempts", "Evidence accuracy, age, source integrity, replay, and mock-location risk", "Distance and recommendation distribution by versioned policy", "Review queue age, outcome, override rate, and supporting-evidence class", "False-match, false-reject, correction, and appeal outcomes", "Precise-data access, export, retention expiry, redaction, and legal hold", "Idempotency conflicts, version conflicts, outbox backlog, and restart recovery" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"entered\" | \"normalized\" | \"capture_authorized\" | \"evidence_captured\" | \"compared\" | \"review_required\" | \"verified\" | \"rejected\" | \"cancelled\";\ntype CommandName = \"enter_verification\" | \"normalize_address\" | \"authorize_capture\" | \"revoke_consent\" | \"capture_evidence\" | \"compare\" | \"verify\" | \"reject\" | \"defer\" | \"review_verify\" | \"review_reject\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"enter_verification\": { from: [null], to: \"entered\", event: \"address_verification.entered\" },\n \"normalize_address\": { from: [\"entered\"], to: \"normalized\", event: \"address_verification.normalized\" },\n \"authorize_capture\": { from: [\"normalized\"], to: \"capture_authorized\", event: \"address_verification.capture_authorized\" },\n \"revoke_consent\": { from: [\"capture_authorized\"], to: \"cancelled\", event: \"address_verification.consent_revoked\" },\n \"capture_evidence\": { from: [\"capture_authorized\"], to: \"evidence_captured\", event: \"address_verification.evidence_captured\" },\n \"compare\": { from: [\"evidence_captured\"], to: \"compared\", event: \"address_verification.compared\" },\n \"verify\": { from: [\"compared\"], to: \"verified\", event: \"address_verification.verified\" },\n \"reject\": { from: [\"compared\"], to: \"rejected\", event: \"address_verification.rejected\" },\n \"defer\": { from: [\"compared\"], to: \"review_required\", event: \"address_verification.review_required\" },\n \"review_verify\": { from: [\"review_required\"], to: \"verified\", event: \"address_verification.verified\" },\n \"review_reject\": { from: [\"review_required\"], to: \"rejected\", event: \"address_verification.rejected\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_consented_address_verification (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_consented_address_verification_commands (\n aggregate_id text NOT NULL REFERENCES journey_consented_address_verification(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_consented_address_verification_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"consented-address-verification\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"consented-address-verification\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile addressverification identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"enter_verification\",\n \"aggregateId\": \"fixture-consented-address-verification-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_consented-address-verification_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=consented-address-verification&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=consented-address-verification&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=consented-address-verification&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=consented-address-verification&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=consented-address-verification&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 11 reviewed transitions are implemented with actor and source-state checks.", "All 9 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Address Verifier capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/consented-address-verification/workshop", "apiPath": "/api/journey-workshops?journey=consented-address-verification", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Governed spatial agent run - Identity: `journey-workshop:governed-spatial-agent-run` - Canonical: https://developer.mappls.com/journeys/governed-spatial-agent-run/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "governed-spatial-agent-run", "journeySlug": "governed-spatial-agent-run", "title": "Build Governed spatial agent run", "summary": "An eight-lab, source-bounded workshop for the complete agent run lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run", "actorCount": 5, "stateCount": 7, "transitionCount": 6, "eventCount": 6, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "relatedTutorialSlugs": [], "sample": { "slug": "spatial-agent", "name": "Spatial Operations Agent", "downloadPath": "/downloads/spatial-agent.zip", "checksumPath": "/downloads/spatial-agent.zip.sha256", "verifiedTestCount": 15, "runCommand": "npm test --workspace @mappls-example/spatial-agent" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the agent run blueprint into an explicit aggregate boundary owned by the application.", "build": [ "asked: A stable run records the user's objective, scenario, actor, tenant, purpose, and bounded inputs before any provider access.", "planned: A schema-valid allow-listed dependency graph, risk class, scopes, argument bounds, and canonical plan hash are available for inspection.", "approved: An attributable person approved the exact plan hash, every required scope, purpose, data boundary, policy version, and expiry.", "executing: A service-side lease owns execution and calls each Mappls tool only after dependencies and authorization are satisfied.", "completed: The grounded answer, structured outputs, exact tool evidence, provenance, citations, cost, and terminal audit event are committed.", "rejected: A named approver denied the proposed plan with an attributable reason and no provider calls occurred.", "failed: Execution stopped with a typed, secret-safe error and retained evidence for every completed step." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "ask by Application user: new aggregate → asked; emit agent.question_received.", "create_plan by Agent planner: asked → planned; emit agent.plan_created.", "approve_plan by Human approver: planned → approved; emit agent.plan_approved.", "reject_plan by Human approver: planned → rejected; emit agent.plan_rejected.", "start_execution by Execution service: approved → executing; emit agent.execution_started.", "complete_execution by Execution service: executing → completed; emit agent.execution_completed." ], "prove": [ "ask resolves to governed-spatial-agent-run-agent-question-received without claiming a provider webhook payload.", "create_plan resolves to governed-spatial-agent-run-agent-plan-created without claiming a provider webhook payload.", "approve_plan resolves to governed-spatial-agent-run-agent-plan-approved without claiming a provider webhook payload.", "reject_plan resolves to governed-spatial-agent-run-agent-plan-rejected without claiming a provider webhook payload.", "start_execution resolves to governed-spatial-agent-run-agent-execution-started without claiming a provider webhook payload.", "complete_execution resolves to governed-spatial-agent-run-agent-execution-completed without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Agent run: Durable objective, lifecycle, version, risk, actor, tenant, and purpose boundary. Keys: runId, state, version, tenantId, question, risk.", "Plan manifest: Canonical tool graph, dependencies, arguments, requested scopes, and integrity identity. Keys: planVersion, planHash, plannerVersion, steps, requiredScopes, policyVersion.", "Approval grant: Independent attributable authority for one exact plan and bounded time window. Keys: planHash, approvedBy, approvedScopes, purpose, approvedAt, expiresAt.", "Tool evidence: Resolved arguments, structured response, provider provenance, status, timing, and stable request identity. Keys: toolCallId, stepId, tool, requestId, provenance, completedAt.", "Grounded result: Answer and machine-readable outputs with per-step citations and inference labels. Keys: runId, answer, citations, generatedAt, modelVersion." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "The model never receives Mappls or customer credentials.", "Only schema-valid allow-listed tools and bounded arguments can enter a plan.", "Approval names the canonical immutable plan hash and every required scope.", "An expired, superseded, partially scoped, or self-approved plan cannot execute.", "Every factual provider claim is traceable to retained Mappls provenance.", "Tool failures and persisted evidence never expose secrets." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Prompt or retrieved content asks for an unapproved tool: detect with The proposed tool, scope, host, or argument is absent from the validated plan policy. Recover with Reject the plan or stop execution and surface the exact policy denial for human review.", "Plan changes after approval: detect with Recomputed canonical hash differs from the approved plan hash. Recover with Refuse execution, append a tamper or supersession event, and require a new review.", "Provider call succeeds but the worker loses its response: detect with Execution lease expires with an ambiguous step and stable request identity. Recover with Reconcile by provider or application request identity before retrying, especially for side-effecting tools.", "Tool output lacks provenance or contains a secret: detect with Response-envelope validation or redaction policy fails. Recover with Quarantine the output, stop the run safely, rotate any exposed secret, and retain only a sanitized incident record." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Spatial Operations Agent capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (15 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Runs and time spent in asked, planned, approved, and executing states", "Approval, rejection, expiry, and scope-reduction rate by risk class", "Plan hash mismatch, policy denial, and prompt-injection detection", "Tool latency, quota, retry, reconciliation, and cost by operation", "Provider provenance and citation coverage", "Sensitive-location access by tenant, actor, purpose, and retention class", "Execution leases, orphaned attempts, outbox backlog, and restart recovery" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"asked\" | \"planned\" | \"approved\" | \"executing\" | \"completed\" | \"rejected\" | \"failed\";\ntype CommandName = \"ask\" | \"create_plan\" | \"approve_plan\" | \"reject_plan\" | \"start_execution\" | \"complete_execution\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"ask\": { from: [null], to: \"asked\", event: \"agent.question_received\" },\n \"create_plan\": { from: [\"asked\"], to: \"planned\", event: \"agent.plan_created\" },\n \"approve_plan\": { from: [\"planned\"], to: \"approved\", event: \"agent.plan_approved\" },\n \"reject_plan\": { from: [\"planned\"], to: \"rejected\", event: \"agent.plan_rejected\" },\n \"start_execution\": { from: [\"approved\"], to: \"executing\", event: \"agent.execution_started\" },\n \"complete_execution\": { from: [\"executing\"], to: \"completed\", event: \"agent.execution_completed\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_governed_spatial_agent_run (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_governed_spatial_agent_run_commands (\n aggregate_id text NOT NULL REFERENCES journey_governed_spatial_agent_run(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_governed_spatial_agent_run_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"governed-spatial-agent-run\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"governed-spatial-agent-run\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile agentrun identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"ask\",\n \"aggregateId\": \"fixture-governed-spatial-agent-run-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_governed-spatial-agent-run_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=governed-spatial-agent-run&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=governed-spatial-agent-run&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=governed-spatial-agent-run&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=governed-spatial-agent-run&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=governed-spatial-agent-run&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 6 reviewed transitions are implemented with actor and source-state checks.", "All 6 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Spatial Operations Agent capstone passes 15 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/governed-spatial-agent-run/workshop", "apiPath": "/api/journey-workshops?journey=governed-spatial-agent-run", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Offline automotive release - Identity: `journey-workshop:offline-automotive-release` - Canonical: https://developer.mappls.com/journeys/offline-automotive-release/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "offline-automotive-release", "journeySlug": "offline-automotive-release", "title": "Build Offline automotive release", "summary": "An eight-lab, source-bounded workshop for the complete device release lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release", "actorCount": 4, "stateCount": 7, "transitionCount": 7, "eventCount": 7, "sourceGuideSlugs": [], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "offline-release-control", "name": "Offline Release Control", "downloadPath": "/downloads/offline-release-control.zip", "checksumPath": "/downloads/offline-release-control.zip.sha256", "verifiedTestCount": 10, "runCommand": "npm test --workspace @mappls-example/offline-release-control" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the device release blueprint into an explicit aggregate boundary owned by the application.", "build": [ "manufactured: Hardware identity, target architecture, software edition, and vehicle configuration are recorded.", "activated: The device has a scoped entitlement and trusted activation identity.", "installed: A verified compatible runtime, configuration, voice set, and base map package are staged.", "operational: The active slot passed startup, route, search, positioning, audio, storage, and health checks.", "updating: A cohort release is downloading, verifying, staging, switching, and qualifying under a durable plan.", "recovering: Watchdog or health policy selected rollback, repair, or safe degraded operation.", "retired: Activation is revoked and the device no longer receives protected packages or service." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "register_device by Manufacturing system: new aggregate → manufactured; emit device.registered.", "activate by Fleet release manager: manufactured → activated; emit license.activated.", "stage_base_release by Vehicle runtime: activated → installed; emit release.installed.", "qualify by Vehicle runtime: installed | recovering → operational; emit release.qualified.", "start_update by Fleet release manager: operational → updating; emit release.update_started.", "rollback by Vehicle runtime: updating | operational → recovering; emit release.rollback_started.", "retire by Fleet release manager: manufactured | activated | installed | operational | recovering → retired; emit device.retired." ], "prove": [ "register_device resolves to offline-automotive-release-device-registered without claiming a provider webhook payload.", "activate resolves to offline-automotive-release-license-activated without claiming a provider webhook payload.", "stage_base_release resolves to offline-automotive-release-release-installed without claiming a provider webhook payload.", "qualify resolves to offline-automotive-release-release-qualified without claiming a provider webhook payload.", "start_update resolves to offline-automotive-release-release-update-started without claiming a provider webhook payload.", "rollback resolves to offline-automotive-release-release-rollback-started without claiming a provider webhook payload.", "retire resolves to offline-automotive-release-device-retired without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Device identity: Manufacturing, vehicle, activation, and hardware trust mapping. Keys: deviceId, hardwareId, vehicleId, edition, activationState.", "Release manifest: Signed compatibility unit for runtime, data, configuration, and assets. Keys: manifestId, digest, target, components, signature, compatibility.", "Update plan: Durable per-device progress through download, verify, stage, switch, and qualify. Keys: planId, campaignId, deviceId, targetManifest, phase, checkpoint.", "Health incident: Watchdog evidence, recovery action, and support context. Keys: incidentId, activeManifest, signal, action, outcome, occurredAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "Runtime, map data, configuration, and voice assets are qualified as one compatible manifest.", "Only a verified inactive slot may replace the active slot.", "Power loss at any update point leaves one bootable known-good slot.", "Activation identity and secrets are distinct from vehicle business identity.", "Retirement revokes protected access without erasing support and release history." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Power loss during update: detect with Boot control sees an incomplete plan and unchanged or unqualified target slot. Recover with Boot the known-good slot and resume or discard staging from the durable checkpoint.", "Runtime and map package are incompatible: detect with Manifest compatibility or startup qualification fails. Recover with Reject before activation and report exact component constraints.", "Activation cannot refresh while offline: detect with Entitlement is near expiry and network is unavailable. Recover with Apply the licensed offline grace policy visibly; never extend entitlement by changing device time.", "New release causes route or crash regression: detect with Cohort health breaches automated rollout thresholds. Recover with Halt the campaign, roll affected devices back, and retain incident-linked diagnostic bundles." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Offline Release Control capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (10 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Fleet distribution by active and target manifest", "Download, verification, switch, and qualification duration", "Interrupted and resumed update phase", "Activation refresh health and offline grace usage", "Crash, watchdog, routing, positioning, and storage health by cohort", "Rollback cause, success, and last-known-good age" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"manufactured\" | \"activated\" | \"installed\" | \"operational\" | \"updating\" | \"recovering\" | \"retired\";\ntype CommandName = \"register_device\" | \"activate\" | \"stage_base_release\" | \"qualify\" | \"start_update\" | \"rollback\" | \"retire\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"register_device\": { from: [null], to: \"manufactured\", event: \"device.registered\" },\n \"activate\": { from: [\"manufactured\"], to: \"activated\", event: \"license.activated\" },\n \"stage_base_release\": { from: [\"activated\"], to: \"installed\", event: \"release.installed\" },\n \"qualify\": { from: [\"installed\", \"recovering\"], to: \"operational\", event: \"release.qualified\" },\n \"start_update\": { from: [\"operational\"], to: \"updating\", event: \"release.update_started\" },\n \"rollback\": { from: [\"updating\", \"operational\"], to: \"recovering\", event: \"release.rollback_started\" },\n \"retire\": { from: [\"manufactured\", \"activated\", \"installed\", \"operational\", \"recovering\"], to: \"retired\", event: \"device.retired\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_offline_automotive_release (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_offline_automotive_release_commands (\n aggregate_id text NOT NULL REFERENCES journey_offline_automotive_release(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_offline_automotive_release_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"offline-automotive-release\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"offline-automotive-release\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile devicerelease identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"register_device\",\n \"aggregateId\": \"fixture-offline-automotive-release-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_offline-automotive-release_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=offline-automotive-release&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=offline-automotive-release&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=offline-automotive-release&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=offline-automotive-release&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=offline-automotive-release&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 7 reviewed transitions are implemented with actor and source-state checks.", "All 7 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Offline Release Control capstone passes 10 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/offline-automotive-release/workshop", "apiPath": "/api/journey-workshops?journey=offline-automotive-release", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Application-owned widget selection - Identity: `journey-workshop:widget-selection-session` - Canonical: https://developer.mappls.com/journeys/widget-selection-session/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "widget-selection-session", "journeySlug": "widget-selection-session", "title": "Build Application-owned widget selection", "summary": "An eight-lab, source-bounded workshop for the complete widget selection session lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session", "actorCount": 4, "stateCount": 7, "transitionCount": 8, "eventCount": 8, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "widget-journey-host", "name": "Widget Journey Host", "downloadPath": "/downloads/widget-journey-host.zip", "checksumPath": "/downloads/widget-journey-host.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/widget-journey-host" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the widget selection session blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: Host-owned address or place intent exists without an active provider surface or committed Mappls identity.", "widget_open: One launch generation owns the provider surface, lifecycle callbacks, focus, cancellation, and timeout.", "fallback_active: The provider surface is unavailable and a bounded manual or search-assisted host path remains operable.", "candidate_received: An exact-origin or native-adapter result passed schema validation but is not yet a business selection.", "selected: The user deliberately committed a normalized Mappls Pin and label against the current host draft version.", "submitted: Host text and committed selection form one immutable, attributable business record with an outbox event.", "cancelled: A named actor ended the journey without submission and with a recorded reason." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_session by Host application: new aggregate → draft; emit host.session_created.", "open_widget by Application user: draft | fallback_active → widget_open; emit widget.opened.", "activate_fallback by Platform adapter: widget_open → fallback_active; emit widget.fallback_activated.", "receive_candidate by Platform adapter: widget_open | fallback_active → candidate_received; emit location.candidate_received.", "accept_selection by Application user: candidate_received → selected; emit location.selected.", "edit_host_text by Application user: draft | widget_open | fallback_active | candidate_received | selected → draft; emit host.text_edited.", "submit by Application user: selected → submitted; emit host.submitted.", "cancel by Application user: draft | widget_open | fallback_active | candidate_received | selected → cancelled; emit host.cancelled." ], "prove": [ "create_session resolves to widget-selection-session-host-session-created without claiming a provider webhook payload.", "open_widget resolves to widget-selection-session-widget-opened without claiming a provider webhook payload.", "activate_fallback resolves to widget-selection-session-widget-fallback-activated without claiming a provider webhook payload.", "receive_candidate resolves to widget-selection-session-location-candidate-received without claiming a provider webhook payload.", "accept_selection resolves to widget-selection-session-location-selected without claiming a provider webhook payload.", "edit_host_text resolves to widget-selection-session-host-text-edited without claiming a provider webhook payload.", "submit resolves to widget-selection-session-host-submitted without claiming a provider webhook payload.", "cancel resolves to widget-selection-session-host-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Selection session: Current host draft, lifecycle state, launch generation, candidate, selection, and optimistic version. Keys: sessionId, externalId, state, version, launchGeneration, hostText.", "Normalized selection: Application-owned portable place identity independent of provider UI lifetime. Keys: schemaVersion, mapplsPin, label, source, selectedAt, selectedBy.", "Audit event: Attributable state transition and recovery history. Keys: eventId, aggregateVersion, type, actor, idempotencyKey, occurredAt.", "Transactional outbox: Exactly-once-in-effect notification and downstream form processing. Keys: outboxId, eventId, status, attempts, nextAttemptAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "A provider callback or browser message creates only a candidate, never a submitted business record.", "Every browser message matches the exact reviewed origin and a versioned allow-listed schema.", "Only a six-character alphanumeric Mappls Pin and bounded printable label enter durable selection state.", "A host-text edit invalidates every candidate and committed selection from the previous draft version.", "One launch generation produces at most one terminal adapter outcome; late callbacks are ignored.", "Credentials, provider controllers, native views, bridge objects, and opaque response payloads are never persisted." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Widget fails, is denied, or times out: detect with The active generation reaches a typed failure without a valid terminal candidate. Recover with Dispose it, restore focus, record the reason, and activate a useful host-owned fallback.", "Message arrives from a wrong origin or with unknown fields: detect with Exact origin or narrow schema validation fails before domain processing. Recover with Reject without changing aggregate state and emit a safe rejection metric without storing opaque content.", "Callback arrives after screen disposal or a newer launch: detect with Owner is inactive or result generation differs from the current session generation. Recover with Ignore the late result and clean up its provider resources without committing state.", "User edits the address after selecting a place: detect with Host draft version changes while a candidate or selection exists. Recover with Clear both values, return to draft, and require a new selection before submission.", "Submit response is lost: detect with Client lacks acknowledgement but retains session and idempotency identity. Recover with Repeat the same command key or read the session; never create a second business record." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Widget Journey Host capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Widget launch, time-to-active, and terminal outcome by platform and component version", "Origin and schema rejection counts without raw payload retention", "Fallback activation, completion, and abandonment rate", "Candidate-to-selection and selection-to-submit conversion", "Stale selection invalidation after host edits", "Duplicate, late, and superseded callback count", "Idempotency replay and optimistic version conflict rate", "Outbox backlog, retry, and dead-letter age" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"widget_open\" | \"fallback_active\" | \"candidate_received\" | \"selected\" | \"submitted\" | \"cancelled\";\ntype CommandName = \"create_session\" | \"open_widget\" | \"activate_fallback\" | \"receive_candidate\" | \"accept_selection\" | \"edit_host_text\" | \"submit\" | \"cancel\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_session\": { from: [null], to: \"draft\", event: \"host.session_created\" },\n \"open_widget\": { from: [\"draft\", \"fallback_active\"], to: \"widget_open\", event: \"widget.opened\" },\n \"activate_fallback\": { from: [\"widget_open\"], to: \"fallback_active\", event: \"widget.fallback_activated\" },\n \"receive_candidate\": { from: [\"widget_open\", \"fallback_active\"], to: \"candidate_received\", event: \"location.candidate_received\" },\n \"accept_selection\": { from: [\"candidate_received\"], to: \"selected\", event: \"location.selected\" },\n \"edit_host_text\": { from: [\"draft\", \"widget_open\", \"fallback_active\", \"candidate_received\", \"selected\"], to: \"draft\", event: \"host.text_edited\" },\n \"submit\": { from: [\"selected\"], to: \"submitted\", event: \"host.submitted\" },\n \"cancel\": { from: [\"draft\", \"widget_open\", \"fallback_active\", \"candidate_received\", \"selected\"], to: \"cancelled\", event: \"host.cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_widget_selection_session (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_widget_selection_session_commands (\n aggregate_id text NOT NULL REFERENCES journey_widget_selection_session(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_widget_selection_session_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"widget-selection-session\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"widget-selection-session\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile widgetselectionsession identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_session\",\n \"aggregateId\": \"fixture-widget-selection-session-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_widget-selection-session_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=widget-selection-session&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=widget-selection-session&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=widget-selection-session&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=widget-selection-session&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=widget-selection-session&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 8 reviewed transitions are implemented with actor and source-state checks.", "All 8 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Widget Journey Host capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/widget-selection-session/workshop", "apiPath": "/api/journey-workshops?journey=widget-selection-session", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build iOS direction planning and navigation handoff - Identity: `journey-workshop:ios-direction-planning-handoff` - Canonical: https://developer.mappls.com/journeys/ios-direction-planning-handoff/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "ios-direction-planning-handoff", "journeySlug": "ios-direction-planning-handoff", "title": "Build iOS direction planning and navigation handoff", "summary": "An eight-lab, source-bounded workshop for the complete route planning session lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session", "actorCount": 4, "stateCount": 8, "transitionCount": 8, "eventCount": 8, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "contractSlugs": [], "relatedTutorialSlugs": [ "ios-direction-geofence-handoffs" ], "sample": { "slug": "deep-link-journey-host", "name": "Deep-link & Native UI Journey Host", "downloadPath": "/downloads/deep-link-journey-host.zip", "checksumPath": "/downloads/deep-link-journey-host.zip.sha256", "verifiedTestCount": 11, "runCommand": "npm test --workspace @mappls-example/deep-link-journey-host" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the route planning session blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: The host owns one route intent, traveler context, and revision before presenting provider UI.", "editing: One presented controller generation owns source, destination, via points, options, delegates, dismissal, and accessibility focus.", "calculating: The provider surface is resolving route alternatives for the current immutable location and option revision.", "candidates_ready: One or more provider route objects are visible for comparison but remain controller-scoped candidates.", "selected: The traveler selected an in-range route index and the adapter copied a bounded route handoff value plus the exact location revision.", "handoff_pending: The documented start-navigation callback requested a host-owned navigation action, but no target navigator acknowledgement exists yet.", "handed_off: The configured navigation adapter accepted the normalized route request and returned its own attributable session identity or acknowledgement.", "cancelled: The traveler dismissed or backed out and the host recorded one terminal cancellation without a route handoff." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_plan by Host application: new aggregate → draft; emit route_plan.created.", "open_direction_ui by Traveler: draft | selected → editing; emit route_plan.editor_opened.", "request_routes by Traveler: editing → calculating; emit route_plan.calculation_requested.", "receive_routes by MapplsDirectionUI: calculating → candidates_ready; emit route_plan.candidates_received.", "select_route by Traveler: candidates_ready → selected; emit route_plan.route_selected.", "request_navigation by Traveler: selected | candidates_ready → handoff_pending; emit route_plan.navigation_requested.", "confirm_handoff by Navigation adapter: handoff_pending → handed_off; emit route_plan.navigation_handed_off.", "cancel_plan by Traveler: draft | editing | calculating | candidates_ready | selected | handoff_pending → cancelled; emit route_plan.cancelled." ], "prove": [ "create_plan resolves to ios-direction-planning-handoff-route-plan-created without claiming a provider webhook payload.", "open_direction_ui resolves to ios-direction-planning-handoff-route-plan-editor-opened without claiming a provider webhook payload.", "request_routes resolves to ios-direction-planning-handoff-route-plan-calculation-requested without claiming a provider webhook payload.", "receive_routes resolves to ios-direction-planning-handoff-route-plan-candidates-received without claiming a provider webhook payload.", "select_route resolves to ios-direction-planning-handoff-route-plan-route-selected without claiming a provider webhook payload.", "request_navigation resolves to ios-direction-planning-handoff-route-plan-navigation-requested without claiming a provider webhook payload.", "confirm_handoff resolves to ios-direction-planning-handoff-route-plan-navigation-handed-off without claiming a provider webhook payload.", "cancel_plan resolves to ios-direction-planning-handoff-route-plan-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Route plan: Host-owned normalized stops, options, revision, lifecycle state, and optimistic version. Keys: planId, externalId, state, routeRevision, version, owner.", "Route handoff candidate: Bounded portable value copied from the active route selection without retaining provider UI objects. Keys: candidateId, routeRevision, selectedIndex, locationDigest, optionDigest, createdAt.", "Handoff attempt: Immutable request and target acknowledgement separating planning from navigation runtime. Keys: attemptId, candidateId, target, status, targetSessionRef, requestedAt.", "Audit and outbox: Attributable transitions and exactly-once-in-effect downstream notification. Keys: eventId, aggregateVersion, actor, idempotencyKey, outboxStatus." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "Stops, options, route candidates, and selection share one explicit revision.", "A selected index is validated before dereferencing its Route candidate.", "The provider controller and opaque Route objects never become durable application records.", "The start-navigation callback expresses intent, not proof that navigation started or completed.", "One presentation generation produces at most one terminal handoff or cancellation.", "Credentials and unrestricted location histories never enter route-planning audit events." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Route calculation fails or returns no alternatives: detect with The active controller reports an error or has no valid selected route for the current revision. Recover with Keep the editable draft, show a safe error, and allow option or stop revision before retry.", "A delegate callback arrives from an old controller: detect with The callback presentation generation differs from the aggregate's active generation. Recover with Ignore it, dispose its resources, and leave the current route revision unchanged.", "Selected route index is stale or invalid: detect with The index is outside the current route collection or belongs to a superseded calculation revision. Recover with Reject the handoff and require visible reselection from current candidates.", "Navigation target rejects or times out: detect with No target acknowledgement exists for the handoff identity inside the bounded deadline. Recover with Remain handoff pending, expose retry or return-to-selection, and do not claim an active navigation session." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Deep-link & Native UI Journey Host capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (11 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Editor presentation, dismissal, and terminal result by released component version", "Calculation latency, failure, and zero-alternative rate", "Stop and option revision count before selection", "Candidate-to-selection and selection-to-handoff conversion", "Invalid index, stale generation, duplicate callback, and late callback rejection", "Handoff acknowledgement latency and target rejection rate", "Idempotency replay and optimistic version conflict rate" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"editing\" | \"calculating\" | \"candidates_ready\" | \"selected\" | \"handoff_pending\" | \"handed_off\" | \"cancelled\";\ntype CommandName = \"create_plan\" | \"open_direction_ui\" | \"request_routes\" | \"receive_routes\" | \"select_route\" | \"request_navigation\" | \"confirm_handoff\" | \"cancel_plan\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_plan\": { from: [null], to: \"draft\", event: \"route_plan.created\" },\n \"open_direction_ui\": { from: [\"draft\", \"selected\"], to: \"editing\", event: \"route_plan.editor_opened\" },\n \"request_routes\": { from: [\"editing\"], to: \"calculating\", event: \"route_plan.calculation_requested\" },\n \"receive_routes\": { from: [\"calculating\"], to: \"candidates_ready\", event: \"route_plan.candidates_received\" },\n \"select_route\": { from: [\"candidates_ready\"], to: \"selected\", event: \"route_plan.route_selected\" },\n \"request_navigation\": { from: [\"selected\", \"candidates_ready\"], to: \"handoff_pending\", event: \"route_plan.navigation_requested\" },\n \"confirm_handoff\": { from: [\"handoff_pending\"], to: \"handed_off\", event: \"route_plan.navigation_handed_off\" },\n \"cancel_plan\": { from: [\"draft\", \"editing\", \"calculating\", \"candidates_ready\", \"selected\", \"handoff_pending\"], to: \"cancelled\", event: \"route_plan.cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_ios_direction_planning_handoff (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_ios_direction_planning_handoff_commands (\n aggregate_id text NOT NULL REFERENCES journey_ios_direction_planning_handoff(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_ios_direction_planning_handoff_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"ios-direction-planning-handoff\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"ios-direction-planning-handoff\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile routeplanningsession identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_plan\",\n \"aggregateId\": \"fixture-ios-direction-planning-handoff-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_ios-direction-planning-handoff_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=ios-direction-planning-handoff&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=ios-direction-planning-handoff&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=ios-direction-planning-handoff&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=ios-direction-planning-handoff&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=ios-direction-planning-handoff&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 8 reviewed transitions are implemented with actor and source-state checks.", "All 8 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Deep-link & Native UI Journey Host capstone passes 11 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/ios-direction-planning-handoff/workshop", "apiPath": "/api/journey-workshops?journey=ios-direction-planning-handoff", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build iOS geofence draft and publication boundary - Identity: `journey-workshop:ios-geofence-draft` - Canonical: https://developer.mappls.com/journeys/ios-geofence-draft/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "ios-geofence-draft", "journeySlug": "ios-geofence-draft", "title": "Build iOS geofence draft and publication boundary", "summary": "An eight-lab, source-bounded workshop for the complete geofence draft lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft", "actorCount": 5, "stateCount": 6, "transitionCount": 6, "eventCount": 6, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "contractSlugs": [], "relatedTutorialSlugs": [ "ios-direction-geofence-handoffs" ], "sample": { "slug": "deep-link-journey-host", "name": "Deep-link & Native UI Journey Host", "downloadPath": "/downloads/deep-link-journey-host.zip", "checksumPath": "/downloads/deep-link-journey-host.zip.sha256", "verifiedTestCount": 11, "runCommand": "npm test --workspace @mappls-example/deep-link-journey-host" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the geofence draft blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: The host owns name, purpose, subject scope, rule intent, and geometry revision before opening the editor.", "editing: One view and delegate generation owns mode, handles, slider, style, callbacks, dismissal, and cleanup.", "candidate: Circle or polygon output has been copied into a portable geometry schema but is not yet an operational rule.", "review_pending: Valid geometry, purpose, scope, schedule intent, and policy version await an attributable application review.", "approved_draft: The application has a review-approved portable artifact ready for a separately selected and entitled rule-publication contract.", "cancelled: The author ended editing without approving a new geometry revision and the UI lifecycle is fully disposed." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_geofence_draft by Host application: new aggregate → draft; emit geofence_draft.created.", "open_editor by Operations author: draft | review_pending → editing; emit geofence_draft.editor_opened.", "receive_geometry by MapplsGeofenceUI: editing → candidate; emit geofence_draft.geometry_received.", "submit_for_review by Operations author: candidate → review_pending; emit geofence_draft.review_requested.", "approve_draft by Geofence reviewer: review_pending → approved_draft; emit geofence_draft.approved.", "cancel_edit by Operations author: draft | editing | candidate | review_pending → cancelled; emit geofence_draft.cancelled." ], "prove": [ "create_geofence_draft resolves to ios-geofence-draft-geofence-draft-created without claiming a provider webhook payload.", "open_editor resolves to ios-geofence-draft-geofence-draft-editor-opened without claiming a provider webhook payload.", "receive_geometry resolves to ios-geofence-draft-geofence-draft-geometry-received without claiming a provider webhook payload.", "submit_for_review resolves to ios-geofence-draft-geofence-draft-review-requested without claiming a provider webhook payload.", "approve_draft resolves to ios-geofence-draft-geofence-draft-approved without claiming a provider webhook payload.", "cancel_edit resolves to ios-geofence-draft-geofence-draft-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Geofence draft: Host-owned intent, current revision, lifecycle state, policy, and optimistic version. Keys: draftId, externalId, purpose, scope, state, geometryRevision, version.", "Geometry revision: Immutable canonical circle or polygon independent of UI lifetime. Keys: geometryId, mode, coordinates, radiusMeters, canonicalHash, sourceGeneration.", "Review decision: Attributable approval or rework request for an exact geometry and policy version. Keys: reviewId, geometryId, reviewer, decision, reason, decidedAt.", "Publication boundary: Selection record for a future provider rule adapter without inventing a rule ID. Keys: draftId, adapterStatus, entitlementReference, requiredContract, selectedAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "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." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Editor returns invalid or unsafe geometry: detect with Canonical validation finds missing points, self-intersection, invalid radius, excessive area, or policy bounds failure. Recover with Keep the candidate uncommitted, explain the exact constraint, and reopen a new editor generation.", "Callback arrives after view disposal: detect with The delegate generation is inactive or differs from the aggregate's editor generation. Recover with Ignore it and clean up provider resources without changing the current draft.", "Two authors edit the same draft: detect with The submitted geometry references an older aggregate or geometry revision. Recover with Return a conflict with the current revision and require an intentional new edit.", "No authoritative publication contract is available: detect with The selected environment lacks a documented provider command, entitlement, response, or rule identity contract. Recover with Keep the artifact approved_draft and route contract selection to an administrator; never fabricate publication success." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Deep-link & Native UI Journey Host capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (11 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "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" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"editing\" | \"candidate\" | \"review_pending\" | \"approved_draft\" | \"cancelled\";\ntype CommandName = \"create_geofence_draft\" | \"open_editor\" | \"receive_geometry\" | \"submit_for_review\" | \"approve_draft\" | \"cancel_edit\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_geofence_draft\": { from: [null], to: \"draft\", event: \"geofence_draft.created\" },\n \"open_editor\": { from: [\"draft\", \"review_pending\"], to: \"editing\", event: \"geofence_draft.editor_opened\" },\n \"receive_geometry\": { from: [\"editing\"], to: \"candidate\", event: \"geofence_draft.geometry_received\" },\n \"submit_for_review\": { from: [\"candidate\"], to: \"review_pending\", event: \"geofence_draft.review_requested\" },\n \"approve_draft\": { from: [\"review_pending\"], to: \"approved_draft\", event: \"geofence_draft.approved\" },\n \"cancel_edit\": { from: [\"draft\", \"editing\", \"candidate\", \"review_pending\"], to: \"cancelled\", event: \"geofence_draft.cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_ios_geofence_draft (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_ios_geofence_draft_commands (\n aggregate_id text NOT NULL REFERENCES journey_ios_geofence_draft(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_ios_geofence_draft_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"ios-geofence-draft\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"ios-geofence-draft\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile geofencedraft identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_geofence_draft\",\n \"aggregateId\": \"fixture-ios-geofence-draft-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_ios-geofence-draft_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=ios-geofence-draft&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=ios-geofence-draft&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=ios-geofence-draft&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=ios-geofence-draft&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=ios-geofence-draft&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 6 reviewed transitions are implemented with actor and source-state checks.", "All 6 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Deep-link & Native UI Journey Host capstone passes 11 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/ios-geofence-draft/workshop", "apiPath": "/api/journey-workshops?journey=ios-geofence-draft", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build iOS feedback report and review - Identity: `journey-workshop:ios-feedback-report-review` - Canonical: https://developer.mappls.com/journeys/ios-feedback-report-review/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "ios-feedback-report-review", "journeySlug": "ios-feedback-report-review", "title": "Build iOS feedback report and review", "summary": "An eight-lab, source-bounded workshop for the complete feedback report lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report", "actorCount": 5, "stateCount": 9, "transitionCount": 9, "eventCount": 9, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "place-contribution-desk", "name": "Place Contribution Desk", "downloadPath": "/downloads/place-contribution-desk.zip", "checksumPath": "/downloads/place-contribution-desk.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/place-contribution-desk" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the feedback report blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: The host owns purpose, category intent, reporter consent, location context, and retention policy before opening provider UI.", "capturing: One presented feedback generation owns UI, focus, permission prompts, callbacks, cancellation, and cleanup.", "candidate: The adapter copied allow-listed category, bounded description, normalized location identity, and attachment references into application state.", "submitted: The contributor deliberately committed one immutable application report with idempotency, expected version, audit, and outbox evidence.", "provider_pending: A separately selected adapter has an acknowledged or unknown provider submission outcome that requires reconciliation.", "review_pending: Submission evidence and any provider acknowledgement await an attributable quality, privacy, duplication, or policy decision.", "resolved: An authorized reviewer recorded the disposition and exact supporting evidence, with provider resolution only when independently proven.", "rejected: Review found the report invalid, duplicate, out of scope, or unsupported and preserved the reason plus evidence lineage.", "cancelled: The contributor ended the active attempt before application submission and every UI resource was disposed." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_report by Host application: new aggregate → draft; emit feedback_report.created.", "open_feedback_ui by Contributor: draft → capturing; emit feedback_report.ui_opened.", "receive_candidate by Mappls Feedback Kit: capturing → candidate; emit feedback_report.candidate_received.", "commit_submission by Contributor: candidate → submitted; emit feedback_report.submitted.", "request_provider_submission by Provider adapter: submitted → provider_pending; emit feedback_report.provider_requested.", "queue_review by Host application: submitted | provider_pending → review_pending; emit feedback_report.review_queued.", "resolve_report by Operations reviewer: review_pending → resolved; emit feedback_report.resolved.", "reject_report by Operations reviewer: review_pending → rejected; emit feedback_report.rejected.", "cancel_report by Contributor: draft | capturing | candidate → cancelled; emit feedback_report.cancelled." ], "prove": [ "create_report resolves to ios-feedback-report-review-feedback-report-created without claiming a provider webhook payload.", "open_feedback_ui resolves to ios-feedback-report-review-feedback-report-ui-opened without claiming a provider webhook payload.", "receive_candidate resolves to ios-feedback-report-review-feedback-report-candidate-received without claiming a provider webhook payload.", "commit_submission resolves to ios-feedback-report-review-feedback-report-submitted without claiming a provider webhook payload.", "request_provider_submission resolves to ios-feedback-report-review-feedback-report-provider-requested without claiming a provider webhook payload.", "queue_review resolves to ios-feedback-report-review-feedback-report-review-queued without claiming a provider webhook payload.", "resolve_report resolves to ios-feedback-report-review-feedback-report-resolved without claiming a provider webhook payload.", "reject_report resolves to ios-feedback-report-review-feedback-report-rejected without claiming a provider webhook payload.", "cancel_report resolves to ios-feedback-report-review-feedback-report-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Feedback report: Host-owned intent, lifecycle state, current immutable submission, and optimistic version. Keys: reportId, externalId, purpose, state, submissionRevision, version.", "Submission revision: Allow-listed category, description, normalized location, consent, attachment references, and content identity. Keys: submissionId, reportId, contentHash, locationIdentity, consentVersion, submittedAt.", "Provider attempt: Separately selected contract request, acknowledgement, unknown outcome, and reconciliation evidence. Keys: attemptId, submissionId, providerRequestId, status, receiptReference, lastCheckedAt.", "Review decision: Attributable disposition against one exact submission and provider-evidence revision. Keys: reviewId, submissionId, reviewer, decision, reason, decidedAt." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "A UI callback creates only a candidate; it cannot prove application submission, provider receipt, publication, or resolution.", "One presentation generation produces at most one accepted terminal result and all late callbacks are ignored.", "Every submission revision is immutable and content-hashed; rework creates a new linked attempt.", "Provider acknowledgement and reviewer disposition are separate attributable records.", "Credentials, view controllers, delegates, attachment bodies, and opaque provider payloads never enter durable state.", "Idempotency, optimistic concurrency, audit, outbox, privacy purpose, retention, and redaction apply to every committed transition." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "UI is denied, blocked, dismissed, or times out: detect with The active generation ends without a valid allow-listed candidate. Recover with Dispose, restore focus, retain the draft, record a safe reason, and offer a purpose-appropriate manual fallback.", "A callback arrives after replacement or disposal: detect with Its presentation generation differs from the report's active generation. Recover with Ignore it, release its resources, and keep current report state unchanged.", "Provider submission response is lost: detect with The application has a durable request identity but no authoritative acknowledgement. Recover with Remain provider pending and reconcile under the same identity before any retry.", "Review rejects or requests corrected evidence: detect with Policy, privacy, duplication, location, or content validation fails for the immutable revision. Recover with Preserve the decision and original revision; create a new linked attempt rather than editing history." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Place Contribution Desk capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "UI open, activation, cancellation, candidate, and terminal outcome by released component version", "Schema, size, stale-generation, duplicate, and late-callback rejection", "Draft-to-candidate and candidate-to-submit conversion", "Provider pending age, acknowledgement, unknown outcome, and reconciliation", "Review queue age, disposition, rework, and duplicate rate", "Idempotency replay, version conflict, audit, and outbox health", "Privacy retention and redaction completion without attachment-body logging" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"capturing\" | \"candidate\" | \"submitted\" | \"provider_pending\" | \"review_pending\" | \"resolved\" | \"rejected\" | \"cancelled\";\ntype CommandName = \"create_report\" | \"open_feedback_ui\" | \"receive_candidate\" | \"commit_submission\" | \"request_provider_submission\" | \"queue_review\" | \"resolve_report\" | \"reject_report\" | \"cancel_report\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_report\": { from: [null], to: \"draft\", event: \"feedback_report.created\" },\n \"open_feedback_ui\": { from: [\"draft\"], to: \"capturing\", event: \"feedback_report.ui_opened\" },\n \"receive_candidate\": { from: [\"capturing\"], to: \"candidate\", event: \"feedback_report.candidate_received\" },\n \"commit_submission\": { from: [\"candidate\"], to: \"submitted\", event: \"feedback_report.submitted\" },\n \"request_provider_submission\": { from: [\"submitted\"], to: \"provider_pending\", event: \"feedback_report.provider_requested\" },\n \"queue_review\": { from: [\"submitted\", \"provider_pending\"], to: \"review_pending\", event: \"feedback_report.review_queued\" },\n \"resolve_report\": { from: [\"review_pending\"], to: \"resolved\", event: \"feedback_report.resolved\" },\n \"reject_report\": { from: [\"review_pending\"], to: \"rejected\", event: \"feedback_report.rejected\" },\n \"cancel_report\": { from: [\"draft\", \"capturing\", \"candidate\"], to: \"cancelled\", event: \"feedback_report.cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_ios_feedback_report_review (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_ios_feedback_report_review_commands (\n aggregate_id text NOT NULL REFERENCES journey_ios_feedback_report_review(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_ios_feedback_report_review_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"ios-feedback-report-review\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"ios-feedback-report-review\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile feedbackreport identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_report\",\n \"aggregateId\": \"fixture-ios-feedback-report-review-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_ios-feedback-report-review_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=ios-feedback-report-review&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=ios-feedback-report-review&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=ios-feedback-report-review&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=ios-feedback-report-review&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=ios-feedback-report-review&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 9 reviewed transitions are implemented with actor and source-state checks.", "All 9 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Place Contribution Desk capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/ios-feedback-report-review/workshop", "apiPath": "/api/journey-workshops?journey=ios-feedback-report-review", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Consent-bound location capture evidence - Identity: `journey-workshop:location-capture-evidence` - Canonical: https://developer.mappls.com/journeys/location-capture-evidence/workshop - State model: hybrid ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "location-capture-evidence", "journeySlug": "location-capture-evidence", "title": "Build Consent-bound location capture evidence", "summary": "An eight-lab, source-bounded workshop for the complete location capture attempt lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt", "actorCount": 5, "stateCount": 8, "transitionCount": 9, "eventCount": 9, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "address-verifier", "name": "Address Verifier", "downloadPath": "/downloads/address-verifier.zip", "checksumPath": "/downloads/address-verifier.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/address-verifier" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the location capture attempt blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: The host owns a business purpose, subject or case identity, capture policy, and retention class before requesting device access.", "permission_pending: The user is deciding the minimum native permission for the declared purpose and visible capture behavior.", "ready: SDK initialization, entitlement, permission, policy validation, and one launch generation have succeeded.", "acquiring: Exactly one single-shot request or bounded subscription owns timeout, accuracy, distance, packet-size, callback, and cleanup responsibility.", "candidate: A returned event has normalized coordinates, horizontal accuracy, event time, receipt time, policy result, and source generation, but is not yet accepted evidence.", "review_pending: The candidate is usable only with human review because accuracy, freshness, or policy confidence is below the automatic threshold.", "accepted: An actor accepted one immutable normalized fix for the declared purpose and policy version, with an audit event and retention deadline.", "cancelled: The user or host ended the attempt and every active SDK resource was stopped or unsubscribed." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_attempt by Host application: new aggregate → draft; emit location_capture.attempt_created.", "request_permission by Application user: draft → permission_pending; emit location_capture.permission_requested.", "prepare_sdk by Platform adapter: permission_pending → ready; emit location_capture.sdk_ready.", "start_acquisition by Application user: ready | review_pending → acquiring; emit location_capture.acquisition_started.", "receive_location by Platform adapter: acquiring → candidate; emit location_capture.candidate_received.", "queue_review by Host application: candidate → review_pending; emit location_capture.review_queued.", "accept_evidence by Application user: candidate → accepted; emit location_capture.evidence_accepted.", "approve_weak_evidence by Evidence reviewer: review_pending → accepted; emit location_capture.weak_evidence_approved.", "cancel_attempt by Application user: draft | permission_pending | ready | acquiring | candidate | review_pending → cancelled; emit location_capture.attempt_cancelled." ], "prove": [ "create_attempt resolves to location-capture-evidence-location-capture-attempt-created without claiming a provider webhook payload.", "request_permission resolves to location-capture-evidence-location-capture-permission-requested without claiming a provider webhook payload.", "prepare_sdk resolves to location-capture-evidence-location-capture-sdk-ready without claiming a provider webhook payload.", "start_acquisition resolves to location-capture-evidence-location-capture-acquisition-started without claiming a provider webhook payload.", "receive_location resolves to location-capture-evidence-location-capture-candidate-received without claiming a provider webhook payload.", "queue_review resolves to location-capture-evidence-location-capture-review-queued without claiming a provider webhook payload.", "accept_evidence resolves to location-capture-evidence-location-capture-evidence-accepted without claiming a provider webhook payload.", "approve_weak_evidence resolves to location-capture-evidence-location-capture-weak-evidence-approved without claiming a provider webhook payload.", "cancel_attempt resolves to location-capture-evidence-location-capture-attempt-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Capture attempt: Current host-owned purpose, policy, lifecycle state, generation, and optimistic version. Keys: attemptId, externalId, purpose, policyVersion, state, generation, version.", "Normalized location evidence: Immutable accuracy-bearing observation independent of the SDK object's lifetime. Keys: evidenceId, latitude, longitude, horizontalAccuracy, eventTime, receivedTime, sourceGeneration, contentHash.", "Review decision: Attributable disposition of evidence that cannot be accepted automatically. Keys: reviewId, evidenceId, reviewer, decision, reason, decidedAt.", "Audit and outbox: Append-only transitions and exactly-once-in-effect downstream notification. Keys: eventId, aggregateVersion, actor, idempotencyKey, outboxStatus." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "A permission grant is not consent for every purpose; purpose, policy, and retention are recorded separately.", "One acquisition generation owns one callback family, timeout, stop, and unsubscribe lifecycle.", "Accuracy, event time, receipt time, and policy result remain attached to the normalized coordinates.", "A callback creates a candidate, never an accepted business decision.", "Weak or stale evidence cannot pass an automatic acceptance threshold by omitting quality fields.", "Credentials, native manager instances, full opaque payloads, and callback closures never enter durable storage." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Permission is denied or restricted: detect with The native authorization result cannot satisfy the declared capture mode. Recover with Explain the affected outcome, offer settings or a manual fallback where appropriate, and keep the attempt non-acquiring.", "Initialization or entitlement fails: detect with The documented initialize operation returns failure before the generation becomes ready. Recover with Expose a safe configuration or entitlement error, retain no credential value, and require a deliberate retry after correction.", "Acquisition times out or misses the accuracy budget: detect with The configured deadline expires or every event remains outside policy. Recover with Stop or unsubscribe once, preserve the quality reason, and route to review, retry, or fallback rather than fabricating a precise fix.", "A callback arrives after cancellation or screen disposal: detect with The owner is inactive or callback generation differs from the current attempt generation. Recover with Ignore the event, perform idempotent cleanup, and do not change the terminal or newer attempt.", "The app restarts during review: detect with The immutable candidate exists but the review command lacks acknowledgement. Recover with Reload the attempt and replay the same command key; never reacquire or duplicate evidence merely to recover workflow state." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Address Verifier capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Initialization and configuration outcomes by SDK platform and released version", "Permission denied, restricted, and settings-return rate", "Time to first event and time to policy-acceptable event", "Accuracy and freshness distributions without high-cardinality coordinate labels", "Single-shot, subscription, timeout, stop, unsubscribe, and late-callback counts", "Automatic acceptance, review, retry, fallback, and cancellation rate", "Idempotency replay and optimistic version conflict rate", "Outbox backlog, retry, and dead-letter age" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"permission_pending\" | \"ready\" | \"acquiring\" | \"candidate\" | \"review_pending\" | \"accepted\" | \"cancelled\";\ntype CommandName = \"create_attempt\" | \"request_permission\" | \"prepare_sdk\" | \"start_acquisition\" | \"receive_location\" | \"queue_review\" | \"accept_evidence\" | \"approve_weak_evidence\" | \"cancel_attempt\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_attempt\": { from: [null], to: \"draft\", event: \"location_capture.attempt_created\" },\n \"request_permission\": { from: [\"draft\"], to: \"permission_pending\", event: \"location_capture.permission_requested\" },\n \"prepare_sdk\": { from: [\"permission_pending\"], to: \"ready\", event: \"location_capture.sdk_ready\" },\n \"start_acquisition\": { from: [\"ready\", \"review_pending\"], to: \"acquiring\", event: \"location_capture.acquisition_started\" },\n \"receive_location\": { from: [\"acquiring\"], to: \"candidate\", event: \"location_capture.candidate_received\" },\n \"queue_review\": { from: [\"candidate\"], to: \"review_pending\", event: \"location_capture.review_queued\" },\n \"accept_evidence\": { from: [\"candidate\"], to: \"accepted\", event: \"location_capture.evidence_accepted\" },\n \"approve_weak_evidence\": { from: [\"review_pending\"], to: \"accepted\", event: \"location_capture.weak_evidence_approved\" },\n \"cancel_attempt\": { from: [\"draft\", \"permission_pending\", \"ready\", \"acquiring\", \"candidate\", \"review_pending\"], to: \"cancelled\", event: \"location_capture.attempt_cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_location_capture_evidence (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_location_capture_evidence_commands (\n aggregate_id text NOT NULL REFERENCES journey_location_capture_evidence(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_location_capture_evidence_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"location-capture-evidence\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"location-capture-evidence\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile locationcaptureattempt identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_attempt\",\n \"aggregateId\": \"fixture-location-capture-evidence-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_location-capture-evidence_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=location-capture-evidence&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=location-capture-evidence&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=location-capture-evidence&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=location-capture-evidence&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=location-capture-evidence&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 9 reviewed transitions are implemented with actor and source-state checks.", "All 9 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Address Verifier capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/location-capture-evidence/workshop", "apiPath": "/api/journey-workshops?journey=location-capture-evidence", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Governed place contribution and publication - Identity: `journey-workshop:place-contribution-publication` - Canonical: https://developer.mappls.com/journeys/place-contribution-publication/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "place-contribution-publication", "journeySlug": "place-contribution-publication", "title": "Build Governed place contribution and publication", "summary": "An eight-lab, source-bounded workshop for the complete place contribution lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution", "actorCount": 4, "stateCount": 7, "transitionCount": 8, "eventCount": 8, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "relatedTutorialSlugs": [], "sample": { "slug": "place-contribution-desk", "name": "Place Contribution Desk", "downloadPath": "/downloads/place-contribution-desk.zip", "checksumPath": "/downloads/place-contribution-desk.zip.sha256", "verifiedTestCount": 8, "runCommand": "npm test --workspace @mappls-example/place-contribution-desk" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the place contribution blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: The host owns a bounded contribution intent, business purpose, and external identity before any provider surface opens.", "widget_open: The Mappls-hosted form is visible for one recorded attempt, while provider UI and submission remain outside the host contract.", "submission_reported: The contributor says the hosted form showed success, which is useful testimony but not a receipt or publication result.", "publication_pending: An operations process is checking supported Mappls search or an approved provider receipt for a stable published identity.", "published: A supported provider surface returned a six-character Mappls Pin with attributable observation evidence.", "rejected: A reviewer found a duplicate, invalid, unsafe, or otherwise non-publishable contribution and recorded why.", "withdrawn: The host stopped its own follow-up workflow at the contributor's request without claiming that the provider submission was deleted." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_contribution by Host application: new aggregate → draft; emit place_contribution.created.", "open_widget by Contributor: draft → widget_open; emit place_contribution.widget_opened.", "report_submission by Contributor: widget_open → submission_reported; emit place_contribution.submission_reported.", "queue_reconciliation by Host application: submission_reported → publication_pending; emit place_contribution.reconciliation_queued.", "confirm_publication by Operations reviewer: submission_reported | publication_pending → published; emit place_contribution.published.", "reject by Operations reviewer: submission_reported | publication_pending → rejected; emit place_contribution.rejected.", "retry by Contributor: rejected → widget_open; emit place_contribution.retried.", "withdraw by Contributor: draft | widget_open | submission_reported | publication_pending → withdrawn; emit place_contribution.withdrawn." ], "prove": [ "create_contribution resolves to place-contribution-publication-place-contribution-created without claiming a provider webhook payload.", "open_widget resolves to place-contribution-publication-place-contribution-widget-opened without claiming a provider webhook payload.", "report_submission resolves to place-contribution-publication-place-contribution-submission-reported without claiming a provider webhook payload.", "queue_reconciliation resolves to place-contribution-publication-place-contribution-reconciliation-queued without claiming a provider webhook payload.", "confirm_publication resolves to place-contribution-publication-place-contribution-published without claiming a provider webhook payload.", "reject resolves to place-contribution-publication-place-contribution-rejected without claiming a provider webhook payload.", "retry resolves to place-contribution-publication-place-contribution-retried without claiming a provider webhook payload.", "withdraw resolves to place-contribution-publication-place-contribution-withdrawn without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Contribution aggregate: Current host-owned state, business identity, purpose, ownership, and optimistic version. Keys: contributionId, externalId, state, version, purpose, owner.", "Widget attempt: Immutable record of each frame launch and contributor-reported outcome without provider-internal data. Keys: attemptId, aggregateVersion, openedAt, reportedAt, documentedSourceUrl.", "Publication evidence: Attributable supported-source proof that a stable Mappls identity is observable. Keys: mapplsPin, evidenceSource, observedAt, sourceFingerprint, reviewer.", "Audit and outbox: Append-only transitions and exactly-once-in-effect downstream notifications. Keys: eventId, aggregateVersion, actor, idempotencyKey, outboxStatus." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "A hosted success screen or contributor report never proves publication.", "No callback, browser message, receipt, moderation status, or withdrawal capability is invented when the public source does not document it.", "Only provider-backed evidence containing a valid Mappls Pin can close the aggregate as published.", "Every widget attempt is immutable and linked to the aggregate version that opened it.", "Commands are idempotent, compare expected version, and commit audit plus outbox atomically.", "Contribution text, actor identity, and precise location follow declared purpose, access, and retention boundaries." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Hosted frame is blocked or unavailable: detect with The host cannot load the established HTTPS source within its timeout and CSP boundary. Recover with Keep the contribution in draft, explain the boundary, and offer an external open or later retry without claiming a submission.", "User loses the success acknowledgement: detect with No provider receipt exists and the contributor cannot confirm what the hosted surface showed. Recover with Leave the attempt unresolved and allow a deliberate new attempt; never infer completion from iframe navigation.", "Reconciliation finds an existing duplicate: detect with Supported search resolves the same place identity or a reviewer establishes duplicate ownership. Recover with Reject with duplicate reason and link the known Mappls Pin as context, not as evidence that this attempt created it.", "No public result appears within the operating window: detect with Every bounded supported-source check returns no qualifying Mappls identity before the stated review deadline. Recover with Keep pending or reject according to published host policy and expose the last check time without promising a provider SLA.", "Application restarts during review: detect with An in-flight command lacks acknowledgement while aggregate, command key, and outbox state are durable. Recover with Reload the aggregate and replay the same command key; do not duplicate an attempt, decision, or notification." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Place Contribution Desk capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (8 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Widget opens, contributor reports, and abandonment by attempt", "Time from report to first reconciliation and terminal decision", "Pending age and last supported-source check", "Publication evidence source and Mappls Pin validity", "Duplicate and rejection reasons without opaque provider payloads", "Withdrawal count explicitly separated from provider-side deletion", "Idempotency replay and optimistic version conflict rate", "Outbox backlog, retry, and dead-letter age" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"widget_open\" | \"submission_reported\" | \"publication_pending\" | \"published\" | \"rejected\" | \"withdrawn\";\ntype CommandName = \"create_contribution\" | \"open_widget\" | \"report_submission\" | \"queue_reconciliation\" | \"confirm_publication\" | \"reject\" | \"retry\" | \"withdraw\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_contribution\": { from: [null], to: \"draft\", event: \"place_contribution.created\" },\n \"open_widget\": { from: [\"draft\"], to: \"widget_open\", event: \"place_contribution.widget_opened\" },\n \"report_submission\": { from: [\"widget_open\"], to: \"submission_reported\", event: \"place_contribution.submission_reported\" },\n \"queue_reconciliation\": { from: [\"submission_reported\"], to: \"publication_pending\", event: \"place_contribution.reconciliation_queued\" },\n \"confirm_publication\": { from: [\"submission_reported\", \"publication_pending\"], to: \"published\", event: \"place_contribution.published\" },\n \"reject\": { from: [\"submission_reported\", \"publication_pending\"], to: \"rejected\", event: \"place_contribution.rejected\" },\n \"retry\": { from: [\"rejected\"], to: \"widget_open\", event: \"place_contribution.retried\" },\n \"withdraw\": { from: [\"draft\", \"widget_open\", \"submission_reported\", \"publication_pending\"], to: \"withdrawn\", event: \"place_contribution.withdrawn\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_place_contribution_publication (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_place_contribution_publication_commands (\n aggregate_id text NOT NULL REFERENCES journey_place_contribution_publication(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_place_contribution_publication_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"place-contribution-publication\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"place-contribution-publication\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile placecontribution identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_contribution\",\n \"aggregateId\": \"fixture-place-contribution-publication-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_place-contribution-publication_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=place-contribution-publication&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=place-contribution-publication&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=place-contribution-publication&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=place-contribution-publication&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=place-contribution-publication&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 8 reviewed transitions are implemented with actor and source-state checks.", "All 8 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Place Contribution Desk capstone passes 8 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/place-contribution-publication/workshop", "apiPath": "/api/journey-workshops?journey=place-contribution-publication", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Entitled RealView remote inspection - Identity: `journey-workshop:realview-remote-inspection` - Canonical: https://developer.mappls.com/journeys/realview-remote-inspection/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "realview-remote-inspection", "journeySlug": "realview-remote-inspection", "title": "Build Entitled RealView remote inspection", "summary": "An eight-lab, source-bounded workshop for the complete remote visual inspection lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection", "actorCount": 5, "stateCount": 10, "transitionCount": 11, "eventCount": 11, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "contractSlugs": [], "relatedTutorialSlugs": [], "sample": { "slug": "realview-inspection-desk", "name": "RealView Inspection Desk", "downloadPath": "/downloads/realview-inspection-desk.zip", "checksumPath": "/downloads/realview-inspection-desk.zip.sha256", "verifiedTestCount": 10, "runCommand": "npm test --workspace @mappls-example/realview-inspection-desk" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the remote visual inspection blueprint into an explicit aggregate boundary owned by the application.", "build": [ "draft: The host owns an inspection purpose, external asset/site identity, Mappls Pin or coordinate, classification, and policy version.", "entitlement_pending: Paid product access, exact host generation, browser credential class, restrictions, expiry, quota, and permitted use are being approved.", "ready: The approved entitlement reference and bounded viewer configuration are current enough to open an attempt.", "viewing: One browser lifecycle owns the iframe, exact origin, location/radius configuration, ephemeral token-handle reference, listener, timeout, and disposal.", "coverage_unavailable: The exact Auth2 origin emitted the documented schema-valid status 204 for this attempt and configuration.", "observation_recorded: An inspector saved a bounded human checklist and notes linked to the viewer attempt, without claiming provider metadata or copying imagery.", "review_pending: An immutable observation set awaits a separately authorized reviewer under the declared purpose and policy.", "accepted: A named reviewer accepted the observation set for the exact business decision and policy version.", "rework_required: Review retained the prior observation and reason while requiring a new viewer attempt or alternate field evidence.", "cancelled: An authorized actor ended the inspection with a bounded reason while preserving prior attempts and observations." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "create_inspection by Host application: new aggregate → draft; emit realview_inspection.created.", "request_entitlement by Inspector: draft → entitlement_pending; emit realview_inspection.entitlement_requested.", "confirm_entitlement by Platform administrator: entitlement_pending → ready; emit realview_inspection.entitlement_confirmed.", "open_viewer by Inspector: ready | coverage_unavailable | rework_required → viewing; emit realview_inspection.viewer_opened.", "record_no_coverage by Host application: viewing → coverage_unavailable; emit realview_inspection.coverage_unavailable.", "record_observation by Inspector: viewing → observation_recorded; emit realview_inspection.observation_recorded.", "submit_review by Inspector: observation_recorded → review_pending; emit realview_inspection.review_requested.", "accept by Inspection reviewer: review_pending → accepted; emit realview_inspection.accepted.", "request_rework by Inspection reviewer: review_pending → rework_required; emit realview_inspection.rework_requested.", "record_entitlement_expired by Host application: ready | viewing → entitlement_pending; emit realview_inspection.entitlement_expired.", "cancel by Inspector: draft | entitlement_pending | ready | viewing | coverage_unavailable | observation_recorded | review_pending | rework_required → cancelled; emit realview_inspection.cancelled." ], "prove": [ "create_inspection resolves to realview-remote-inspection-realview-inspection-created without claiming a provider webhook payload.", "request_entitlement resolves to realview-remote-inspection-realview-inspection-entitlement-requested without claiming a provider webhook payload.", "confirm_entitlement resolves to realview-remote-inspection-realview-inspection-entitlement-confirmed without claiming a provider webhook payload.", "open_viewer resolves to realview-remote-inspection-realview-inspection-viewer-opened without claiming a provider webhook payload.", "record_no_coverage resolves to realview-remote-inspection-realview-inspection-coverage-unavailable without claiming a provider webhook payload.", "record_observation resolves to realview-remote-inspection-realview-inspection-observation-recorded without claiming a provider webhook payload.", "submit_review resolves to realview-remote-inspection-realview-inspection-review-requested without claiming a provider webhook payload.", "accept resolves to realview-remote-inspection-realview-inspection-accepted without claiming a provider webhook payload.", "request_rework resolves to realview-remote-inspection-realview-inspection-rework-requested without claiming a provider webhook payload.", "record_entitlement_expired resolves to realview-remote-inspection-realview-inspection-entitlement-expired without claiming a provider webhook payload.", "cancel resolves to realview-remote-inspection-realview-inspection-cancelled without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Inspection aggregate: Current purpose, asset/site and location identity, ownership, policy, state, and optimistic version. Keys: inspectionId, externalId, assetId, mapplsPinOrCoordinate, purpose, state, version.", "Entitlement reference: Non-secret proof of the approved product generation and credential policy. Keys: entitlementRef, product, host, environment, credentialClass, expiresAt, restrictionFingerprint.", "Viewer attempt: Immutable browser lifecycle and documented no-imagery outcome. Keys: attemptId, configFingerprint, tokenHandleRef, openedAt, disposedAt, coverageStatus.", "Observation and review: Human-authored evidence and separately authorized decision without copied imagery. Keys: observationId, attemptId, checklist, notes, observedAt, reviewer, decision, policyVersion.", "Audit and outbox: Append-only transitions and exactly-once-in-effect downstream delivery. Keys: eventId, aggregateVersion, actor, idempotencyKey, outboxStatus." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "No server secret, browser token value, or complete token-bearing iframe URL is persisted, logged, analyzed, exported, or sent to a model.", "The exact selected origin and narrow documented schema are checked before any browser message reaches domain state.", "Status 204 proves only no imagery for one attempt and configuration; HTTP 200 and frame load prove only a delivered shell.", "Human observation is distinct from provider imagery, panorama metadata, measurement, currentness, and inspection acceptance.", "Imagery is not copied, screenshotted, exported, or retained without an explicit licensed product contract and purpose-specific policy.", "Every command is idempotent, compares expected version, and commits snapshot, audit, receipt, and outbox atomically.", "Reviewer acceptance is attributable and cannot be performed by the same automated actor that created the observation." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Iframe returns a shell but no usable imagery: detect with HTTP/frame load occurred without entitled viewing or the documented 204 signal. Recover with Keep viewing unresolved until a bounded timeout, then record a host technical outcome rather than coverage or completion.", "Message uses a lookalike origin or malformed payload: detect with Exact origin, object shape, field count, or integer status validation fails. Recover with Reject before domain processing, retain only a safe rejection metric, and never store the opaque payload.", "Entitlement expires during viewing: detect with The entitlement reference is expired/revoked or the account-approved broker reports token expiry. Recover with Dispose the viewer, remove the ephemeral handle, return to entitlement pending, and retain the incomplete attempt.", "Imagery is unavailable for the selected radius: detect with The active attempt receives the documented exact-origin status 204 message. Recover with Record configuration-specific no coverage and offer justified radius/location retry or alternate field evidence.", "Reviewer cannot rely on the observation: detect with Checklist is incomplete, limitations are missing, purpose changed, or stronger field evidence is required. Recover with Request rework without overwriting the observation or prior viewer attempt.", "Application restarts after an unknown command outcome: detect with Client lacks acknowledgement while aggregate, command key, and outbox state are durable. Recover with Reload and replay the same command key; never create another attempt or review decision to recover transport uncertainty." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the RealView Inspection Desk capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (10 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Entitlement request age, confirmation, expiry, revocation, and renewal without token values", "Viewer open, time-to-first-useful-state, timeout, disposal, and superseded-attempt count", "Exact-origin/schema rejection counts without raw payload retention", "Status 204 rate by bounded configuration fingerprint, not generalized geography", "Observation completeness, limitation flags, and review duration", "Rework reason and new-attempt conversion", "Credential-bearing URL log/screenshot/model-context prevention checks", "Idempotency replay, optimistic conflict, audit, outbox backlog, retry, and dead-letter age" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"draft\" | \"entitlement_pending\" | \"ready\" | \"viewing\" | \"coverage_unavailable\" | \"observation_recorded\" | \"review_pending\" | \"accepted\" | \"rework_required\" | \"cancelled\";\ntype CommandName = \"create_inspection\" | \"request_entitlement\" | \"confirm_entitlement\" | \"open_viewer\" | \"record_no_coverage\" | \"record_observation\" | \"submit_review\" | \"accept\" | \"request_rework\" | \"record_entitlement_expired\" | \"cancel\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"create_inspection\": { from: [null], to: \"draft\", event: \"realview_inspection.created\" },\n \"request_entitlement\": { from: [\"draft\"], to: \"entitlement_pending\", event: \"realview_inspection.entitlement_requested\" },\n \"confirm_entitlement\": { from: [\"entitlement_pending\"], to: \"ready\", event: \"realview_inspection.entitlement_confirmed\" },\n \"open_viewer\": { from: [\"ready\", \"coverage_unavailable\", \"rework_required\"], to: \"viewing\", event: \"realview_inspection.viewer_opened\" },\n \"record_no_coverage\": { from: [\"viewing\"], to: \"coverage_unavailable\", event: \"realview_inspection.coverage_unavailable\" },\n \"record_observation\": { from: [\"viewing\"], to: \"observation_recorded\", event: \"realview_inspection.observation_recorded\" },\n \"submit_review\": { from: [\"observation_recorded\"], to: \"review_pending\", event: \"realview_inspection.review_requested\" },\n \"accept\": { from: [\"review_pending\"], to: \"accepted\", event: \"realview_inspection.accepted\" },\n \"request_rework\": { from: [\"review_pending\"], to: \"rework_required\", event: \"realview_inspection.rework_requested\" },\n \"record_entitlement_expired\": { from: [\"ready\", \"viewing\"], to: \"entitlement_pending\", event: \"realview_inspection.entitlement_expired\" },\n \"cancel\": { from: [\"draft\", \"entitlement_pending\", \"ready\", \"viewing\", \"coverage_unavailable\", \"observation_recorded\", \"review_pending\", \"rework_required\"], to: \"cancelled\", event: \"realview_inspection.cancelled\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_realview_remote_inspection (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_realview_remote_inspection_commands (\n aggregate_id text NOT NULL REFERENCES journey_realview_remote_inspection(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_realview_remote_inspection_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"realview-remote-inspection\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"realview-remote-inspection\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile remotevisualinspection identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"create_inspection\",\n \"aggregateId\": \"fixture-realview-remote-inspection-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_realview-remote-inspection_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=realview-remote-inspection&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=realview-remote-inspection&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=realview-remote-inspection&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=realview-remote-inspection&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=realview-remote-inspection&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 11 reviewed transitions are implemented with actor and source-state checks.", "All 11 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The RealView Inspection Desk capstone passes 10 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/realview-remote-inspection/workshop", "apiPath": "/api/journey-workshops?journey=realview-remote-inspection", "providerCalls": 0, "writesExposed": false } ``` ## journey-workshop · Build Governed SkyDNN inference review - Identity: `journey-workshop:vision-inference-review` - Canonical: https://developer.mappls.com/journeys/vision-inference-review/workshop - State model: stateful ```json { "schemaVersion": "mappls.journey-workshop.v1", "slug": "vision-inference-review", "journeySlug": "vision-inference-review", "title": "Build Governed SkyDNN inference review", "summary": "An eight-lab, source-bounded workshop for the complete vision evidence case lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "duration": "2 hr 10 min", "level": "Advanced", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case", "actorCount": 6, "stateCount": 8, "transitionCount": 8, "eventCount": 8, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "contractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "relatedTutorialSlugs": [], "sample": { "slug": "vision-evidence-desk", "name": "Vision Evidence Desk", "downloadPath": "/downloads/vision-evidence-desk.zip", "checksumPath": "/downloads/vision-evidence-desk.zip.sha256", "verifiedTestCount": 10, "runCommand": "npm test --workspace @mappls-example/vision-evidence-desk" }, "labs": [ { "slug": "model-lifecycle", "title": "Model the lifecycle before the UI", "duration": "15 min", "objective": "Turn the vision evidence case blueprint into an explicit aggregate boundary owned by the application.", "build": [ "registered: The application owns a purpose-bound case with opaque asset identity, SHA-256 content hash, media facts, capture time, location context, lawful-basis reference, and retention deadline.", "model_locked: An entitled server-discovery result and one exact API model key, fingerprint, class vocabulary, and policy version are frozen for the case.", "inference_requested: One worker owns an idempotent synchronous provider-call attempt against the exact asset and model identities.", "inferred: A schema-valid provider response has normalized labels, confidence, bounded geometry, timing, provenance, and response hash without becoming a business decision.", "review_pending: Versioned policy places the immutable result in an uncertainty, sensitive-class, or mandatory-sampling review lane.", "accepted: An independent reviewer accepted the derived evidence for the declared purpose and exact policy/model/output versions.", "rejected: An independent reviewer rejected the result with an attributable reason while retaining the immutable provider evidence.", "redacted: Derived labels and geometry were removed at the retention deadline while the minimum decision, hashes, policy, and audit record remain." ], "prove": [ "Every persisted state exists in the reviewed blueprint.", "Terminal states reject ordinary forward commands.", "Recovery text is operational guidance, not another hidden state." ] }, { "slug": "command-event-contract", "title": "Implement every command and event pair", "duration": "20 min", "objective": "Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together.", "build": [ "register_case by Asset steward: new aggregate → registered; emit vision.case_registered.", "lock_model by Vision worker: registered → model_locked; emit vision.model_locked.", "request_inference by Vision worker: model_locked → inference_requested; emit vision.inference_requested.", "record_inference by Vision worker: inference_requested → inferred; emit vision.inference_recorded.", "submit_review by Policy service: inferred → review_pending; emit vision.review_requested.", "accept by Independent reviewer: review_pending → accepted; emit vision.accepted.", "reject by Independent reviewer: review_pending → rejected; emit vision.rejected.", "redact by Privacy worker: inferred | review_pending | accepted | rejected → redacted; emit vision.redacted." ], "prove": [ "register_case resolves to vision-inference-review-vision-case-registered without claiming a provider webhook payload.", "lock_model resolves to vision-inference-review-vision-model-locked without claiming a provider webhook payload.", "request_inference resolves to vision-inference-review-vision-inference-requested without claiming a provider webhook payload.", "record_inference resolves to vision-inference-review-vision-inference-recorded without claiming a provider webhook payload.", "submit_review resolves to vision-inference-review-vision-review-requested without claiming a provider webhook payload.", "accept resolves to vision-inference-review-vision-accepted without claiming a provider webhook payload.", "reject resolves to vision-inference-review-vision-rejected without claiming a provider webhook payload.", "redact resolves to vision-inference-review-vision-redacted without claiming a provider webhook payload." ] }, { "slug": "durable-records", "title": "Persist restart-safe records", "duration": "15 min", "objective": "Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery.", "build": [ "Vision case: Business purpose, external identity, lifecycle, policy, retention, and optimistic version. Keys: caseId, externalId, purpose, state, version, policyVersion, retentionUntil.", "Asset envelope: Opaque, non-media identity and integrity facts for one captured source. Keys: assetRef, sha256, mediaClass, width, height, capturedAt, lawfulBasisRef.", "Model lock: Exact entitled discovery evidence and immutable model selection. Keys: serverRef, apiModelKey, modelFingerprint, classes, lockedAt.", "Inference attempt: Synchronous request lifecycle, normalized response, safe failure, timing, and provenance. Keys: attemptId, assetHash, modelFingerprint, status, resultHash, regions, timings.", "Review and retention: Policy reasoning, attributable disposition, and derived-detail redaction evidence. Keys: reviewId, reasonCodes, reviewer, decision, redactedAt.", "Audit and outbox: Append-only state evidence and exactly-once-in-effect downstream notification. Keys: eventId, aggregateVersion, idempotencyKey, actor, outboxStatus." ], "prove": [ "Process restart restores the same aggregate version and command result.", "Opaque SDK or native UI objects are not durable records.", "Provider evidence and application decisions remain distinguishable." ] }, { "slug": "concurrency-replay", "title": "Make concurrency and replay deterministic", "duration": "15 min", "objective": "Apply optimistic expected versions and aggregate-scoped idempotency before executing effects.", "build": [ "No image bytes, media URL, bearer token, credential, face, number plate, or provider-internal file path enters the reference case store.", "The provider POST /predict call is synchronous; application queue, review, retry, decision, and retention states are never attributed to SkyDNN.", "Every attempt binds an immutable asset hash to one discovered model fingerprint and policy version.", "Confidence and geometry are evidence, not a business outcome or live safety command.", "Reviewer identity is independent from the fixture inference actor and every override or rejection has a reason.", "Idempotency, optimistic versions, audit, receipts, and outbox commit atomically." ], "prove": [ "An exact replay returns the first result without another event or version.", "A reused key with different intent conflicts.", "A stale expected version changes no durable truth." ] }, { "slug": "effects-reconciliation", "title": "Control effects and unknown outcomes", "duration": "15 min", "objective": "Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results.", "build": [ "Model discovery changes after the case is prepared: detect with Current metadata fingerprint differs from the locked fingerprint. Recover with Stop, create a new model lock and attempt, and retain the original lock for comparison.", "Provider response is lost after a synchronous request: detect with The active attempt has no terminal response hash and transport outcome is ambiguous. Recover with Reconcile with the approved provider boundary when possible or record a safe failed attempt before a deliberate linked retry.", "Geometry, label, or confidence is malformed: detect with Schema, bounds, topology, vocabulary, or numeric validation fails. Recover with Quarantine derived detail, retain a safe error class, and do not send it to policy or review.", "Sensitive or uncertain inference reaches policy: detect with A privacy class, low confidence, unsupported label, or mandatory sample rule matches. Recover with Require independent review and prevent automation from issuing a terminal business or safety action.", "Retention deadline passes while review is open: detect with Derived output remains present after the committed policy deadline. Recover with Redact on schedule, close or fail the review with explicit expiry, and retain minimum audit evidence.", "Process restarts after a command timeout: detect with The client lacks acknowledgement while snapshot, receipt, audit, and outbox are durable. Recover with Reload and replay the same idempotency key without duplicating attempts, decisions, or events." ], "prove": [ "A timeout remains an unknown outcome until identity-based reconciliation completes.", "Retries are bounded and preserve the original business and command identities.", "Dead-letter or manual review retains the entire attempt history." ] }, { "slug": "hostile-scenarios", "title": "Run all hostile fixture scenarios", "duration": "15 min", "objective": "Exercise the success path plus replay, concurrency, state, and response-loss failures without an account.", "build": [ "Complete journey: Commit the shortest reviewed success path to the journey-specific operating target.", "Idempotent replay: Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "Stale version: Reject a command based on an outdated aggregate version without changing durable truth.", "Invalid transition: Reject a known command when the current state does not permit it.", "Unknown outcome recovery: Reconcile after a lost response, then replay the original command identity safely." ], "prove": [ "All fixture checks pass for all five scenarios.", "Rejected commands emit no event and do not increment version.", "The fixture makes zero provider calls and exposes no write tool." ] }, { "slug": "maintained-capstone", "title": "Trace the Vision Evidence Desk capstone", "duration": "20 min", "objective": "Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test.", "build": [ "Run the app's declared test suite (10 tests).", "Run fixture mode without a credential.", "Inspect audit and outbox evidence after each transition.", "Restart the process and continue the same aggregate." ], "prove": [ "The downloadable archive checksum verifies before execution.", "The capstone covers the journey target without inventing provider completion.", "Browser and HTTP surfaces report the same durable version." ] }, { "slug": "production-exit", "title": "Qualify the real integration boundary", "duration": "15 min", "objective": "Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants.", "build": [ "Cases by state, purpose, media class, model fingerprint, and policy version", "Model discovery drift, lock age, and incompatible input rate", "Inference latency, safe error class, result-schema rejection, and ambiguous outcome", "Confidence, label, geometry type, and review-reason distributions", "Review queue age, disposition, override, disagreement, and sampling coverage", "Sensitive-class access and derived-output retention/redaction deadlines", "Idempotency replay, version conflict, restart recovery, audit, and outbox age" ], "prove": [ "Exact product entitlement and regional behavior are validated separately.", "Provider contract tests cover success, rejection, throttling, timeout, and unknown outcome.", "Security, privacy, operations, rollback, and product owners approve exact evidence.", "Fixture completion is never presented as provider or production completion." ] } ], "codeSamples": [ { "language": "typescript", "label": "TypeScript aggregate boundary", "code": "type State = \"registered\" | \"model_locked\" | \"inference_requested\" | \"inferred\" | \"review_pending\" | \"accepted\" | \"rejected\" | \"redacted\";\ntype CommandName = \"register_case\" | \"lock_model\" | \"request_inference\" | \"record_inference\" | \"submit_review\" | \"accept\" | \"reject\" | \"redact\";\n\ntype Command = {\n name: CommandName;\n aggregateId: string;\n expectedVersion: number;\n idempotencyKey: string;\n};\n\nconst transitions = {\n \"register_case\": { from: [null], to: \"registered\", event: \"vision.case_registered\" },\n \"lock_model\": { from: [\"registered\"], to: \"model_locked\", event: \"vision.model_locked\" },\n \"request_inference\": { from: [\"model_locked\"], to: \"inference_requested\", event: \"vision.inference_requested\" },\n \"record_inference\": { from: [\"inference_requested\"], to: \"inferred\", event: \"vision.inference_recorded\" },\n \"submit_review\": { from: [\"inferred\"], to: \"review_pending\", event: \"vision.review_requested\" },\n \"accept\": { from: [\"review_pending\"], to: \"accepted\", event: \"vision.accepted\" },\n \"reject\": { from: [\"review_pending\"], to: \"rejected\", event: \"vision.rejected\" },\n \"redact\": { from: [\"inferred\", \"review_pending\", \"accepted\", \"rejected\"], to: \"redacted\", event: \"vision.redacted\" },\n} as const;\n\nexport function decide(current: { state: State | null; version: number }, command: Command) {\n const rule = transitions[command.name];\n if (command.expectedVersion !== current.version) throw new Error(\"version_conflict\");\n if (!rule.from.includes(current.state as never)) throw new Error(\"invalid_transition\");\n return {\n state: rule.to as State,\n version: current.version + 1,\n event: rule.event,\n idempotencyKey: command.idempotencyKey,\n };\n}\n\n// Persist the result, immutable event, audit row, and outbox intent atomically.\n// Store the first result by idempotencyKey before executing another effect." }, { "language": "sql", "label": "SQL durability skeleton", "code": "CREATE TABLE journey_vision_inference_review (\n aggregate_id text PRIMARY KEY,\n state text NOT NULL,\n version bigint NOT NULL CHECK (version > 0),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE journey_vision_inference_review_commands (\n aggregate_id text NOT NULL REFERENCES journey_vision_inference_review(aggregate_id),\n idempotency_key text NOT NULL,\n request_hash text NOT NULL CHECK (length(request_hash) = 64),\n committed_version bigint NOT NULL,\n result_json jsonb NOT NULL,\n PRIMARY KEY (aggregate_id, idempotency_key)\n);\n\nCREATE TABLE journey_vision_inference_review_outbox (\n event_id text PRIMARY KEY,\n aggregate_id text NOT NULL,\n aggregate_version bigint NOT NULL,\n event_type text NOT NULL,\n payload jsonb NOT NULL,\n published_at timestamptz\n);\n\n-- In one transaction: lock aggregate, compare version, decide, append audit/event,\n-- insert the outbox row, and remember the exact command result." }, { "language": "curl", "label": "Complete fixture journey", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"vision-inference-review\",\"scenario\":\"complete-journey\"}'" }, { "language": "curl", "label": "Unknown-outcome drill", "code": "curl --request POST 'https://developer.mappls.com/api/journey-simulator' \\\n+ --header 'content-type: application/json' \\\n+ --data '{\"journey\":\"vision-inference-review\",\"scenario\":\"unknown-outcome\"}'\n\n# Reconcile visionevidencecase identity and the original idempotency key.\n# Never mint a replacement key merely because the response was lost." }, { "language": "json", "label": "First command envelope", "code": "{\n \"command\": \"register_case\",\n \"aggregateId\": \"fixture-vision-inference-review-001\",\n \"expectedVersion\": 0,\n \"idempotencyKey\": \"cmd_vision-inference-review_001\",\n \"evidenceBoundary\": \"application-owned-workshop\"\n}" } ], "simulationScenarios": [ { "slug": "complete-journey", "title": "Complete journey", "outcome": "Commit the shortest reviewed success path to the journey-specific operating target.", "href": "/tools/journey-lab?journey=vision-inference-review&scenario=complete-journey#lab" }, { "slug": "idempotent-replay", "title": "Idempotent replay", "outcome": "Repeat one command identity and prove that version, event identity, and side effects do not duplicate.", "href": "/tools/journey-lab?journey=vision-inference-review&scenario=idempotent-replay#lab" }, { "slug": "stale-version", "title": "Stale version", "outcome": "Reject a command based on an outdated aggregate version without changing durable truth.", "href": "/tools/journey-lab?journey=vision-inference-review&scenario=stale-version#lab" }, { "slug": "invalid-transition", "title": "Invalid transition", "outcome": "Reject a known command when the current state does not permit it.", "href": "/tools/journey-lab?journey=vision-inference-review&scenario=invalid-transition#lab" }, { "slug": "unknown-outcome", "title": "Unknown outcome recovery", "outcome": "Reconcile after a lost response, then replay the original command identity safely.", "href": "/tools/journey-lab?journey=vision-inference-review&scenario=unknown-outcome#lab" } ], "acceptance": [ "All 8 reviewed transitions are implemented with actor and source-state checks.", "All 8 application event identities are immutable and versioned.", "Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested.", "Aggregate, event, audit, command result, and outbox intent commit atomically.", "The Vision Evidence Desk capstone passes 10 declared tests after archive checksum verification.", "Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." ], "sourceBoundary": [ "The journey blueprint and application event contracts are implementation guidance, not Mappls provider payload specifications.", "Only linked normalized contracts and source guides may define provider request syntax; empty evidence is never backfilled.", "The simulator and maintained capstone operate in explicit fixture mode and make no entitlement claim.", "Credentials, precise production payloads, opaque native objects, and provider secrets stay outside workshop inputs and durable examples." ], "releaseBoundary": "Workshop completion proves an application-owned reliability design only. Production still requires issued entitlement, exact adapter contract tests, regional and quota validation, security/privacy review, operational drills, and independent release approval.", "websitePath": "/journeys/vision-inference-review/workshop", "apiPath": "/api/journey-workshops?journey=vision-inference-review", "providerCalls": 0, "writesExposed": false } ``` ## journey-simulation · Field-service task lifecycle - Identity: `journey-simulation:field-service-task` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=field-service-task - State model: stateful ```json { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "aggregate": "task", "stateModel": "stateful", "initialState": "unassigned", "targetState": "completed", "creationCommand": "create_task", "commands": [ "create_task", "assign", "accept", "start_travel", "arrive", "submit_proof", "approve_proof" ], "events": [ "task.created", "task.assigned", "task.accepted", "task.en_route", "task.started", "task.proof_submitted", "task.completed" ], "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "contractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service" } ``` ## journey-simulation · Connected fleet trip - Identity: `journey-simulation:connected-fleet-trip` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=connected-fleet-trip - State model: stateful ```json { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "aggregate": "trip", "stateModel": "stateful", "initialState": "planned", "targetState": "closed", "creationCommand": "create_trip", "commands": [ "create_trip", "confirm_device_ready", "start_trip", "request_close", "close_trip" ], "events": [ "trip.created", "trip.ready", "trip.started", "trip.close_requested", "trip.closed" ], "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" } ``` ## journey-simulation · Fleet geofence exception - Identity: `journey-simulation:fleet-geofence-exception` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=fleet-geofence-exception - State model: stateful ```json { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "productSlug": "intouch-telematics", "aggregate": "geofence case", "stateModel": "stateful", "initialState": "draft", "targetState": "resolved", "creationCommand": null, "commands": [ "publish_geofence", "record_breach", "acknowledge_case", "resolve_case" ], "events": [ "geofence.published", "geofence.breached", "geofence_case.acknowledged", "geofence_case.resolved" ], "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" } ``` ## journey-simulation · Coordinated incident response - Identity: `journey-simulation:emergency-incident-response` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=emergency-incident-response - State model: stateful ```json { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "aggregate": "incident", "stateModel": "stateful", "initialState": "reported", "targetState": "reviewed", "creationCommand": "report_incident", "commands": [ "report_incident", "resolve_location", "dispatch", "accept_dispatch", "confirm_arrival", "resolve", "review" ], "events": [ "incident.reported", "incident.located", "incident.dispatched", "dispatch.accepted", "incident.arrived", "incident.resolved", "incident.reviewed" ], "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch" } ``` ## journey-simulation · Recoverable navigation session - Identity: `journey-simulation:navigation-session` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=navigation-session - State model: hybrid ```json { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "aggregate": "navigation session", "stateModel": "hybrid", "initialState": "draft", "targetState": "ended", "creationCommand": null, "commands": [ "calculate_route", "start_guidance", "confirm_arrival", "end_session" ], "events": [ "route.calculated", "navigation.started", "navigation.arrived", "navigation.ended" ], "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "contractSlugs": [], "sampleSlug": "trip-planner" } ``` ## journey-simulation · Governed spatial analysis - Identity: `journey-simulation:governed-spatial-analysis` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=governed-spatial-analysis - State model: hybrid ```json { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "aggregate": "analysis run", "stateModel": "hybrid", "initialState": "draft", "targetState": "shared", "creationCommand": "create_dataset_version", "commands": [ "create_dataset_version", "validate", "publish", "run_analysis", "complete_analysis", "create_share" ], "events": [ "dataset.version_created", "dataset.validation_started", "dataset.published", "analysis.started", "analysis.completed", "share.created" ], "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "contractSlugs": [], "sampleSlug": "retail-site-lab" } ``` ## journey-simulation · Durable multi-stop itinerary - Identity: `journey-simulation:durable-weekend-itinerary` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=durable-weekend-itinerary - State model: hybrid ```json { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "aggregate": "trip itinerary", "stateModel": "hybrid", "initialState": "draft", "targetState": "completed", "creationCommand": "create_trip", "commands": [ "create_trip", "add_or_reorder_stop", "preview_route", "start_trip", "visit_or_skip_next", "complete_trip" ], "events": [ "trip.created", "trip.sequence_changed", "trip.route_previewed", "trip.started", "trip.stop_completed", "trip.completed" ], "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner" } ``` ## journey-simulation · Consented address verification - Identity: `journey-simulation:consented-address-verification` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=consented-address-verification - State model: stateful ```json { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "aggregate": "address verification", "stateModel": "stateful", "initialState": "entered", "targetState": "verified", "creationCommand": "enter_verification", "commands": [ "enter_verification", "normalize_address", "authorize_capture", "capture_evidence", "compare", "verify" ], "events": [ "address_verification.entered", "address_verification.normalized", "address_verification.capture_authorized", "address_verification.evidence_captured", "address_verification.compared", "address_verification.verified" ], "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier" } ``` ## journey-simulation · Governed spatial agent run - Identity: `journey-simulation:governed-spatial-agent-run` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=governed-spatial-agent-run - State model: stateful ```json { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "aggregate": "agent run", "stateModel": "stateful", "initialState": "asked", "targetState": "completed", "creationCommand": "ask", "commands": [ "ask", "create_plan", "approve_plan", "start_execution", "complete_execution" ], "events": [ "agent.question_received", "agent.plan_created", "agent.plan_approved", "agent.execution_started", "agent.execution_completed" ], "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent" } ``` ## journey-simulation · Offline automotive release - Identity: `journey-simulation:offline-automotive-release` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=offline-automotive-release - State model: stateful ```json { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "aggregate": "device release", "stateModel": "stateful", "initialState": "manufactured", "targetState": "operational", "creationCommand": "register_device", "commands": [ "register_device", "activate", "stage_base_release", "qualify" ], "events": [ "device.registered", "license.activated", "release.installed", "release.qualified" ], "sourceGuideSlugs": [], "contractSlugs": [], "sampleSlug": "offline-release-control" } ``` ## journey-simulation · Application-owned widget selection - Identity: `journey-simulation:widget-selection-session` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=widget-selection-session - State model: hybrid ```json { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "aggregate": "widget selection session", "stateModel": "hybrid", "initialState": "draft", "targetState": "submitted", "creationCommand": "create_session", "commands": [ "create_session", "open_widget", "receive_candidate", "accept_selection", "submit" ], "events": [ "host.session_created", "widget.opened", "location.candidate_received", "location.selected", "host.submitted" ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "contractSlugs": [], "sampleSlug": "widget-journey-host" } ``` ## journey-simulation · iOS direction planning and navigation handoff - Identity: `journey-simulation:ios-direction-planning-handoff` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=ios-direction-planning-handoff - State model: hybrid ```json { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "aggregate": "route planning session", "stateModel": "hybrid", "initialState": "draft", "targetState": "handed_off", "creationCommand": "create_plan", "commands": [ "create_plan", "open_direction_ui", "request_routes", "receive_routes", "request_navigation", "confirm_handoff" ], "events": [ "route_plan.created", "route_plan.editor_opened", "route_plan.calculation_requested", "route_plan.candidates_received", "route_plan.navigation_requested", "route_plan.navigation_handed_off" ], "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "contractSlugs": [], "sampleSlug": "deep-link-journey-host" } ``` ## journey-simulation · iOS geofence draft and publication boundary - Identity: `journey-simulation:ios-geofence-draft` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=ios-geofence-draft - State model: hybrid ```json { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "aggregate": "geofence draft", "stateModel": "hybrid", "initialState": "draft", "targetState": "approved_draft", "creationCommand": "create_geofence_draft", "commands": [ "create_geofence_draft", "open_editor", "receive_geometry", "submit_for_review", "approve_draft" ], "events": [ "geofence_draft.created", "geofence_draft.editor_opened", "geofence_draft.geometry_received", "geofence_draft.review_requested", "geofence_draft.approved" ], "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "contractSlugs": [], "sampleSlug": "deep-link-journey-host" } ``` ## journey-simulation · iOS feedback report and review - Identity: `journey-simulation:ios-feedback-report-review` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=ios-feedback-report-review - State model: hybrid ```json { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "aggregate": "feedback report", "stateModel": "hybrid", "initialState": "draft", "targetState": "resolved", "creationCommand": "create_report", "commands": [ "create_report", "open_feedback_ui", "receive_candidate", "commit_submission", "queue_review", "resolve_report" ], "events": [ "feedback_report.created", "feedback_report.ui_opened", "feedback_report.candidate_received", "feedback_report.submitted", "feedback_report.review_queued", "feedback_report.resolved" ], "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "contractSlugs": [], "sampleSlug": "place-contribution-desk" } ``` ## journey-simulation · Consent-bound location capture evidence - Identity: `journey-simulation:location-capture-evidence` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=location-capture-evidence - State model: hybrid ```json { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "aggregate": "location capture attempt", "stateModel": "hybrid", "initialState": "draft", "targetState": "accepted", "creationCommand": "create_attempt", "commands": [ "create_attempt", "request_permission", "prepare_sdk", "start_acquisition", "receive_location", "accept_evidence" ], "events": [ "location_capture.attempt_created", "location_capture.permission_requested", "location_capture.sdk_ready", "location_capture.acquisition_started", "location_capture.candidate_received", "location_capture.evidence_accepted" ], "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "contractSlugs": [], "sampleSlug": "address-verifier" } ``` ## journey-simulation · Governed place contribution and publication - Identity: `journey-simulation:place-contribution-publication` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=place-contribution-publication - State model: stateful ```json { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "aggregate": "place contribution", "stateModel": "stateful", "initialState": "draft", "targetState": "published", "creationCommand": "create_contribution", "commands": [ "create_contribution", "open_widget", "report_submission", "queue_reconciliation", "confirm_publication" ], "events": [ "place_contribution.created", "place_contribution.widget_opened", "place_contribution.submission_reported", "place_contribution.reconciliation_queued", "place_contribution.published" ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk" } ``` ## journey-simulation · Entitled RealView remote inspection - Identity: `journey-simulation:realview-remote-inspection` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=realview-remote-inspection - State model: stateful ```json { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "aggregate": "remote visual inspection", "stateModel": "stateful", "initialState": "draft", "targetState": "accepted", "creationCommand": "create_inspection", "commands": [ "create_inspection", "request_entitlement", "confirm_entitlement", "open_viewer", "record_observation", "submit_review", "accept" ], "events": [ "realview_inspection.created", "realview_inspection.entitlement_requested", "realview_inspection.entitlement_confirmed", "realview_inspection.viewer_opened", "realview_inspection.observation_recorded", "realview_inspection.review_requested", "realview_inspection.accepted" ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "contractSlugs": [], "sampleSlug": "realview-inspection-desk" } ``` ## journey-simulation · Governed SkyDNN inference review - Identity: `journey-simulation:vision-inference-review` - Canonical: https://developer.mappls.com/tools/journey-lab?journey=vision-inference-review - State model: stateful ```json { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "aggregate": "vision evidence case", "stateModel": "stateful", "initialState": "registered", "targetState": "accepted", "creationCommand": "register_case", "commands": [ "register_case", "lock_model", "request_inference", "record_inference", "submit_review", "accept" ], "events": [ "vision.case_registered", "vision.model_locked", "vision.inference_requested", "vision.inference_recorded", "vision.review_requested", "vision.accepted" ], "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "contractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk" } ``` ## event-contract · Task Created - Identity: `event-contract:field-service-task-task-created` - Canonical: https://developer.mappls.com/events/field-service-task-task-created ```json { "slug": "field-service-task-task-created", "eventType": "task.created", "eventVersion": 1, "title": "Task Created", "summary": "Application-owned task fact emitted after create_task reaches unassigned.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "create_task", "actor": "Integration service", "from": [], "to": "unassigned", "idempotency": "Use the upstream job ID as a stable creation key." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_created", "eventType": "task.created", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Integration service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "unassigned", "command": "create_task", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-created", "title": "task.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use the upstream job ID as a stable creation key." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskCreated(event, seen) {\n if (event.eventType !== \"task.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-created" } ] } ``` ## event-contract · Task Assigned - Identity: `event-contract:field-service-task-task-assigned` - Canonical: https://developer.mappls.com/events/field-service-task-task-assigned ```json { "slug": "field-service-task-task-assigned", "eventType": "task.assigned", "eventVersion": 1, "title": "Task Assigned", "summary": "Application-owned task fact emitted after assign reaches assigned.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "assign", "actor": "Dispatcher", "from": [ "unassigned", "assigned" ], "to": "assigned", "idempotency": "Deduplicate by dispatcher command ID and compare expected task version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_assigned", "eventType": "task.assigned", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Dispatcher", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "assigned", "command": "assign", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-assigned", "title": "task.assigned application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.assigned" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Deduplicate by dispatcher command ID and compare expected task version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskAssigned(event, seen) {\n if (event.eventType !== \"task.assigned\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.assigned\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.assigned\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskAssigned(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.assigned\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-assigned" } ] } ``` ## event-contract · Task Accepted - Identity: `event-contract:field-service-task-task-accepted` - Canonical: https://developer.mappls.com/events/field-service-task-task-accepted ```json { "slug": "field-service-task-task-accepted", "eventType": "task.accepted", "eventVersion": 1, "title": "Task Accepted", "summary": "Application-owned task fact emitted after accept reaches accepted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "accept", "actor": "Field worker", "from": [ "assigned" ], "to": "accepted", "idempotency": "Generate the key on-device before network transmission and persist it through retry." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_accepted", "eventType": "task.accepted", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Field worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "accepted", "command": "accept", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-accepted", "title": "task.accepted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.accepted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Generate the key on-device before network transmission and persist it through retry." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskAccepted(event, seen) {\n if (event.eventType !== \"task.accepted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.accepted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.accepted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskAccepted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.accepted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-accepted" } ] } ``` ## event-contract · Task En Route - Identity: `event-contract:field-service-task-task-en-route` - Canonical: https://developer.mappls.com/events/field-service-task-task-en-route ```json { "slug": "field-service-task-task-en-route", "eventType": "task.en_route", "eventVersion": 1, "title": "Task En Route", "summary": "Application-owned task fact emitted after start_travel reaches en_route.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "start_travel", "actor": "Field worker", "from": [ "accepted" ], "to": "en_route", "idempotency": "A repeated start must return the same state and must not create a second trip." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_en_route", "eventType": "task.en_route", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Field worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "en_route", "command": "start_travel", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-en-route", "title": "task.en_route application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.en_route" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "A repeated start must return the same state and must not create a second trip." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskEnRoute(event, seen) {\n if (event.eventType !== \"task.en_route\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.en_route\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.en_route\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskEnRoute(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.en_route\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-en-route" } ] } ``` ## event-contract · Task Started - Identity: `event-contract:field-service-task-task-started` - Canonical: https://developer.mappls.com/events/field-service-task-task-started ```json { "slug": "field-service-task-task-started", "eventType": "task.started", "eventVersion": 1, "title": "Task Started", "summary": "Application-owned task fact emitted after arrive reaches in_progress.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "arrive", "actor": "Field worker", "from": [ "en_route" ], "to": "in_progress", "idempotency": "Bind arrival evidence and command ID to the same transition transaction." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_started", "eventType": "task.started", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Field worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "in_progress", "command": "arrive", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-started", "title": "task.started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind arrival evidence and command ID to the same transition transaction." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskStarted(event, seen) {\n if (event.eventType !== \"task.started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-started" } ] } ``` ## event-contract · Task Proof Submitted - Identity: `event-contract:field-service-task-task-proof-submitted` - Canonical: https://developer.mappls.com/events/field-service-task-task-proof-submitted ```json { "slug": "field-service-task-task-proof-submitted", "eventType": "task.proof_submitted", "eventVersion": 1, "title": "Task Proof Submitted", "summary": "Application-owned task fact emitted after submit_proof reaches proof_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "submit_proof", "actor": "Field worker", "from": [ "in_progress" ], "to": "proof_pending", "idempotency": "Hash the evidence manifest and reject a reused key with different content." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_proof_submitted", "eventType": "task.proof_submitted", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Field worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "proof_pending", "command": "submit_proof", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-proof-submitted", "title": "task.proof_submitted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.proof_submitted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash the evidence manifest and reject a reused key with different content." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskProofSubmitted(event, seen) {\n if (event.eventType !== \"task.proof_submitted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.proof_submitted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.proof_submitted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskProofSubmitted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.proof_submitted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-proof-submitted" } ] } ``` ## event-contract · Task Completed - Identity: `event-contract:field-service-task-task-completed` - Canonical: https://developer.mappls.com/events/field-service-task-task-completed ```json { "slug": "field-service-task-task-completed", "eventType": "task.completed", "eventVersion": 1, "title": "Task Completed", "summary": "Application-owned task fact emitted after approve_proof reaches completed.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "approve_proof", "actor": "Supervisor", "from": [ "proof_pending" ], "to": "completed", "idempotency": "Commit approval and downstream outbox entries atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_completed", "eventType": "task.completed", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Supervisor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "completed", "command": "approve_proof", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-completed", "title": "task.completed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.completed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit approval and downstream outbox entries atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskCompleted(event, seen) {\n if (event.eventType !== \"task.completed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.completed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.completed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskCompleted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.completed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-completed" } ] } ``` ## event-contract · Task Proof Rejected - Identity: `event-contract:field-service-task-task-proof-rejected` - Canonical: https://developer.mappls.com/events/field-service-task-task-proof-rejected ```json { "slug": "field-service-task-task-proof-rejected", "eventType": "task.proof_rejected", "eventVersion": 1, "title": "Task Proof Rejected", "summary": "Application-owned task fact emitted after reject_proof reaches in_progress.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "field-service-task", "title": "Field-service task lifecycle", "productSlug": "workmate", "stateModel": "stateful", "aggregate": "task" }, "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "relatedContractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sampleSlug": "field-service", "producers": [ { "command": "reject_proof", "actor": "Supervisor", "from": [ "proof_pending" ], "to": "in_progress", "idempotency": "Preserve decision reason and the rejected evidence version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_field_service_task_task_proof_rejected", "eventType": "task.proof_rejected", "eventVersion": 1, "aggregateType": "task", "aggregateId": "example-field-service-task-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Supervisor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "in_progress", "command": "reject_proof", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/field-service-task-task-proof-rejected", "title": "task.proof_rejected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "task.proof_rejected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "task" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Preserve decision reason and the rejected evidence version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTaskProofRejected(event, seen) {\n if (event.eventType !== \"task.proof_rejected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"task.proof_rejected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"task.proof_rejected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTaskProofRejected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"task.proof_rejected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/field-service-task-task-proof-rejected" } ] } ``` ## event-contract · Trip Created - Identity: `event-contract:connected-fleet-trip-trip-created` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-created ```json { "slug": "connected-fleet-trip-trip-created", "eventType": "trip.created", "eventVersion": 1, "title": "Trip Created", "summary": "Application-owned trip fact emitted after create_trip reaches planned.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "create_trip", "actor": "Fleet planner", "from": [], "to": "planned", "idempotency": "Use the dispatch or order journey ID across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_created", "eventType": "trip.created", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Fleet planner", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "planned", "command": "create_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-created", "title": "trip.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use the dispatch or order journey ID across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripCreated(event, seen) {\n if (event.eventType !== \"trip.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-created" } ] } ``` ## event-contract · Trip Ready - Identity: `event-contract:connected-fleet-trip-trip-ready` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-ready ```json { "slug": "connected-fleet-trip-trip-ready", "eventType": "trip.ready", "eventVersion": 1, "title": "Trip Ready", "summary": "Application-owned trip fact emitted after confirm_device_ready reaches ready.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "confirm_device_ready", "actor": "Telematics service", "from": [ "planned" ], "to": "ready", "idempotency": "Bind the decision to device identity and observed health version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_ready", "eventType": "trip.ready", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Telematics service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "ready", "command": "confirm_device_ready", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-ready", "title": "trip.ready application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.ready" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind the decision to device identity and observed health version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripReady(event, seen) {\n if (event.eventType !== \"trip.ready\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.ready\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.ready\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripReady(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.ready\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-ready" } ] } ``` ## event-contract · Trip Started - Identity: `event-contract:connected-fleet-trip-trip-started` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-started ```json { "slug": "connected-fleet-trip-trip-started", "eventType": "trip.started", "eventVersion": 1, "title": "Trip Started", "summary": "Application-owned trip fact emitted after start_trip reaches active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "start_trip", "actor": "Driver", "from": [ "ready" ], "to": "active", "idempotency": "Persist the driver command ID before the first transmission." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_started", "eventType": "trip.started", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Driver", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "active", "command": "start_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-started", "title": "trip.started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Persist the driver command ID before the first transmission." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripStarted(event, seen) {\n if (event.eventType !== \"trip.started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-started" } ] } ``` ## event-contract · Trip Exception Raised - Identity: `event-contract:connected-fleet-trip-trip-exception-raised` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-exception-raised ```json { "slug": "connected-fleet-trip-trip-exception-raised", "eventType": "trip.exception_raised", "eventVersion": 1, "title": "Trip Exception Raised", "summary": "Application-owned trip fact emitted after raise_exception reaches exception.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "raise_exception", "actor": "Telematics service", "from": [ "active", "exception" ], "to": "exception", "idempotency": "Derive a stable key from rule, asset, and source-event identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_exception_raised", "eventType": "trip.exception_raised", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Telematics service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "exception", "command": "raise_exception", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-exception-raised", "title": "trip.exception_raised application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.exception_raised" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Derive a stable key from rule, asset, and source-event identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripExceptionRaised(event, seen) {\n if (event.eventType !== \"trip.exception_raised\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.exception_raised\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.exception_raised\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripExceptionRaised(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.exception_raised\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-exception-raised" } ] } ``` ## event-contract · Trip Exception Resolved - Identity: `event-contract:connected-fleet-trip-trip-exception-resolved` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-exception-resolved ```json { "slug": "connected-fleet-trip-trip-exception-resolved", "eventType": "trip.exception_resolved", "eventVersion": 1, "title": "Trip Exception Resolved", "summary": "Application-owned trip fact emitted after resolve_exception reaches active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "resolve_exception", "actor": "Operations controller", "from": [ "exception" ], "to": "active", "idempotency": "Record acknowledgement and resolution command IDs separately." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_exception_resolved", "eventType": "trip.exception_resolved", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations controller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "active", "command": "resolve_exception", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-exception-resolved", "title": "trip.exception_resolved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.exception_resolved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Record acknowledgement and resolution command IDs separately." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripExceptionResolved(event, seen) {\n if (event.eventType !== \"trip.exception_resolved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.exception_resolved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.exception_resolved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripExceptionResolved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.exception_resolved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-exception-resolved" } ] } ``` ## event-contract · Trip Close Requested - Identity: `event-contract:connected-fleet-trip-trip-close-requested` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-close-requested ```json { "slug": "connected-fleet-trip-trip-close-requested", "eventType": "trip.close_requested", "eventVersion": 1, "title": "Trip Close Requested", "summary": "Application-owned trip fact emitted after request_close reaches closing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "request_close", "actor": "Driver", "from": [ "active", "exception" ], "to": "closing", "idempotency": "The same close request may be safely replayed while finalization runs." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_close_requested", "eventType": "trip.close_requested", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Driver", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "closing", "command": "request_close", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-close-requested", "title": "trip.close_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.close_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The same close request may be safely replayed while finalization runs." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripCloseRequested(event, seen) {\n if (event.eventType !== \"trip.close_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.close_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.close_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripCloseRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.close_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-close-requested" } ] } ``` ## event-contract · Trip Closed - Identity: `event-contract:connected-fleet-trip-trip-closed` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-closed ```json { "slug": "connected-fleet-trip-trip-closed", "eventType": "trip.closed", "eventVersion": 1, "title": "Trip Closed", "summary": "Application-owned trip fact emitted after close_trip reaches closed.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "trip" }, "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" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "close_trip", "actor": "Telematics service", "from": [ "closing" ], "to": "closed", "idempotency": "Provider close and internal completion must reconcile to one terminal version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_connected_fleet_trip_trip_closed", "eventType": "trip.closed", "eventVersion": 1, "aggregateType": "trip", "aggregateId": "example-connected-fleet-trip-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Telematics service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "closed", "command": "close_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/connected-fleet-trip-trip-closed", "title": "trip.closed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.closed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Provider close and internal completion must reconcile to one terminal version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripClosed(event, seen) {\n if (event.eventType !== \"trip.closed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.closed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.closed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripClosed(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.closed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/connected-fleet-trip-trip-closed" } ] } ``` ## event-contract · Geofence Published - Identity: `event-contract:fleet-geofence-exception-geofence-published` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-published ```json { "slug": "fleet-geofence-exception-geofence-published", "eventType": "geofence.published", "eventVersion": 1, "title": "Geofence Published", "summary": "Application-owned geofence case fact emitted after publish_geofence reaches active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "geofence case" }, "sourceGuideSlugs": [ "mappls-intouch-rest-apis", "mapmyindia-intouch-web-plugins" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "publish_geofence", "actor": "Fleet administrator", "from": [ "draft" ], "to": "active", "idempotency": "Key by internal rule ID and definition version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_fleet_geofence_exception_geofence_published", "eventType": "geofence.published", "eventVersion": 1, "aggregateType": "geofence case", "aggregateId": "example-fleet-geofence-exception-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Fleet administrator", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "active", "command": "publish_geofence", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/fleet-geofence-exception-geofence-published", "title": "geofence.published application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence.published" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Key by internal rule ID and definition version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofencePublished(event, seen) {\n if (event.eventType !== \"geofence.published\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence.published\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence.published\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofencePublished(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence.published\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/fleet-geofence-exception-geofence-published" } ] } ``` ## event-contract · Geofence Breached - Identity: `event-contract:fleet-geofence-exception-geofence-breached` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-breached ```json { "slug": "fleet-geofence-exception-geofence-breached", "eventType": "geofence.breached", "eventVersion": 1, "title": "Geofence Breached", "summary": "Application-owned geofence case fact emitted after record_breach reaches breached.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "geofence case" }, "sourceGuideSlugs": [ "mappls-intouch-rest-apis", "mapmyindia-intouch-web-plugins" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "record_breach", "actor": "Telematics service", "from": [ "active", "breached" ], "to": "breached", "idempotency": "Use provider activity identity plus rule version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_fleet_geofence_exception_geofence_breached", "eventType": "geofence.breached", "eventVersion": 1, "aggregateType": "geofence case", "aggregateId": "example-fleet-geofence-exception-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Telematics service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "breached", "command": "record_breach", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/fleet-geofence-exception-geofence-breached", "title": "geofence.breached application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence.breached" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use provider activity identity plus rule version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceBreached(event, seen) {\n if (event.eventType !== \"geofence.breached\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence.breached\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence.breached\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceBreached(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence.breached\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/fleet-geofence-exception-geofence-breached" } ] } ``` ## event-contract · Geofence Case Acknowledged - Identity: `event-contract:fleet-geofence-exception-geofence-case-acknowledged` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-case-acknowledged ```json { "slug": "fleet-geofence-exception-geofence-case-acknowledged", "eventType": "geofence_case.acknowledged", "eventVersion": 1, "title": "Geofence Case Acknowledged", "summary": "Application-owned geofence case fact emitted after acknowledge_case reaches acknowledged.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "geofence case" }, "sourceGuideSlugs": [ "mappls-intouch-rest-apis", "mapmyindia-intouch-web-plugins" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "acknowledge_case", "actor": "Operations controller", "from": [ "breached" ], "to": "acknowledged", "idempotency": "Deduplicate the operator action, not the underlying telemetry." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_fleet_geofence_exception_geofence_case_acknowledged", "eventType": "geofence_case.acknowledged", "eventVersion": 1, "aggregateType": "geofence case", "aggregateId": "example-fleet-geofence-exception-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations controller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "acknowledged", "command": "acknowledge_case", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/fleet-geofence-exception-geofence-case-acknowledged", "title": "geofence_case.acknowledged application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_case.acknowledged" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Deduplicate the operator action, not the underlying telemetry." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceCaseAcknowledged(event, seen) {\n if (event.eventType !== \"geofence_case.acknowledged\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_case.acknowledged\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_case.acknowledged\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceCaseAcknowledged(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_case.acknowledged\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/fleet-geofence-exception-geofence-case-acknowledged" } ] } ``` ## event-contract · Geofence Case Resolved - Identity: `event-contract:fleet-geofence-exception-geofence-case-resolved` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-case-resolved ```json { "slug": "fleet-geofence-exception-geofence-case-resolved", "eventType": "geofence_case.resolved", "eventVersion": 1, "title": "Geofence Case Resolved", "summary": "Application-owned geofence case fact emitted after resolve_case reaches resolved.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "geofence case" }, "sourceGuideSlugs": [ "mappls-intouch-rest-apis", "mapmyindia-intouch-web-plugins" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "resolve_case", "actor": "Operations controller", "from": [ "acknowledged" ], "to": "resolved", "idempotency": "Commit outcome, evidence references, and notification outbox atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_fleet_geofence_exception_geofence_case_resolved", "eventType": "geofence_case.resolved", "eventVersion": 1, "aggregateType": "geofence case", "aggregateId": "example-fleet-geofence-exception-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations controller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "resolved", "command": "resolve_case", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/fleet-geofence-exception-geofence-case-resolved", "title": "geofence_case.resolved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_case.resolved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit outcome, evidence references, and notification outbox atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceCaseResolved(event, seen) {\n if (event.eventType !== \"geofence_case.resolved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_case.resolved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_case.resolved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceCaseResolved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_case.resolved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/fleet-geofence-exception-geofence-case-resolved" } ] } ``` ## event-contract · Geofence Retired - Identity: `event-contract:fleet-geofence-exception-geofence-retired` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-retired ```json { "slug": "fleet-geofence-exception-geofence-retired", "eventType": "geofence.retired", "eventVersion": 1, "title": "Geofence Retired", "summary": "Application-owned geofence case fact emitted after retire_geofence reaches retired.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "productSlug": "intouch-telematics", "stateModel": "stateful", "aggregate": "geofence case" }, "sourceGuideSlugs": [ "mappls-intouch-rest-apis", "mapmyindia-intouch-web-plugins" ], "relatedContractSlugs": [ "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", "producers": [ { "command": "retire_geofence", "actor": "Fleet administrator", "from": [ "draft", "active" ], "to": "retired", "idempotency": "Reconcile provider deletion and internal retirement with one command key." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_fleet_geofence_exception_geofence_retired", "eventType": "geofence.retired", "eventVersion": 1, "aggregateType": "geofence case", "aggregateId": "example-fleet-geofence-exception-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Fleet administrator", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "retired", "command": "retire_geofence", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/fleet-geofence-exception-geofence-retired", "title": "geofence.retired application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence.retired" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Reconcile provider deletion and internal retirement with one command key." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceRetired(event, seen) {\n if (event.eventType !== \"geofence.retired\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence.retired\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence.retired\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceRetired(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence.retired\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/fleet-geofence-exception-geofence-retired" } ] } ``` ## event-contract · Incident Reported - Identity: `event-contract:emergency-incident-response-incident-reported` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-reported ```json { "slug": "emergency-incident-response-incident-reported", "eventType": "incident.reported", "eventVersion": 1, "title": "Incident Reported", "summary": "Application-owned incident fact emitted after report_incident reaches reported.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "report_incident", "actor": "Call taker", "from": [], "to": "reported", "idempotency": "Use the external CAD or operations identity across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_incident_reported", "eventType": "incident.reported", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Call taker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "reported", "command": "report_incident", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-incident-reported", "title": "incident.reported application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "incident.reported" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use the external CAD or operations identity across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeIncidentReported(event, seen) {\n if (event.eventType !== \"incident.reported\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"incident.reported\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"incident.reported\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeIncidentReported(event Event, seen map[string]bool) error {\n\tif event.EventType != \"incident.reported\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-incident-reported" } ] } ``` ## event-contract · Incident Located - Identity: `event-contract:emergency-incident-response-incident-located` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-located ```json { "slug": "emergency-incident-response-incident-located", "eventType": "incident.located", "eventVersion": 1, "title": "Incident Located", "summary": "Application-owned incident fact emitted after resolve_location reaches located.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "resolve_location", "actor": "Dispatcher", "from": [ "reported" ], "to": "located", "idempotency": "Bind the accepted candidate, method, confidence, and operator decision to one command." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_incident_located", "eventType": "incident.located", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Dispatcher", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "located", "command": "resolve_location", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-incident-located", "title": "incident.located application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "incident.located" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind the accepted candidate, method, confidence, and operator decision to one command." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeIncidentLocated(event, seen) {\n if (event.eventType !== \"incident.located\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"incident.located\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"incident.located\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeIncidentLocated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"incident.located\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-incident-located" } ] } ``` ## event-contract · Incident Dispatched - Identity: `event-contract:emergency-incident-response-incident-dispatched` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-dispatched ```json { "slug": "emergency-incident-response-incident-dispatched", "eventType": "incident.dispatched", "eventVersion": 1, "title": "Incident Dispatched", "summary": "Application-owned incident fact emitted after dispatch reaches dispatched.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "dispatch", "actor": "Dispatcher", "from": [ "located" ], "to": "dispatched", "idempotency": "Compare incident version and reserve the selected unit under the same command identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_incident_dispatched", "eventType": "incident.dispatched", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Dispatcher", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "dispatched", "command": "dispatch", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-incident-dispatched", "title": "incident.dispatched application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "incident.dispatched" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Compare incident version and reserve the selected unit under the same command identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeIncidentDispatched(event, seen) {\n if (event.eventType !== \"incident.dispatched\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"incident.dispatched\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"incident.dispatched\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeIncidentDispatched(event Event, seen map[string]bool) error {\n\tif event.EventType != \"incident.dispatched\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-incident-dispatched" } ] } ``` ## event-contract · Dispatch Accepted - Identity: `event-contract:emergency-incident-response-dispatch-accepted` - Canonical: https://developer.mappls.com/events/emergency-incident-response-dispatch-accepted ```json { "slug": "emergency-incident-response-dispatch-accepted", "eventType": "dispatch.accepted", "eventVersion": 1, "title": "Dispatch Accepted", "summary": "Application-owned incident fact emitted after accept_dispatch reaches en_route.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "accept_dispatch", "actor": "Responder", "from": [ "dispatched" ], "to": "en_route", "idempotency": "The assigned unit generates and persists a command ID before transmission." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_dispatch_accepted", "eventType": "dispatch.accepted", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Responder", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "en_route", "command": "accept_dispatch", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-dispatch-accepted", "title": "dispatch.accepted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "dispatch.accepted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The assigned unit generates and persists a command ID before transmission." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeDispatchAccepted(event, seen) {\n if (event.eventType !== \"dispatch.accepted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"dispatch.accepted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"dispatch.accepted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeDispatchAccepted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"dispatch.accepted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-dispatch-accepted" } ] } ``` ## event-contract · Unit Position Recorded - Identity: `event-contract:emergency-incident-response-unit-position-recorded` - Canonical: https://developer.mappls.com/events/emergency-incident-response-unit-position-recorded ```json { "slug": "emergency-incident-response-unit-position-recorded", "eventType": "unit.position_recorded", "eventVersion": 1, "title": "Unit Position Recorded", "summary": "Application-owned incident fact emitted after record_position reaches en_route.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "record_position", "actor": "Telematics service", "from": [ "en_route" ], "to": "en_route", "idempotency": "Use provider event identity and preserve event and receipt time." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_unit_position_recorded", "eventType": "unit.position_recorded", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Telematics service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "en_route", "command": "record_position", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-unit-position-recorded", "title": "unit.position_recorded application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "unit.position_recorded" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use provider event identity and preserve event and receipt time." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeUnitPositionRecorded(event, seen) {\n if (event.eventType !== \"unit.position_recorded\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"unit.position_recorded\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"unit.position_recorded\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeUnitPositionRecorded(event Event, seen map[string]bool) error {\n\tif event.EventType != \"unit.position_recorded\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-unit-position-recorded" } ] } ``` ## event-contract · Incident Arrived - Identity: `event-contract:emergency-incident-response-incident-arrived` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-arrived ```json { "slug": "emergency-incident-response-incident-arrived", "eventType": "incident.arrived", "eventVersion": 1, "title": "Incident Arrived", "summary": "Application-owned incident fact emitted after confirm_arrival reaches on_scene.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "confirm_arrival", "actor": "Responder", "from": [ "en_route" ], "to": "on_scene", "idempotency": "Bind distance, speed, dwell, policy version, and incident version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_incident_arrived", "eventType": "incident.arrived", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Responder", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "on_scene", "command": "confirm_arrival", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-incident-arrived", "title": "incident.arrived application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "incident.arrived" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind distance, speed, dwell, policy version, and incident version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeIncidentArrived(event, seen) {\n if (event.eventType !== \"incident.arrived\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"incident.arrived\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"incident.arrived\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeIncidentArrived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"incident.arrived\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-incident-arrived" } ] } ``` ## event-contract · Incident Resolved - Identity: `event-contract:emergency-incident-response-incident-resolved` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-resolved ```json { "slug": "emergency-incident-response-incident-resolved", "eventType": "incident.resolved", "eventVersion": 1, "title": "Incident Resolved", "summary": "Application-owned incident fact emitted after resolve reaches resolved.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "resolve", "actor": "Responder", "from": [ "on_scene" ], "to": "resolved", "idempotency": "Commit outcome, responder, evidence manifest, and outbox atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_incident_resolved", "eventType": "incident.resolved", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Responder", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "resolved", "command": "resolve", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-incident-resolved", "title": "incident.resolved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "incident.resolved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit outcome, responder, evidence manifest, and outbox atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeIncidentResolved(event, seen) {\n if (event.eventType !== \"incident.resolved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"incident.resolved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"incident.resolved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeIncidentResolved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"incident.resolved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-incident-resolved" } ] } ``` ## event-contract · Incident Reviewed - Identity: `event-contract:emergency-incident-response-incident-reviewed` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-reviewed ```json { "slug": "emergency-incident-response-incident-reviewed", "eventType": "incident.reviewed", "eventVersion": 1, "title": "Incident Reviewed", "summary": "Application-owned incident fact emitted after review reaches reviewed.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "emergency-incident-response", "title": "Coordinated incident response", "productSlug": "routes-navigation", "stateModel": "stateful", "aggregate": "incident" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sampleSlug": "incident-dispatch", "producers": [ { "command": "review", "actor": "Incident commander", "from": [ "resolved" ], "to": "reviewed", "idempotency": "Review identity and incident terminal version form the stable key." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_emergency_incident_response_incident_reviewed", "eventType": "incident.reviewed", "eventVersion": 1, "aggregateType": "incident", "aggregateId": "example-emergency-incident-response-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Incident commander", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "reviewed", "command": "review", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/emergency-incident-response-incident-reviewed", "title": "incident.reviewed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "incident.reviewed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "incident" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Review identity and incident terminal version form the stable key." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeIncidentReviewed(event, seen) {\n if (event.eventType !== \"incident.reviewed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"incident.reviewed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"incident.reviewed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeIncidentReviewed(event Event, seen map[string]bool) error {\n\tif event.EventType != \"incident.reviewed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/emergency-incident-response-incident-reviewed" } ] } ``` ## event-contract · Route Calculated - Identity: `event-contract:navigation-session-route-calculated` - Canonical: https://developer.mappls.com/events/navigation-session-route-calculated ```json { "slug": "navigation-session-route-calculated", "eventType": "route.calculated", "eventVersion": 1, "title": "Route Calculated", "summary": "Application-owned navigation session fact emitted after calculate_route reaches preview.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session" }, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "relatedContractSlugs": [], "sampleSlug": "trip-planner", "producers": [ { "command": "calculate_route", "actor": "Navigation application", "from": [ "draft", "preview" ], "to": "preview", "idempotency": "Hash normalized intent and constraints for request deduplication and caching." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_navigation_session_route_calculated", "eventType": "route.calculated", "eventVersion": 1, "aggregateType": "navigation session", "aggregateId": "example-navigation-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Navigation application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "preview", "command": "calculate_route", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/navigation-session-route-calculated", "title": "route.calculated application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route.calculated" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "navigation session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash normalized intent and constraints for request deduplication and caching." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRouteCalculated(event, seen) {\n if (event.eventType !== \"route.calculated\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route.calculated\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route.calculated\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRouteCalculated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route.calculated\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/navigation-session-route-calculated" } ] } ``` ## event-contract · Navigation Started - Identity: `event-contract:navigation-session-navigation-started` - Canonical: https://developer.mappls.com/events/navigation-session-navigation-started ```json { "slug": "navigation-session-navigation-started", "eventType": "navigation.started", "eventVersion": 1, "title": "Navigation Started", "summary": "Application-owned navigation session fact emitted after start_guidance reaches navigating.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session" }, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "relatedContractSlugs": [], "sampleSlug": "trip-planner", "producers": [ { "command": "start_guidance", "actor": "Driver", "from": [ "preview" ], "to": "navigating", "idempotency": "Persist a session command ID before starting foreground resources." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_navigation_session_navigation_started", "eventType": "navigation.started", "eventVersion": 1, "aggregateType": "navigation session", "aggregateId": "example-navigation-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Driver", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "navigating", "command": "start_guidance", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/navigation-session-navigation-started", "title": "navigation.started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "navigation.started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "navigation session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Persist a session command ID before starting foreground resources." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeNavigationStarted(event, seen) {\n if (event.eventType !== \"navigation.started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"navigation.started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"navigation.started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeNavigationStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"navigation.started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/navigation-session-navigation-started" } ] } ``` ## event-contract · Reroute Requested - Identity: `event-contract:navigation-session-reroute-requested` - Canonical: https://developer.mappls.com/events/navigation-session-reroute-requested ```json { "slug": "navigation-session-reroute-requested", "eventType": "reroute.requested", "eventVersion": 1, "title": "Reroute Requested", "summary": "Application-owned navigation session fact emitted after request_reroute reaches rerouting.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session" }, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "relatedContractSlugs": [], "sampleSlug": "trip-planner", "producers": [ { "command": "request_reroute", "actor": "Navigation application", "from": [ "navigating", "rerouting" ], "to": "rerouting", "idempotency": "Coalesce equivalent deviations while one calculation is outstanding." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_navigation_session_reroute_requested", "eventType": "reroute.requested", "eventVersion": 1, "aggregateType": "navigation session", "aggregateId": "example-navigation-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Navigation application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rerouting", "command": "request_reroute", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/navigation-session-reroute-requested", "title": "reroute.requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "reroute.requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "navigation session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Coalesce equivalent deviations while one calculation is outstanding." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRerouteRequested(event, seen) {\n if (event.eventType !== \"reroute.requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"reroute.requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"reroute.requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRerouteRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"reroute.requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/navigation-session-reroute-requested" } ] } ``` ## event-contract · Route Updated - Identity: `event-contract:navigation-session-route-updated` - Canonical: https://developer.mappls.com/events/navigation-session-route-updated ```json { "slug": "navigation-session-route-updated", "eventType": "route.updated", "eventVersion": 1, "title": "Route Updated", "summary": "Application-owned navigation session fact emitted after accept_reroute reaches navigating.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session" }, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "relatedContractSlugs": [], "sampleSlug": "trip-planner", "producers": [ { "command": "accept_reroute", "actor": "Mappls navigation SDK", "from": [ "rerouting" ], "to": "navigating", "idempotency": "Apply only a response matching the latest route-intent version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_navigation_session_route_updated", "eventType": "route.updated", "eventVersion": 1, "aggregateType": "navigation session", "aggregateId": "example-navigation-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Mappls navigation SDK", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "navigating", "command": "accept_reroute", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/navigation-session-route-updated", "title": "route.updated application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route.updated" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "navigation session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Apply only a response matching the latest route-intent version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRouteUpdated(event, seen) {\n if (event.eventType !== \"route.updated\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route.updated\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route.updated\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRouteUpdated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route.updated\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/navigation-session-route-updated" } ] } ``` ## event-contract · Navigation Arrived - Identity: `event-contract:navigation-session-navigation-arrived` - Canonical: https://developer.mappls.com/events/navigation-session-navigation-arrived ```json { "slug": "navigation-session-navigation-arrived", "eventType": "navigation.arrived", "eventVersion": 1, "title": "Navigation Arrived", "summary": "Application-owned navigation session fact emitted after confirm_arrival reaches arrived.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session" }, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "relatedContractSlugs": [], "sampleSlug": "trip-planner", "producers": [ { "command": "confirm_arrival", "actor": "Navigation application", "from": [ "navigating" ], "to": "arrived", "idempotency": "Arrival policy version and stop ID form the stable key." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_navigation_session_navigation_arrived", "eventType": "navigation.arrived", "eventVersion": 1, "aggregateType": "navigation session", "aggregateId": "example-navigation-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Navigation application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "arrived", "command": "confirm_arrival", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/navigation-session-navigation-arrived", "title": "navigation.arrived application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "navigation.arrived" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "navigation session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Arrival policy version and stop ID form the stable key." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeNavigationArrived(event, seen) {\n if (event.eventType !== \"navigation.arrived\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"navigation.arrived\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"navigation.arrived\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeNavigationArrived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"navigation.arrived\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/navigation-session-navigation-arrived" } ] } ``` ## event-contract · Navigation Ended - Identity: `event-contract:navigation-session-navigation-ended` - Canonical: https://developer.mappls.com/events/navigation-session-navigation-ended ```json { "slug": "navigation-session-navigation-ended", "eventType": "navigation.ended", "eventVersion": 1, "title": "Navigation Ended", "summary": "Application-owned navigation session fact emitted after end_session reaches ended.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "navigation-session", "title": "Recoverable navigation session", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "navigation session" }, "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios" ], "relatedContractSlugs": [], "sampleSlug": "trip-planner", "producers": [ { "command": "end_session", "actor": "Driver", "from": [ "preview", "navigating", "rerouting", "arrived" ], "to": "ended", "idempotency": "Cleanup must tolerate repeated calls and partial startup." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_navigation_session_navigation_ended", "eventType": "navigation.ended", "eventVersion": 1, "aggregateType": "navigation session", "aggregateId": "example-navigation-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Driver", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "ended", "command": "end_session", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/navigation-session-navigation-ended", "title": "navigation.ended application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "navigation.ended" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "navigation session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Cleanup must tolerate repeated calls and partial startup." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeNavigationEnded(event, seen) {\n if (event.eventType !== \"navigation.ended\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"navigation.ended\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"navigation.ended\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeNavigationEnded(event Event, seen map[string]bool) error {\n\tif event.EventType != \"navigation.ended\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/navigation-session-navigation-ended" } ] } ``` ## event-contract · Dataset Version Created - Identity: `event-contract:governed-spatial-analysis-dataset-version-created` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-dataset-version-created ```json { "slug": "governed-spatial-analysis-dataset-version-created", "eventType": "dataset.version_created", "eventVersion": 1, "title": "Dataset Version Created", "summary": "Application-owned analysis run fact emitted after create_dataset_version reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run" }, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "relatedContractSlugs": [], "sampleSlug": "retail-site-lab", "producers": [ { "command": "create_dataset_version", "actor": "Data engineer", "from": [], "to": "draft", "idempotency": "Key by workspace, logical dataset, source hash, and intended version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_analysis_dataset_version_created", "eventType": "dataset.version_created", "eventVersion": 1, "aggregateType": "analysis run", "aggregateId": "example-governed-spatial-analysis-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Data engineer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_dataset_version", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-analysis-dataset-version-created", "title": "dataset.version_created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "dataset.version_created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "analysis run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Key by workspace, logical dataset, source hash, and intended version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeDatasetVersionCreated(event, seen) {\n if (event.eventType !== \"dataset.version_created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"dataset.version_created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"dataset.version_created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeDatasetVersionCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"dataset.version_created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-analysis-dataset-version-created" } ] } ``` ## event-contract · Dataset Validation Started - Identity: `event-contract:governed-spatial-analysis-dataset-validation-started` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-dataset-validation-started ```json { "slug": "governed-spatial-analysis-dataset-validation-started", "eventType": "dataset.validation_started", "eventVersion": 1, "title": "Dataset Validation Started", "summary": "Application-owned analysis run fact emitted after validate reaches validating.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run" }, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "relatedContractSlugs": [], "sampleSlug": "retail-site-lab", "producers": [ { "command": "validate", "actor": "Spatial analyst", "from": [ "draft" ], "to": "validating", "idempotency": "Reuse the same validation attempt for identical content and policy." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_analysis_dataset_validation_started", "eventType": "dataset.validation_started", "eventVersion": 1, "aggregateType": "analysis run", "aggregateId": "example-governed-spatial-analysis-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Spatial analyst", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "validating", "command": "validate", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-analysis-dataset-validation-started", "title": "dataset.validation_started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "dataset.validation_started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "analysis run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Reuse the same validation attempt for identical content and policy." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeDatasetValidationStarted(event, seen) {\n if (event.eventType !== \"dataset.validation_started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"dataset.validation_started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"dataset.validation_started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeDatasetValidationStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"dataset.validation_started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-analysis-dataset-validation-started" } ] } ``` ## event-contract · Dataset Published - Identity: `event-contract:governed-spatial-analysis-dataset-published` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-dataset-published ```json { "slug": "governed-spatial-analysis-dataset-published", "eventType": "dataset.published", "eventVersion": 1, "title": "Dataset Published", "summary": "Application-owned analysis run fact emitted after publish reaches published.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run" }, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "relatedContractSlugs": [], "sampleSlug": "retail-site-lab", "producers": [ { "command": "publish", "actor": "Workspace administrator", "from": [ "validating" ], "to": "published", "idempotency": "Commit immutable version and permissions atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_analysis_dataset_published", "eventType": "dataset.published", "eventVersion": 1, "aggregateType": "analysis run", "aggregateId": "example-governed-spatial-analysis-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Workspace administrator", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "published", "command": "publish", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-analysis-dataset-published", "title": "dataset.published application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "dataset.published" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "analysis run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit immutable version and permissions atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeDatasetPublished(event, seen) {\n if (event.eventType !== \"dataset.published\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"dataset.published\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"dataset.published\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeDatasetPublished(event Event, seen map[string]bool) error {\n\tif event.EventType != \"dataset.published\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-analysis-dataset-published" } ] } ``` ## event-contract · Analysis Started - Identity: `event-contract:governed-spatial-analysis-analysis-started` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-analysis-started ```json { "slug": "governed-spatial-analysis-analysis-started", "eventType": "analysis.started", "eventVersion": 1, "title": "Analysis Started", "summary": "Application-owned analysis run fact emitted after run_analysis reaches processing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run" }, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "relatedContractSlugs": [], "sampleSlug": "retail-site-lab", "producers": [ { "command": "run_analysis", "actor": "Spatial analyst", "from": [ "published", "ready" ], "to": "processing", "idempotency": "Hash input versions, parameters, runtime, and output owner." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_analysis_analysis_started", "eventType": "analysis.started", "eventVersion": 1, "aggregateType": "analysis run", "aggregateId": "example-governed-spatial-analysis-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Spatial analyst", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "processing", "command": "run_analysis", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-analysis-analysis-started", "title": "analysis.started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "analysis.started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "analysis run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash input versions, parameters, runtime, and output owner." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAnalysisStarted(event, seen) {\n if (event.eventType !== \"analysis.started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"analysis.started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"analysis.started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAnalysisStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"analysis.started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-analysis-analysis-started" } ] } ``` ## event-contract · Analysis Completed - Identity: `event-contract:governed-spatial-analysis-analysis-completed` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-analysis-completed ```json { "slug": "governed-spatial-analysis-analysis-completed", "eventType": "analysis.completed", "eventVersion": 1, "title": "Analysis Completed", "summary": "Application-owned analysis run fact emitted after complete_analysis reaches ready.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run" }, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "relatedContractSlugs": [], "sampleSlug": "retail-site-lab", "producers": [ { "command": "complete_analysis", "actor": "Spatial processing service", "from": [ "processing" ], "to": "ready", "idempotency": "One attempt identity can publish one immutable output manifest." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_analysis_analysis_completed", "eventType": "analysis.completed", "eventVersion": 1, "aggregateType": "analysis run", "aggregateId": "example-governed-spatial-analysis-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Spatial processing service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "ready", "command": "complete_analysis", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-analysis-analysis-completed", "title": "analysis.completed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "analysis.completed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "analysis run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One attempt identity can publish one immutable output manifest." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAnalysisCompleted(event, seen) {\n if (event.eventType !== \"analysis.completed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"analysis.completed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"analysis.completed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAnalysisCompleted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"analysis.completed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-analysis-analysis-completed" } ] } ``` ## event-contract · Share Created - Identity: `event-contract:governed-spatial-analysis-share-created` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-share-created ```json { "slug": "governed-spatial-analysis-share-created", "eventType": "share.created", "eventVersion": 1, "title": "Share Created", "summary": "Application-owned analysis run fact emitted after create_share reaches shared.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "productSlug": "gis-analytics", "stateModel": "hybrid", "aggregate": "analysis run" }, "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "relatedContractSlugs": [], "sampleSlug": "retail-site-lab", "producers": [ { "command": "create_share", "actor": "Workspace administrator", "from": [ "ready" ], "to": "shared", "idempotency": "Key by output version, audience, policy, and expiry." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_analysis_share_created", "eventType": "share.created", "eventVersion": 1, "aggregateType": "analysis run", "aggregateId": "example-governed-spatial-analysis-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Workspace administrator", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "shared", "command": "create_share", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-analysis-share-created", "title": "share.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "share.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "analysis run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Key by output version, audience, policy, and expiry." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeShareCreated(event, seen) {\n if (event.eventType !== \"share.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"share.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"share.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeShareCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"share.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-analysis-share-created" } ] } ``` ## event-contract · Trip Created - Identity: `event-contract:durable-weekend-itinerary-trip-created` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-created ```json { "slug": "durable-weekend-itinerary-trip-created", "eventType": "trip.created", "eventVersion": 1, "title": "Trip Created", "summary": "Application-owned trip itinerary fact emitted after create_trip reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "create_trip", "actor": "Traveller", "from": [], "to": "draft", "idempotency": "Use a client trip command ID before the first network attempt." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_created", "eventType": "trip.created", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-created", "title": "trip.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use a client trip command ID before the first network attempt." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripCreated(event, seen) {\n if (event.eventType !== \"trip.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-created" } ] } ``` ## event-contract · Trip Sequence Changed - Identity: `event-contract:durable-weekend-itinerary-trip-sequence-changed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-sequence-changed ```json { "slug": "durable-weekend-itinerary-trip-sequence-changed", "eventType": "trip.sequence_changed", "eventVersion": 1, "title": "Trip Sequence Changed", "summary": "Application-owned trip itinerary fact emitted after add_or_reorder_stop reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "add_or_reorder_stop", "actor": "Traveller", "from": [ "draft", "planned" ], "to": "draft", "idempotency": "Compare trip version and bind every saved item to a unique Mappls Pin." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_sequence_changed", "eventType": "trip.sequence_changed", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "add_or_reorder_stop", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-sequence-changed", "title": "trip.sequence_changed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.sequence_changed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Compare trip version and bind every saved item to a unique Mappls Pin." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripSequenceChanged(event, seen) {\n if (event.eventType !== \"trip.sequence_changed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.sequence_changed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.sequence_changed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripSequenceChanged(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.sequence_changed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-sequence-changed" } ] } ``` ## event-contract · Trip Route Previewed - Identity: `event-contract:durable-weekend-itinerary-trip-route-previewed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-route-previewed ```json { "slug": "durable-weekend-itinerary-trip-route-previewed", "eventType": "trip.route_previewed", "eventVersion": 1, "title": "Trip Route Previewed", "summary": "Application-owned trip itinerary fact emitted after preview_route reaches planned.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "preview_route", "actor": "Mappls routing service", "from": [ "draft" ], "to": "planned", "idempotency": "Hash ordered pins, profile, constraints, departure intent, and aggregate version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_route_previewed", "eventType": "trip.route_previewed", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Mappls routing service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "planned", "command": "preview_route", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-route-previewed", "title": "trip.route_previewed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.route_previewed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash ordered pins, profile, constraints, departure intent, and aggregate version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripRoutePreviewed(event, seen) {\n if (event.eventType !== \"trip.route_previewed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.route_previewed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.route_previewed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripRoutePreviewed(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.route_previewed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-route-previewed" } ] } ``` ## event-contract · Trip Started - Identity: `event-contract:durable-weekend-itinerary-trip-started` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-started ```json { "slug": "durable-weekend-itinerary-trip-started", "eventType": "trip.started", "eventVersion": 1, "title": "Trip Started", "summary": "Application-owned trip itinerary fact emitted after start_trip reaches active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "start_trip", "actor": "Traveller", "from": [ "planned" ], "to": "active", "idempotency": "Bind start to the current trip and route revision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_started", "eventType": "trip.started", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "active", "command": "start_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-started", "title": "trip.started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind start to the current trip and route revision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripStarted(event, seen) {\n if (event.eventType !== \"trip.started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-started" } ] } ``` ## event-contract · Trip Paused - Identity: `event-contract:durable-weekend-itinerary-trip-paused` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-paused ```json { "slug": "durable-weekend-itinerary-trip-paused", "eventType": "trip.paused", "eventVersion": 1, "title": "Trip Paused", "summary": "Application-owned trip itinerary fact emitted after pause_trip reaches paused.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "pause_trip", "actor": "Traveller", "from": [ "active" ], "to": "paused", "idempotency": "Record the interruption reason once under a stable client command identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_paused", "eventType": "trip.paused", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "paused", "command": "pause_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-paused", "title": "trip.paused application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.paused" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Record the interruption reason once under a stable client command identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripPaused(event, seen) {\n if (event.eventType !== \"trip.paused\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.paused\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.paused\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripPaused(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.paused\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-paused" } ] } ``` ## event-contract · Trip Resumed - Identity: `event-contract:durable-weekend-itinerary-trip-resumed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-resumed ```json { "slug": "durable-weekend-itinerary-trip-resumed", "eventType": "trip.resumed", "eventVersion": 1, "title": "Trip Resumed", "summary": "Application-owned trip itinerary fact emitted after resume_trip reaches active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "resume_trip", "actor": "Traveller", "from": [ "paused" ], "to": "active", "idempotency": "Bind resume to the paused aggregate and current route revision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_resumed", "eventType": "trip.resumed", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "active", "command": "resume_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-resumed", "title": "trip.resumed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.resumed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind resume to the paused aggregate and current route revision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripResumed(event, seen) {\n if (event.eventType !== \"trip.resumed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.resumed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.resumed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripResumed(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.resumed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-resumed" } ] } ``` ## event-contract · Trip Stop Completed - Identity: `event-contract:durable-weekend-itinerary-trip-stop-completed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-stop-completed ```json { "slug": "durable-weekend-itinerary-trip-stop-completed", "eventType": "trip.stop_completed", "eventVersion": 1, "title": "Trip Stop Completed", "summary": "Application-owned trip itinerary fact emitted after visit_or_skip_next reaches active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "visit_or_skip_next", "actor": "Traveller", "from": [ "active" ], "to": "active", "idempotency": "Generate one command identity per stop outcome; require a reason for skip." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_stop_completed", "eventType": "trip.stop_completed", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "active", "command": "visit_or_skip_next", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-stop-completed", "title": "trip.stop_completed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.stop_completed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Generate one command identity per stop outcome; require a reason for skip." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripStopCompleted(event, seen) {\n if (event.eventType !== \"trip.stop_completed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.stop_completed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.stop_completed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripStopCompleted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.stop_completed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-stop-completed" } ] } ``` ## event-contract · Trip Completed - Identity: `event-contract:durable-weekend-itinerary-trip-completed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-completed ```json { "slug": "durable-weekend-itinerary-trip-completed", "eventType": "trip.completed", "eventVersion": 1, "title": "Trip Completed", "summary": "Application-owned trip itinerary fact emitted after complete_trip reaches completed.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "complete_trip", "actor": "Traveller", "from": [ "active" ], "to": "completed", "idempotency": "Terminal version and command ID identify one completion." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_completed", "eventType": "trip.completed", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "completed", "command": "complete_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-completed", "title": "trip.completed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.completed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Terminal version and command ID identify one completion." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripCompleted(event, seen) {\n if (event.eventType !== \"trip.completed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.completed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.completed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripCompleted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.completed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-completed" } ] } ``` ## event-contract · Trip Cancelled - Identity: `event-contract:durable-weekend-itinerary-trip-cancelled` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-cancelled ```json { "slug": "durable-weekend-itinerary-trip-cancelled", "eventType": "trip.cancelled", "eventVersion": 1, "title": "Trip Cancelled", "summary": "Application-owned trip itinerary fact emitted after cancel_trip reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "trip itinerary" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api" ], "sampleSlug": "trip-planner", "producers": [ { "command": "cancel_trip", "actor": "Traveller", "from": [ "draft", "planned", "active", "paused" ], "to": "cancelled", "idempotency": "One command records actor, reason, previous state, and terminal version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_durable_weekend_itinerary_trip_cancelled", "eventType": "trip.cancelled", "eventVersion": 1, "aggregateType": "trip itinerary", "aggregateId": "example-durable-weekend-itinerary-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveller", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel_trip", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/durable-weekend-itinerary-trip-cancelled", "title": "trip.cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "trip.cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "trip itinerary" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One command records actor, reason, previous state, and terminal version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeTripCancelled(event, seen) {\n if (event.eventType !== \"trip.cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"trip.cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"trip.cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeTripCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"trip.cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/durable-weekend-itinerary-trip-cancelled" } ] } ``` ## event-contract · Address Verification Entered - Identity: `event-contract:consented-address-verification-address-verification-entered` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-entered ```json { "slug": "consented-address-verification-address-verification-entered", "eventType": "address_verification.entered", "eventVersion": 1, "title": "Address Verification Entered", "summary": "Application-owned address verification fact emitted after enter_verification reaches entered.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "enter_verification", "actor": "Application user", "from": [], "to": "entered", "idempotency": "Use the external application or case reference as durable business identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_entered", "eventType": "address_verification.entered", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "entered", "command": "enter_verification", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-entered", "title": "address_verification.entered application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.entered" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use the external application or case reference as durable business identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationEntered(event, seen) {\n if (event.eventType !== \"address_verification.entered\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.entered\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.entered\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationEntered(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.entered\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-entered" } ] } ``` ## event-contract · Address Verification Normalized - Identity: `event-contract:consented-address-verification-address-verification-normalized` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-normalized ```json { "slug": "consented-address-verification-address-verification-normalized", "eventType": "address_verification.normalized", "eventVersion": 1, "title": "Address Verification Normalized", "summary": "Application-owned address verification fact emitted after normalize_address reaches normalized.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "normalize_address", "actor": "Policy service", "from": [ "entered" ], "to": "normalized", "idempotency": "Bind normalized provider response to address-input hash and request identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_normalized", "eventType": "address_verification.normalized", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Policy service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "normalized", "command": "normalize_address", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-normalized", "title": "address_verification.normalized application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.normalized" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind normalized provider response to address-input hash and request identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationNormalized(event, seen) {\n if (event.eventType !== \"address_verification.normalized\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.normalized\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.normalized\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationNormalized(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.normalized\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-normalized" } ] } ``` ## event-contract · Address Verification Capture Authorized - Identity: `event-contract:consented-address-verification-address-verification-capture-authorized` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-capture-authorized ```json { "slug": "consented-address-verification-address-verification-capture-authorized", "eventType": "address_verification.capture_authorized", "eventVersion": 1, "title": "Address Verification Capture Authorized", "summary": "Application-owned address verification fact emitted after authorize_capture reaches capture_authorized.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "authorize_capture", "actor": "Application user", "from": [ "normalized" ], "to": "capture_authorized", "idempotency": "Consent identity, text version, subject, purpose, expiry, and retention policy form one grant." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_capture_authorized", "eventType": "address_verification.capture_authorized", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "capture_authorized", "command": "authorize_capture", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-capture-authorized", "title": "address_verification.capture_authorized application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.capture_authorized" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Consent identity, text version, subject, purpose, expiry, and retention policy form one grant." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationCaptureAuthorized(event, seen) {\n if (event.eventType !== \"address_verification.capture_authorized\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.capture_authorized\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.capture_authorized\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationCaptureAuthorized(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.capture_authorized\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-capture-authorized" } ] } ``` ## event-contract · Address Verification Consent Revoked - Identity: `event-contract:consented-address-verification-address-verification-consent-revoked` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-consent-revoked ```json { "slug": "consented-address-verification-address-verification-consent-revoked", "eventType": "address_verification.consent_revoked", "eventVersion": 1, "title": "Address Verification Consent Revoked", "summary": "Application-owned address verification fact emitted after revoke_consent reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "revoke_consent", "actor": "Application user", "from": [ "capture_authorized" ], "to": "cancelled", "idempotency": "Commit withdrawal once and reject all later evidence under that grant." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_consent_revoked", "eventType": "address_verification.consent_revoked", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "revoke_consent", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-consent-revoked", "title": "address_verification.consent_revoked application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.consent_revoked" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit withdrawal once and reject all later evidence under that grant." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationConsentRevoked(event, seen) {\n if (event.eventType !== \"address_verification.consent_revoked\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.consent_revoked\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.consent_revoked\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationConsentRevoked(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.consent_revoked\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-consent-revoked" } ] } ``` ## event-contract · Address Verification Evidence Captured - Identity: `event-contract:consented-address-verification-address-verification-evidence-captured` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-evidence-captured ```json { "slug": "consented-address-verification-address-verification-evidence-captured", "eventType": "address_verification.evidence_captured", "eventVersion": 1, "title": "Address Verification Evidence Captured", "summary": "Application-owned address verification fact emitted after capture_evidence reaches evidence_captured.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "capture_evidence", "actor": "Evidence capture application", "from": [ "capture_authorized" ], "to": "evidence_captured", "idempotency": "Use a device-generated source-event identity created before transmission." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_evidence_captured", "eventType": "address_verification.evidence_captured", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Evidence capture application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "evidence_captured", "command": "capture_evidence", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-evidence-captured", "title": "address_verification.evidence_captured application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.evidence_captured" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use a device-generated source-event identity created before transmission." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationEvidenceCaptured(event, seen) {\n if (event.eventType !== \"address_verification.evidence_captured\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.evidence_captured\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.evidence_captured\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationEvidenceCaptured(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.evidence_captured\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-evidence-captured" } ] } ``` ## event-contract · Address Verification Compared - Identity: `event-contract:consented-address-verification-address-verification-compared` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-compared ```json { "slug": "consented-address-verification-address-verification-compared", "eventType": "address_verification.compared", "eventVersion": 1, "title": "Address Verification Compared", "summary": "Application-owned address verification fact emitted after compare reaches compared.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "compare", "actor": "Policy service", "from": [ "evidence_captured" ], "to": "compared", "idempotency": "Evidence hash, normalized-place version, and policy version identify the exact comparison." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_compared", "eventType": "address_verification.compared", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Policy service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "compared", "command": "compare", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-compared", "title": "address_verification.compared application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.compared" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Evidence hash, normalized-place version, and policy version identify the exact comparison." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationCompared(event, seen) {\n if (event.eventType !== \"address_verification.compared\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.compared\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.compared\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationCompared(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.compared\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-compared" } ] } ``` ## event-contract · Address Verification Verified - Identity: `event-contract:consented-address-verification-address-verification-verified` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-verified ```json { "slug": "consented-address-verification-address-verification-verified", "eventType": "address_verification.verified", "eventVersion": 1, "title": "Address Verification Verified", "summary": "Application-owned address verification fact emitted after verify or review_verify reaches verified.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "verify", "actor": "Policy service", "from": [ "compared" ], "to": "verified", "idempotency": "Bind the terminal decision to comparison and aggregate version." }, { "command": "review_verify", "actor": "Human reviewer", "from": [ "review_required" ], "to": "verified", "idempotency": "Reviewer decision records reason, independent evidence, and any override under one identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_verified", "eventType": "address_verification.verified", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Policy service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "verified", "command": "verify", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-verified", "title": "address_verification.verified application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.verified" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind the terminal decision to comparison and aggregate version.", "Reviewer decision records reason, independent evidence, and any override under one identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationVerified(event, seen) {\n if (event.eventType !== \"address_verification.verified\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.verified\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.verified\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationVerified(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.verified\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-verified" } ] } ``` ## event-contract · Address Verification Rejected - Identity: `event-contract:consented-address-verification-address-verification-rejected` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-rejected ```json { "slug": "consented-address-verification-address-verification-rejected", "eventType": "address_verification.rejected", "eventVersion": 1, "title": "Address Verification Rejected", "summary": "Application-owned address verification fact emitted after reject or review_reject reaches rejected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "reject", "actor": "Policy service", "from": [ "compared" ], "to": "rejected", "idempotency": "Bind the terminal decision to comparison and aggregate version." }, { "command": "review_reject", "actor": "Human reviewer", "from": [ "review_required" ], "to": "rejected", "idempotency": "Reviewer decision records reason, independent evidence, and any override under one identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_rejected", "eventType": "address_verification.rejected", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Policy service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rejected", "command": "reject", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-rejected", "title": "address_verification.rejected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.rejected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind the terminal decision to comparison and aggregate version.", "Reviewer decision records reason, independent evidence, and any override under one identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationRejected(event, seen) {\n if (event.eventType !== \"address_verification.rejected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.rejected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.rejected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationRejected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.rejected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-rejected" } ] } ``` ## event-contract · Address Verification Review Required - Identity: `event-contract:consented-address-verification-address-verification-review-required` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-review-required ```json { "slug": "consented-address-verification-address-verification-review-required", "eventType": "address_verification.review_required", "eventVersion": 1, "title": "Address Verification Review Required", "summary": "Application-owned address verification fact emitted after defer reaches review_required.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "consented-address-verification", "title": "Consented address verification", "productSlug": "search-places", "stateModel": "stateful", "aggregate": "address verification" }, "sourceGuideSlugs": [ "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sampleSlug": "address-verifier", "producers": [ { "command": "defer", "actor": "Policy service", "from": [ "compared" ], "to": "review_required", "idempotency": "Create one review case per comparison version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_consented_address_verification_address_verification_review_required", "eventType": "address_verification.review_required", "eventVersion": 1, "aggregateType": "address verification", "aggregateId": "example-consented-address-verification-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Policy service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "review_required", "command": "defer", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/consented-address-verification-address-verification-review-required", "title": "address_verification.review_required application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "address_verification.review_required" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "address verification" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Create one review case per comparison version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAddressVerificationReviewRequired(event, seen) {\n if (event.eventType !== \"address_verification.review_required\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"address_verification.review_required\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"address_verification.review_required\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAddressVerificationReviewRequired(event Event, seen map[string]bool) error {\n\tif event.EventType != \"address_verification.review_required\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/consented-address-verification-address-verification-review-required" } ] } ``` ## event-contract · Agent Question Received - Identity: `event-contract:governed-spatial-agent-run-agent-question-received` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-question-received ```json { "slug": "governed-spatial-agent-run-agent-question-received", "eventType": "agent.question_received", "eventVersion": 1, "title": "Agent Question Received", "summary": "Application-owned agent run fact emitted after ask reaches asked.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "producers": [ { "command": "ask", "actor": "Application user", "from": [], "to": "asked", "idempotency": "Use a client-generated run command ID across network retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_agent_run_agent_question_received", "eventType": "agent.question_received", "eventVersion": 1, "aggregateType": "agent run", "aggregateId": "example-governed-spatial-agent-run-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "asked", "command": "ask", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-agent-run-agent-question-received", "title": "agent.question_received application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "agent.question_received" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "agent run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Use a client-generated run command ID across network retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAgentQuestionReceived(event, seen) {\n if (event.eventType !== \"agent.question_received\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"agent.question_received\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"agent.question_received\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAgentQuestionReceived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"agent.question_received\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-agent-run-agent-question-received" } ] } ``` ## event-contract · Agent Plan Created - Identity: `event-contract:governed-spatial-agent-run-agent-plan-created` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-created ```json { "slug": "governed-spatial-agent-run-agent-plan-created", "eventType": "agent.plan_created", "eventVersion": 1, "title": "Agent Plan Created", "summary": "Application-owned agent run fact emitted after create_plan reaches planned.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "producers": [ { "command": "create_plan", "actor": "Agent planner", "from": [ "asked" ], "to": "planned", "idempotency": "Canonical objective, policy, planner version, and normalized plan produce one immutable hash." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_agent_run_agent_plan_created", "eventType": "agent.plan_created", "eventVersion": 1, "aggregateType": "agent run", "aggregateId": "example-governed-spatial-agent-run-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Agent planner", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "planned", "command": "create_plan", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-agent-run-agent-plan-created", "title": "agent.plan_created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "agent.plan_created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "agent run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Canonical objective, policy, planner version, and normalized plan produce one immutable hash." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAgentPlanCreated(event, seen) {\n if (event.eventType !== \"agent.plan_created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"agent.plan_created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"agent.plan_created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAgentPlanCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"agent.plan_created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-created" } ] } ``` ## event-contract · Agent Plan Approved - Identity: `event-contract:governed-spatial-agent-run-agent-plan-approved` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-approved ```json { "slug": "governed-spatial-agent-run-agent-plan-approved", "eventType": "agent.plan_approved", "eventVersion": 1, "title": "Agent Plan Approved", "summary": "Application-owned agent run fact emitted after approve_plan reaches approved.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "producers": [ { "command": "approve_plan", "actor": "Human approver", "from": [ "planned" ], "to": "approved", "idempotency": "Bind approver decision to run version, exact plan hash, scopes, purpose, and expiry." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_agent_run_agent_plan_approved", "eventType": "agent.plan_approved", "eventVersion": 1, "aggregateType": "agent run", "aggregateId": "example-governed-spatial-agent-run-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Human approver", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "approved", "command": "approve_plan", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-agent-run-agent-plan-approved", "title": "agent.plan_approved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "agent.plan_approved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "agent run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind approver decision to run version, exact plan hash, scopes, purpose, and expiry." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAgentPlanApproved(event, seen) {\n if (event.eventType !== \"agent.plan_approved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"agent.plan_approved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"agent.plan_approved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAgentPlanApproved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"agent.plan_approved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-approved" } ] } ``` ## event-contract · Agent Plan Rejected - Identity: `event-contract:governed-spatial-agent-run-agent-plan-rejected` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-rejected ```json { "slug": "governed-spatial-agent-run-agent-plan-rejected", "eventType": "agent.plan_rejected", "eventVersion": 1, "title": "Agent Plan Rejected", "summary": "Application-owned agent run fact emitted after reject_plan reaches rejected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "producers": [ { "command": "reject_plan", "actor": "Human approver", "from": [ "planned" ], "to": "rejected", "idempotency": "Persist the review decision and reason under one command identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_agent_run_agent_plan_rejected", "eventType": "agent.plan_rejected", "eventVersion": 1, "aggregateType": "agent run", "aggregateId": "example-governed-spatial-agent-run-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Human approver", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rejected", "command": "reject_plan", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-agent-run-agent-plan-rejected", "title": "agent.plan_rejected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "agent.plan_rejected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "agent run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Persist the review decision and reason under one command identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAgentPlanRejected(event, seen) {\n if (event.eventType !== \"agent.plan_rejected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"agent.plan_rejected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"agent.plan_rejected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAgentPlanRejected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"agent.plan_rejected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-rejected" } ] } ``` ## event-contract · Agent Execution Started - Identity: `event-contract:governed-spatial-agent-run-agent-execution-started` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-execution-started ```json { "slug": "governed-spatial-agent-run-agent-execution-started", "eventType": "agent.execution_started", "eventVersion": 1, "title": "Agent Execution Started", "summary": "Application-owned agent run fact emitted after start_execution reaches executing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "producers": [ { "command": "start_execution", "actor": "Execution service", "from": [ "approved" ], "to": "executing", "idempotency": "Acquire one lease only after recalculating plan hash and rechecking approval, scopes, expiry, and policy." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_agent_run_agent_execution_started", "eventType": "agent.execution_started", "eventVersion": 1, "aggregateType": "agent run", "aggregateId": "example-governed-spatial-agent-run-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Execution service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "executing", "command": "start_execution", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-agent-run-agent-execution-started", "title": "agent.execution_started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "agent.execution_started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "agent run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Acquire one lease only after recalculating plan hash and rechecking approval, scopes, expiry, and policy." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAgentExecutionStarted(event, seen) {\n if (event.eventType !== \"agent.execution_started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"agent.execution_started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"agent.execution_started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAgentExecutionStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"agent.execution_started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-agent-run-agent-execution-started" } ] } ``` ## event-contract · Agent Execution Completed - Identity: `event-contract:governed-spatial-agent-run-agent-execution-completed` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-execution-completed ```json { "slug": "governed-spatial-agent-run-agent-execution-completed", "eventType": "agent.execution_completed", "eventVersion": 1, "title": "Agent Execution Completed", "summary": "Application-owned agent run fact emitted after complete_execution reaches completed.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "agent run" }, "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices" ], "sampleSlug": "spatial-agent", "producers": [ { "command": "complete_execution", "actor": "Execution service", "from": [ "executing" ], "to": "completed", "idempotency": "Commit terminal result, citations, audit, and outbox against the execution attempt identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_governed_spatial_agent_run_agent_execution_completed", "eventType": "agent.execution_completed", "eventVersion": 1, "aggregateType": "agent run", "aggregateId": "example-governed-spatial-agent-run-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Execution service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "completed", "command": "complete_execution", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/governed-spatial-agent-run-agent-execution-completed", "title": "agent.execution_completed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "agent.execution_completed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "agent run" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit terminal result, citations, audit, and outbox against the execution attempt identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeAgentExecutionCompleted(event, seen) {\n if (event.eventType !== \"agent.execution_completed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"agent.execution_completed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"agent.execution_completed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeAgentExecutionCompleted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"agent.execution_completed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/governed-spatial-agent-run-agent-execution-completed" } ] } ``` ## event-contract · Device Registered - Identity: `event-contract:offline-automotive-release-device-registered` - Canonical: https://developer.mappls.com/events/offline-automotive-release-device-registered ```json { "slug": "offline-automotive-release-device-registered", "eventType": "device.registered", "eventVersion": 1, "title": "Device Registered", "summary": "Application-owned device release fact emitted after register_device reaches manufactured.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "register_device", "actor": "Manufacturing system", "from": [], "to": "manufactured", "idempotency": "Hardware identity and manufacturing batch form the stable key." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_device_registered", "eventType": "device.registered", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Manufacturing system", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "manufactured", "command": "register_device", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-device-registered", "title": "device.registered application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "device.registered" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hardware identity and manufacturing batch form the stable key." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeDeviceRegistered(event, seen) {\n if (event.eventType !== \"device.registered\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"device.registered\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"device.registered\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeDeviceRegistered(event Event, seen map[string]bool) error {\n\tif event.EventType != \"device.registered\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-device-registered" } ] } ``` ## event-contract · License Activated - Identity: `event-contract:offline-automotive-release-license-activated` - Canonical: https://developer.mappls.com/events/offline-automotive-release-license-activated ```json { "slug": "offline-automotive-release-license-activated", "eventType": "license.activated", "eventVersion": 1, "title": "License Activated", "summary": "Application-owned device release fact emitted after activate reaches activated.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "activate", "actor": "Fleet release manager", "from": [ "manufactured" ], "to": "activated", "idempotency": "Activation request and entitlement version must be replay-safe." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_license_activated", "eventType": "license.activated", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Fleet release manager", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "activated", "command": "activate", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-license-activated", "title": "license.activated application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "license.activated" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Activation request and entitlement version must be replay-safe." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLicenseActivated(event, seen) {\n if (event.eventType !== \"license.activated\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"license.activated\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"license.activated\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLicenseActivated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"license.activated\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-license-activated" } ] } ``` ## event-contract · Release Installed - Identity: `event-contract:offline-automotive-release-release-installed` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-installed ```json { "slug": "offline-automotive-release-release-installed", "eventType": "release.installed", "eventVersion": 1, "title": "Release Installed", "summary": "Application-owned device release fact emitted after stage_base_release reaches installed.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "stage_base_release", "actor": "Vehicle runtime", "from": [ "activated" ], "to": "installed", "idempotency": "Manifest digest identifies the exact runtime-data-config unit." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_release_installed", "eventType": "release.installed", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Vehicle runtime", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "installed", "command": "stage_base_release", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-release-installed", "title": "release.installed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "release.installed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Manifest digest identifies the exact runtime-data-config unit." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeReleaseInstalled(event, seen) {\n if (event.eventType !== \"release.installed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"release.installed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"release.installed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeReleaseInstalled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"release.installed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-release-installed" } ] } ``` ## event-contract · Release Qualified - Identity: `event-contract:offline-automotive-release-release-qualified` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-qualified ```json { "slug": "offline-automotive-release-release-qualified", "eventType": "release.qualified", "eventVersion": 1, "title": "Release Qualified", "summary": "Application-owned device release fact emitted after qualify reaches operational.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "qualify", "actor": "Vehicle runtime", "from": [ "installed", "recovering" ], "to": "operational", "idempotency": "Qualification result is bound to manifest and test-suite version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_release_qualified", "eventType": "release.qualified", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Vehicle runtime", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "operational", "command": "qualify", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-release-qualified", "title": "release.qualified application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "release.qualified" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Qualification result is bound to manifest and test-suite version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeReleaseQualified(event, seen) {\n if (event.eventType !== \"release.qualified\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"release.qualified\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"release.qualified\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeReleaseQualified(event Event, seen map[string]bool) error {\n\tif event.EventType != \"release.qualified\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-release-qualified" } ] } ``` ## event-contract · Release Update Started - Identity: `event-contract:offline-automotive-release-release-update-started` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-update-started ```json { "slug": "offline-automotive-release-release-update-started", "eventType": "release.update_started", "eventVersion": 1, "title": "Release Update Started", "summary": "Application-owned device release fact emitted after start_update reaches updating.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "start_update", "actor": "Fleet release manager", "from": [ "operational" ], "to": "updating", "idempotency": "Device, target manifest, and rollout campaign identify one plan." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_release_update_started", "eventType": "release.update_started", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Fleet release manager", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "updating", "command": "start_update", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-release-update-started", "title": "release.update_started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "release.update_started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Device, target manifest, and rollout campaign identify one plan." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeReleaseUpdateStarted(event, seen) {\n if (event.eventType !== \"release.update_started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"release.update_started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"release.update_started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeReleaseUpdateStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"release.update_started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-release-update-started" } ] } ``` ## event-contract · Release Rollback Started - Identity: `event-contract:offline-automotive-release-release-rollback-started` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-rollback-started ```json { "slug": "offline-automotive-release-release-rollback-started", "eventType": "release.rollback_started", "eventVersion": 1, "title": "Release Rollback Started", "summary": "Application-owned device release fact emitted after rollback reaches recovering.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "rollback", "actor": "Vehicle runtime", "from": [ "updating", "operational" ], "to": "recovering", "idempotency": "Watchdog incident ID prevents repeated rollback side effects." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_release_rollback_started", "eventType": "release.rollback_started", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Vehicle runtime", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "recovering", "command": "rollback", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-release-rollback-started", "title": "release.rollback_started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "release.rollback_started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Watchdog incident ID prevents repeated rollback side effects." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeReleaseRollbackStarted(event, seen) {\n if (event.eventType !== \"release.rollback_started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"release.rollback_started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"release.rollback_started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeReleaseRollbackStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"release.rollback_started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-release-rollback-started" } ] } ``` ## event-contract · Device Retired - Identity: `event-contract:offline-automotive-release-device-retired` - Canonical: https://developer.mappls.com/events/offline-automotive-release-device-retired ```json { "slug": "offline-automotive-release-device-retired", "eventType": "device.retired", "eventVersion": 1, "title": "Device Retired", "summary": "Application-owned device release fact emitted after retire reaches retired.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "offline-automotive-release", "title": "Offline automotive release", "productSlug": "offline-automotive", "stateModel": "stateful", "aggregate": "device release" }, "sourceGuideSlugs": [], "relatedContractSlugs": [], "sampleSlug": "offline-release-control", "producers": [ { "command": "retire", "actor": "Fleet release manager", "from": [ "manufactured", "activated", "installed", "operational", "recovering" ], "to": "retired", "idempotency": "Revoke activation and package access under one retirement identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_offline_automotive_release_device_retired", "eventType": "device.retired", "eventVersion": 1, "aggregateType": "device release", "aggregateId": "example-offline-automotive-release-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Fleet release manager", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "retired", "command": "retire", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/offline-automotive-release-device-retired", "title": "device.retired application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "device.retired" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "device release" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Revoke activation and package access under one retirement identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeDeviceRetired(event, seen) {\n if (event.eventType !== \"device.retired\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"device.retired\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"device.retired\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeDeviceRetired(event Event, seen map[string]bool) error {\n\tif event.EventType != \"device.retired\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/offline-automotive-release-device-retired" } ] } ``` ## event-contract · Host Session Created - Identity: `event-contract:widget-selection-session-host-session-created` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-session-created ```json { "slug": "widget-selection-session-host-session-created", "eventType": "host.session_created", "eventVersion": 1, "title": "Host Session Created", "summary": "Application-owned widget selection session fact emitted after create_session reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "create_session", "actor": "Host application", "from": [], "to": "draft", "idempotency": "The external checkout/form identity maps to one aggregate across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_host_session_created", "eventType": "host.session_created", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_session", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-host-session-created", "title": "host.session_created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "host.session_created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The external checkout/form identity maps to one aggregate across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeHostSessionCreated(event, seen) {\n if (event.eventType !== \"host.session_created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"host.session_created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"host.session_created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeHostSessionCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"host.session_created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-host-session-created" } ] } ``` ## event-contract · Widget Opened - Identity: `event-contract:widget-selection-session-widget-opened` - Canonical: https://developer.mappls.com/events/widget-selection-session-widget-opened ```json { "slug": "widget-selection-session-widget-opened", "eventType": "widget.opened", "eventVersion": 1, "title": "Widget Opened", "summary": "Application-owned widget selection session fact emitted after open_widget reaches widget_open.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "open_widget", "actor": "Application user", "from": [ "draft", "fallback_active" ], "to": "widget_open", "idempotency": "Persist one launch generation and ignore every callback belonging to an older generation." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_widget_opened", "eventType": "widget.opened", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "widget_open", "command": "open_widget", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-widget-opened", "title": "widget.opened application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "widget.opened" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Persist one launch generation and ignore every callback belonging to an older generation." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeWidgetOpened(event, seen) {\n if (event.eventType !== \"widget.opened\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"widget.opened\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"widget.opened\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeWidgetOpened(event Event, seen map[string]bool) error {\n\tif event.EventType != \"widget.opened\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-widget-opened" } ] } ``` ## event-contract · Widget Fallback Activated - Identity: `event-contract:widget-selection-session-widget-fallback-activated` - Canonical: https://developer.mappls.com/events/widget-selection-session-widget-fallback-activated ```json { "slug": "widget-selection-session-widget-fallback-activated", "eventType": "widget.fallback_activated", "eventVersion": 1, "title": "Widget Fallback Activated", "summary": "Application-owned widget selection session fact emitted after activate_fallback reaches fallback_active.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "activate_fallback", "actor": "Platform adapter", "from": [ "widget_open" ], "to": "fallback_active", "idempotency": "One failed generation produces at most one fallback transition and focus restoration." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_widget_fallback_activated", "eventType": "widget.fallback_activated", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Platform adapter", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "fallback_active", "command": "activate_fallback", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-widget-fallback-activated", "title": "widget.fallback_activated application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "widget.fallback_activated" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One failed generation produces at most one fallback transition and focus restoration." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeWidgetFallbackActivated(event, seen) {\n if (event.eventType !== \"widget.fallback_activated\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"widget.fallback_activated\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"widget.fallback_activated\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeWidgetFallbackActivated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"widget.fallback_activated\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-widget-fallback-activated" } ] } ``` ## event-contract · Location Candidate Received - Identity: `event-contract:widget-selection-session-location-candidate-received` - Canonical: https://developer.mappls.com/events/widget-selection-session-location-candidate-received ```json { "slug": "widget-selection-session-location-candidate-received", "eventType": "location.candidate_received", "eventVersion": 1, "title": "Location Candidate Received", "summary": "Application-owned widget selection session fact emitted after receive_candidate reaches candidate_received.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "receive_candidate", "actor": "Platform adapter", "from": [ "widget_open", "fallback_active" ], "to": "candidate_received", "idempotency": "Deduplicate the terminal adapter result and bind it to session and launch generation." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_location_candidate_received", "eventType": "location.candidate_received", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Platform adapter", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "candidate_received", "command": "receive_candidate", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-location-candidate-received", "title": "location.candidate_received application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location.candidate_received" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Deduplicate the terminal adapter result and bind it to session and launch generation." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCandidateReceived(event, seen) {\n if (event.eventType !== \"location.candidate_received\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location.candidate_received\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location.candidate_received\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCandidateReceived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location.candidate_received\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-location-candidate-received" } ] } ``` ## event-contract · Location Selected - Identity: `event-contract:widget-selection-session-location-selected` - Canonical: https://developer.mappls.com/events/widget-selection-session-location-selected ```json { "slug": "widget-selection-session-location-selected", "eventType": "location.selected", "eventVersion": 1, "title": "Location Selected", "summary": "Application-owned widget selection session fact emitted after accept_selection reaches selected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "accept_selection", "actor": "Application user", "from": [ "candidate_received" ], "to": "selected", "idempotency": "Compare aggregate version and hash the normalized candidate before committing." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_location_selected", "eventType": "location.selected", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "selected", "command": "accept_selection", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-location-selected", "title": "location.selected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location.selected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Compare aggregate version and hash the normalized candidate before committing." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationSelected(event, seen) {\n if (event.eventType !== \"location.selected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location.selected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location.selected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationSelected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location.selected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-location-selected" } ] } ``` ## event-contract · Host Text Edited - Identity: `event-contract:widget-selection-session-host-text-edited` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-text-edited ```json { "slug": "widget-selection-session-host-text-edited", "eventType": "host.text_edited", "eventVersion": 1, "title": "Host Text Edited", "summary": "Application-owned widget selection session fact emitted after edit_host_text reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "edit_host_text", "actor": "Application user", "from": [ "draft", "widget_open", "fallback_active", "candidate_received", "selected" ], "to": "draft", "idempotency": "The edit command version determines whether candidate and selection invalidation already occurred." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_host_text_edited", "eventType": "host.text_edited", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "edit_host_text", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-host-text-edited", "title": "host.text_edited application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "host.text_edited" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The edit command version determines whether candidate and selection invalidation already occurred." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeHostTextEdited(event, seen) {\n if (event.eventType !== \"host.text_edited\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"host.text_edited\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"host.text_edited\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeHostTextEdited(event Event, seen map[string]bool) error {\n\tif event.EventType != \"host.text_edited\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-host-text-edited" } ] } ``` ## event-contract · Host Submitted - Identity: `event-contract:widget-selection-session-host-submitted` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-submitted ```json { "slug": "widget-selection-session-host-submitted", "eventType": "host.submitted", "eventVersion": 1, "title": "Host Submitted", "summary": "Application-owned widget selection session fact emitted after submit reaches submitted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "submit", "actor": "Application user", "from": [ "selected" ], "to": "submitted", "idempotency": "Commit the record, audit event, processed command, and outbox entry atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_host_submitted", "eventType": "host.submitted", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "submitted", "command": "submit", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-host-submitted", "title": "host.submitted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "host.submitted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit the record, audit event, processed command, and outbox entry atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeHostSubmitted(event, seen) {\n if (event.eventType !== \"host.submitted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"host.submitted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"host.submitted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeHostSubmitted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"host.submitted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-host-submitted" } ] } ``` ## event-contract · Host Cancelled - Identity: `event-contract:widget-selection-session-host-cancelled` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-cancelled ```json { "slug": "widget-selection-session-host-cancelled", "eventType": "host.cancelled", "eventVersion": 1, "title": "Host Cancelled", "summary": "Application-owned widget selection session fact emitted after cancel reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "widget-selection-session", "title": "Application-owned widget selection", "productSlug": "app-widgets-deep-links", "stateModel": "hybrid", "aggregate": "widget selection session" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk" ], "relatedContractSlugs": [], "sampleSlug": "widget-journey-host", "producers": [ { "command": "cancel", "actor": "Application user", "from": [ "draft", "widget_open", "fallback_active", "candidate_received", "selected" ], "to": "cancelled", "idempotency": "Repeated cancellation returns the terminal record without rerunning cleanup side effects." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_widget_selection_session_host_cancelled", "eventType": "host.cancelled", "eventVersion": 1, "aggregateType": "widget selection session", "aggregateId": "example-widget-selection-session-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/widget-selection-session-host-cancelled", "title": "host.cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "host.cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "widget selection session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Repeated cancellation returns the terminal record without rerunning cleanup side effects." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeHostCancelled(event, seen) {\n if (event.eventType !== \"host.cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"host.cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"host.cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeHostCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"host.cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/widget-selection-session-host-cancelled" } ] } ``` ## event-contract · Route Plan Created - Identity: `event-contract:ios-direction-planning-handoff-route-plan-created` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-created ```json { "slug": "ios-direction-planning-handoff-route-plan-created", "eventType": "route_plan.created", "eventVersion": 1, "title": "Route Plan Created", "summary": "Application-owned route planning session fact emitted after create_plan reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "create_plan", "actor": "Host application", "from": [], "to": "draft", "idempotency": "One external journey intent maps to one route-planning aggregate across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_created", "eventType": "route_plan.created", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_plan", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-created", "title": "route_plan.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One external journey intent maps to one route-planning aggregate across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanCreated(event, seen) {\n if (event.eventType !== \"route_plan.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-created" } ] } ``` ## event-contract · Route Plan Editor Opened - Identity: `event-contract:ios-direction-planning-handoff-route-plan-editor-opened` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-editor-opened ```json { "slug": "ios-direction-planning-handoff-route-plan-editor-opened", "eventType": "route_plan.editor_opened", "eventVersion": 1, "title": "Route Plan Editor Opened", "summary": "Application-owned route planning session fact emitted after open_direction_ui reaches editing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "open_direction_ui", "actor": "Traveler", "from": [ "draft", "selected" ], "to": "editing", "idempotency": "One command creates one presentation generation and one delegate ownership record." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_editor_opened", "eventType": "route_plan.editor_opened", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveler", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "editing", "command": "open_direction_ui", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-editor-opened", "title": "route_plan.editor_opened application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.editor_opened" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One command creates one presentation generation and one delegate ownership record." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanEditorOpened(event, seen) {\n if (event.eventType !== \"route_plan.editor_opened\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.editor_opened\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.editor_opened\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanEditorOpened(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.editor_opened\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-editor-opened" } ] } ``` ## event-contract · Route Plan Calculation Requested - Identity: `event-contract:ios-direction-planning-handoff-route-plan-calculation-requested` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-calculation-requested ```json { "slug": "ios-direction-planning-handoff-route-plan-calculation-requested", "eventType": "route_plan.calculation_requested", "eventVersion": 1, "title": "Route Plan Calculation Requested", "summary": "Application-owned route planning session fact emitted after request_routes reaches calculating.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "request_routes", "actor": "Traveler", "from": [ "editing" ], "to": "calculating", "idempotency": "Hash normalized locations, options, and revision so duplicate requests share one logical calculation." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_calculation_requested", "eventType": "route_plan.calculation_requested", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveler", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "calculating", "command": "request_routes", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-calculation-requested", "title": "route_plan.calculation_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.calculation_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash normalized locations, options, and revision so duplicate requests share one logical calculation." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanCalculationRequested(event, seen) {\n if (event.eventType !== \"route_plan.calculation_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.calculation_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.calculation_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanCalculationRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.calculation_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-calculation-requested" } ] } ``` ## event-contract · Route Plan Candidates Received - Identity: `event-contract:ios-direction-planning-handoff-route-plan-candidates-received` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-candidates-received ```json { "slug": "ios-direction-planning-handoff-route-plan-candidates-received", "eventType": "route_plan.candidates_received", "eventVersion": 1, "title": "Route Plan Candidates Received", "summary": "Application-owned route planning session fact emitted after receive_routes reaches candidates_ready.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "receive_routes", "actor": "MapplsDirectionUI", "from": [ "calculating" ], "to": "candidates_ready", "idempotency": "Accept only the active generation and revision; repeated callbacks replace no committed state." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_candidates_received", "eventType": "route_plan.candidates_received", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "MapplsDirectionUI", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "candidates_ready", "command": "receive_routes", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-candidates-received", "title": "route_plan.candidates_received application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.candidates_received" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Accept only the active generation and revision; repeated callbacks replace no committed state." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanCandidatesReceived(event, seen) {\n if (event.eventType !== \"route_plan.candidates_received\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.candidates_received\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.candidates_received\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanCandidatesReceived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.candidates_received\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-candidates-received" } ] } ``` ## event-contract · Route Plan Route Selected - Identity: `event-contract:ios-direction-planning-handoff-route-plan-route-selected` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-route-selected ```json { "slug": "ios-direction-planning-handoff-route-plan-route-selected", "eventType": "route_plan.route_selected", "eventVersion": 1, "title": "Route Plan Route Selected", "summary": "Application-owned route planning session fact emitted after select_route reaches selected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "select_route", "actor": "Traveler", "from": [ "candidates_ready" ], "to": "selected", "idempotency": "Validate selectedRouteIndex against the returned collection and commit one normalized handoff value for the route revision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_route_selected", "eventType": "route_plan.route_selected", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveler", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "selected", "command": "select_route", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-route-selected", "title": "route_plan.route_selected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.route_selected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Validate selectedRouteIndex against the returned collection and commit one normalized handoff value for the route revision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanRouteSelected(event, seen) {\n if (event.eventType !== \"route_plan.route_selected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.route_selected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.route_selected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanRouteSelected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.route_selected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-route-selected" } ] } ``` ## event-contract · Route Plan Navigation Requested - Identity: `event-contract:ios-direction-planning-handoff-route-plan-navigation-requested` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-navigation-requested ```json { "slug": "ios-direction-planning-handoff-route-plan-navigation-requested", "eventType": "route_plan.navigation_requested", "eventVersion": 1, "title": "Route Plan Navigation Requested", "summary": "Application-owned route planning session fact emitted after request_navigation reaches handoff_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "request_navigation", "actor": "Traveler", "from": [ "selected", "candidates_ready" ], "to": "handoff_pending", "idempotency": "Bind callback generation, route revision, selected index, and host command key to one handoff attempt." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_navigation_requested", "eventType": "route_plan.navigation_requested", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveler", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "handoff_pending", "command": "request_navigation", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-navigation-requested", "title": "route_plan.navigation_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.navigation_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind callback generation, route revision, selected index, and host command key to one handoff attempt." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanNavigationRequested(event, seen) {\n if (event.eventType !== \"route_plan.navigation_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.navigation_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.navigation_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanNavigationRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.navigation_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-navigation-requested" } ] } ``` ## event-contract · Route Plan Navigation Handed Off - Identity: `event-contract:ios-direction-planning-handoff-route-plan-navigation-handed-off` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-navigation-handed-off ```json { "slug": "ios-direction-planning-handoff-route-plan-navigation-handed-off", "eventType": "route_plan.navigation_handed_off", "eventVersion": 1, "title": "Route Plan Navigation Handed Off", "summary": "Application-owned route planning session fact emitted after confirm_handoff reaches handed_off.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "confirm_handoff", "actor": "Navigation adapter", "from": [ "handoff_pending" ], "to": "handed_off", "idempotency": "Persist the target acknowledgement once and let its separate lifecycle own later progress." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_navigation_handed_off", "eventType": "route_plan.navigation_handed_off", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Navigation adapter", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "handed_off", "command": "confirm_handoff", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-navigation-handed-off", "title": "route_plan.navigation_handed_off application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.navigation_handed_off" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Persist the target acknowledgement once and let its separate lifecycle own later progress." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanNavigationHandedOff(event, seen) {\n if (event.eventType !== \"route_plan.navigation_handed_off\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.navigation_handed_off\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.navigation_handed_off\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanNavigationHandedOff(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.navigation_handed_off\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-navigation-handed-off" } ] } ``` ## event-contract · Route Plan Cancelled - Identity: `event-contract:ios-direction-planning-handoff-route-plan-cancelled` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-cancelled ```json { "slug": "ios-direction-planning-handoff-route-plan-cancelled", "eventType": "route_plan.cancelled", "eventVersion": 1, "title": "Route Plan Cancelled", "summary": "Application-owned route planning session fact emitted after cancel_plan reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "productSlug": "routes-navigation", "stateModel": "hybrid", "aggregate": "route planning session" }, "sourceGuideSlugs": [ "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "cancel_plan", "actor": "Traveler", "from": [ "draft", "editing", "calculating", "candidates_ready", "selected", "handoff_pending" ], "to": "cancelled", "idempotency": "Repeated back, dismissal, or cancel signals dispose once and return the same terminal outcome." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_direction_planning_handoff_route_plan_cancelled", "eventType": "route_plan.cancelled", "eventVersion": 1, "aggregateType": "route planning session", "aggregateId": "example-ios-direction-planning-handoff-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Traveler", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel_plan", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-direction-planning-handoff-route-plan-cancelled", "title": "route_plan.cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "route_plan.cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "route planning session" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Repeated back, dismissal, or cancel signals dispose once and return the same terminal outcome." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRoutePlanCancelled(event, seen) {\n if (event.eventType !== \"route_plan.cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"route_plan.cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"route_plan.cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRoutePlanCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"route_plan.cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-cancelled" } ] } ``` ## event-contract · Geofence Draft Created - Identity: `event-contract:ios-geofence-draft-geofence-draft-created` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-created ```json { "slug": "ios-geofence-draft-geofence-draft-created", "eventType": "geofence_draft.created", "eventVersion": 1, "title": "Geofence Draft Created", "summary": "Application-owned geofence draft fact emitted after create_geofence_draft reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft" }, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "create_geofence_draft", "actor": "Host application", "from": [], "to": "draft", "idempotency": "One external rule intent maps to one draft aggregate across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_geofence_draft_geofence_draft_created", "eventType": "geofence_draft.created", "eventVersion": 1, "aggregateType": "geofence draft", "aggregateId": "example-ios-geofence-draft-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_geofence_draft", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-geofence-draft-geofence-draft-created", "title": "geofence_draft.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_draft.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence draft" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One external rule intent maps to one draft aggregate across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceDraftCreated(event, seen) {\n if (event.eventType !== \"geofence_draft.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_draft.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_draft.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceDraftCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_draft.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-created" } ] } ``` ## event-contract · Geofence Draft Editor Opened - Identity: `event-contract:ios-geofence-draft-geofence-draft-editor-opened` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-editor-opened ```json { "slug": "ios-geofence-draft-geofence-draft-editor-opened", "eventType": "geofence_draft.editor_opened", "eventVersion": 1, "title": "Geofence Draft Editor Opened", "summary": "Application-owned geofence draft fact emitted after open_editor reaches editing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft" }, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "open_editor", "actor": "Operations author", "from": [ "draft", "review_pending" ], "to": "editing", "idempotency": "One command opens one view/delegate generation tied to the current draft revision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_geofence_draft_geofence_draft_editor_opened", "eventType": "geofence_draft.editor_opened", "eventVersion": 1, "aggregateType": "geofence draft", "aggregateId": "example-ios-geofence-draft-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations author", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "editing", "command": "open_editor", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-geofence-draft-geofence-draft-editor-opened", "title": "geofence_draft.editor_opened application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_draft.editor_opened" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence draft" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One command opens one view/delegate generation tied to the current draft revision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceDraftEditorOpened(event, seen) {\n if (event.eventType !== \"geofence_draft.editor_opened\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_draft.editor_opened\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_draft.editor_opened\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceDraftEditorOpened(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_draft.editor_opened\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-editor-opened" } ] } ``` ## event-contract · Geofence Draft Geometry Received - Identity: `event-contract:ios-geofence-draft-geofence-draft-geometry-received` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-geometry-received ```json { "slug": "ios-geofence-draft-geofence-draft-geometry-received", "eventType": "geofence_draft.geometry_received", "eventVersion": 1, "title": "Geofence Draft Geometry Received", "summary": "Application-owned geofence draft fact emitted after receive_geometry reaches candidate.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft" }, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "receive_geometry", "actor": "MapplsGeofenceUI", "from": [ "editing" ], "to": "candidate", "idempotency": "Normalize one terminal geometry result per generation and hash its canonical coordinate order." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_geofence_draft_geofence_draft_geometry_received", "eventType": "geofence_draft.geometry_received", "eventVersion": 1, "aggregateType": "geofence draft", "aggregateId": "example-ios-geofence-draft-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "MapplsGeofenceUI", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "candidate", "command": "receive_geometry", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-geofence-draft-geofence-draft-geometry-received", "title": "geofence_draft.geometry_received application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_draft.geometry_received" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence draft" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Normalize one terminal geometry result per generation and hash its canonical coordinate order." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceDraftGeometryReceived(event, seen) {\n if (event.eventType !== \"geofence_draft.geometry_received\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_draft.geometry_received\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_draft.geometry_received\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceDraftGeometryReceived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_draft.geometry_received\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-geometry-received" } ] } ``` ## event-contract · Geofence Draft Review Requested - Identity: `event-contract:ios-geofence-draft-geofence-draft-review-requested` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-review-requested ```json { "slug": "ios-geofence-draft-geofence-draft-review-requested", "eventType": "geofence_draft.review_requested", "eventVersion": 1, "title": "Geofence Draft Review Requested", "summary": "Application-owned geofence draft fact emitted after submit_for_review reaches review_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft" }, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "submit_for_review", "actor": "Operations author", "from": [ "candidate" ], "to": "review_pending", "idempotency": "The geometry hash, purpose, scope, and policy version create at most one review case." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_geofence_draft_geofence_draft_review_requested", "eventType": "geofence_draft.review_requested", "eventVersion": 1, "aggregateType": "geofence draft", "aggregateId": "example-ios-geofence-draft-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations author", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "review_pending", "command": "submit_for_review", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-geofence-draft-geofence-draft-review-requested", "title": "geofence_draft.review_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_draft.review_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence draft" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The geometry hash, purpose, scope, and policy version create at most one review case." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceDraftReviewRequested(event, seen) {\n if (event.eventType !== \"geofence_draft.review_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_draft.review_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_draft.review_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceDraftReviewRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_draft.review_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-review-requested" } ] } ``` ## event-contract · Geofence Draft Approved - Identity: `event-contract:ios-geofence-draft-geofence-draft-approved` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-approved ```json { "slug": "ios-geofence-draft-geofence-draft-approved", "eventType": "geofence_draft.approved", "eventVersion": 1, "title": "Geofence Draft Approved", "summary": "Application-owned geofence draft fact emitted after approve_draft reaches approved_draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft" }, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "approve_draft", "actor": "Geofence reviewer", "from": [ "review_pending" ], "to": "approved_draft", "idempotency": "Commit reviewer, decision, exact geometry revision, audit event, and outbox atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_geofence_draft_geofence_draft_approved", "eventType": "geofence_draft.approved", "eventVersion": 1, "aggregateType": "geofence draft", "aggregateId": "example-ios-geofence-draft-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Geofence reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "approved_draft", "command": "approve_draft", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-geofence-draft-geofence-draft-approved", "title": "geofence_draft.approved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_draft.approved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence draft" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit reviewer, decision, exact geometry revision, audit event, and outbox atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceDraftApproved(event, seen) {\n if (event.eventType !== \"geofence_draft.approved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_draft.approved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_draft.approved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceDraftApproved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_draft.approved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-approved" } ] } ``` ## event-contract · Geofence Draft Cancelled - Identity: `event-contract:ios-geofence-draft-geofence-draft-cancelled` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-cancelled ```json { "slug": "ios-geofence-draft-geofence-draft-cancelled", "eventType": "geofence_draft.cancelled", "eventVersion": 1, "title": "Geofence Draft Cancelled", "summary": "Application-owned geofence draft fact emitted after cancel_edit reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "productSlug": "intouch-telematics", "stateModel": "hybrid", "aggregate": "geofence draft" }, "sourceGuideSlugs": [ "mappls-geofence-ui-ios-distribution", "mappls-geofence-ui-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "deep-link-journey-host", "producers": [ { "command": "cancel_edit", "actor": "Operations author", "from": [ "draft", "editing", "candidate", "review_pending" ], "to": "cancelled", "idempotency": "Repeated cancellation disposes the editor once and preserves the last committed draft revision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_geofence_draft_geofence_draft_cancelled", "eventType": "geofence_draft.cancelled", "eventVersion": 1, "aggregateType": "geofence draft", "aggregateId": "example-ios-geofence-draft-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations author", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel_edit", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-geofence-draft-geofence-draft-cancelled", "title": "geofence_draft.cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "geofence_draft.cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "geofence draft" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Repeated cancellation disposes the editor once and preserves the last committed draft revision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeGeofenceDraftCancelled(event, seen) {\n if (event.eventType !== \"geofence_draft.cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"geofence_draft.cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"geofence_draft.cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeGeofenceDraftCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"geofence_draft.cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-cancelled" } ] } ``` ## event-contract · Feedback Report Created - Identity: `event-contract:ios-feedback-report-review-feedback-report-created` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-created ```json { "slug": "ios-feedback-report-review-feedback-report-created", "eventType": "feedback_report.created", "eventVersion": 1, "title": "Feedback Report Created", "summary": "Application-owned feedback report fact emitted after create_report reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "create_report", "actor": "Host application", "from": [], "to": "draft", "idempotency": "One external case and purpose maps to one draft aggregate across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_created", "eventType": "feedback_report.created", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_report", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-created", "title": "feedback_report.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One external case and purpose maps to one draft aggregate across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportCreated(event, seen) {\n if (event.eventType !== \"feedback_report.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-created" } ] } ``` ## event-contract · Feedback Report Ui Opened - Identity: `event-contract:ios-feedback-report-review-feedback-report-ui-opened` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-ui-opened ```json { "slug": "ios-feedback-report-review-feedback-report-ui-opened", "eventType": "feedback_report.ui_opened", "eventVersion": 1, "title": "Feedback Report Ui Opened", "summary": "Application-owned feedback report fact emitted after open_feedback_ui reaches capturing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "open_feedback_ui", "actor": "Contributor", "from": [ "draft" ], "to": "capturing", "idempotency": "One command creates one active presentation generation and ownership record." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_ui_opened", "eventType": "feedback_report.ui_opened", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "capturing", "command": "open_feedback_ui", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-ui-opened", "title": "feedback_report.ui_opened application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.ui_opened" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One command creates one active presentation generation and ownership record." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportUiOpened(event, seen) {\n if (event.eventType !== \"feedback_report.ui_opened\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.ui_opened\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.ui_opened\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportUiOpened(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.ui_opened\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-ui-opened" } ] } ``` ## event-contract · Feedback Report Candidate Received - Identity: `event-contract:ios-feedback-report-review-feedback-report-candidate-received` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-candidate-received ```json { "slug": "ios-feedback-report-review-feedback-report-candidate-received", "eventType": "feedback_report.candidate_received", "eventVersion": 1, "title": "Feedback Report Candidate Received", "summary": "Application-owned feedback report fact emitted after receive_candidate reaches candidate.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "receive_candidate", "actor": "Mappls Feedback Kit", "from": [ "capturing" ], "to": "candidate", "idempotency": "Accept one terminal allow-listed result for the active generation and normalized content hash." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_candidate_received", "eventType": "feedback_report.candidate_received", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Mappls Feedback Kit", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "candidate", "command": "receive_candidate", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-candidate-received", "title": "feedback_report.candidate_received application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.candidate_received" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Accept one terminal allow-listed result for the active generation and normalized content hash." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportCandidateReceived(event, seen) {\n if (event.eventType !== \"feedback_report.candidate_received\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.candidate_received\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.candidate_received\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportCandidateReceived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.candidate_received\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-candidate-received" } ] } ``` ## event-contract · Feedback Report Submitted - Identity: `event-contract:ios-feedback-report-review-feedback-report-submitted` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-submitted ```json { "slug": "ios-feedback-report-review-feedback-report-submitted", "eventType": "feedback_report.submitted", "eventVersion": 1, "title": "Feedback Report Submitted", "summary": "Application-owned feedback report fact emitted after commit_submission reaches submitted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "commit_submission", "actor": "Contributor", "from": [ "candidate" ], "to": "submitted", "idempotency": "Commit report, processed command, audit event, and outbox atomically under expected version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_submitted", "eventType": "feedback_report.submitted", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "submitted", "command": "commit_submission", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-submitted", "title": "feedback_report.submitted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.submitted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit report, processed command, audit event, and outbox atomically under expected version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportSubmitted(event, seen) {\n if (event.eventType !== \"feedback_report.submitted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.submitted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.submitted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportSubmitted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.submitted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-submitted" } ] } ``` ## event-contract · Feedback Report Provider Requested - Identity: `event-contract:ios-feedback-report-review-feedback-report-provider-requested` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-provider-requested ```json { "slug": "ios-feedback-report-review-feedback-report-provider-requested", "eventType": "feedback_report.provider_requested", "eventVersion": 1, "title": "Feedback Report Provider Requested", "summary": "Application-owned feedback report fact emitted after request_provider_submission reaches provider_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "request_provider_submission", "actor": "Provider adapter", "from": [ "submitted" ], "to": "provider_pending", "idempotency": "Persist application command and provider request identities before attempting the separately approved contract." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_provider_requested", "eventType": "feedback_report.provider_requested", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Provider adapter", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "provider_pending", "command": "request_provider_submission", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-provider-requested", "title": "feedback_report.provider_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.provider_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Persist application command and provider request identities before attempting the separately approved contract." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportProviderRequested(event, seen) {\n if (event.eventType !== \"feedback_report.provider_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.provider_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.provider_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportProviderRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.provider_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-provider-requested" } ] } ``` ## event-contract · Feedback Report Review Queued - Identity: `event-contract:ios-feedback-report-review-feedback-report-review-queued` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-review-queued ```json { "slug": "ios-feedback-report-review-feedback-report-review-queued", "eventType": "feedback_report.review_queued", "eventVersion": 1, "title": "Feedback Report Review Queued", "summary": "Application-owned feedback report fact emitted after queue_review reaches review_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "queue_review", "actor": "Host application", "from": [ "submitted", "provider_pending" ], "to": "review_pending", "idempotency": "One immutable submission revision creates at most one active review case." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_review_queued", "eventType": "feedback_report.review_queued", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "review_pending", "command": "queue_review", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-review-queued", "title": "feedback_report.review_queued application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.review_queued" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One immutable submission revision creates at most one active review case." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportReviewQueued(event, seen) {\n if (event.eventType !== \"feedback_report.review_queued\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.review_queued\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.review_queued\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportReviewQueued(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.review_queued\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-review-queued" } ] } ``` ## event-contract · Feedback Report Resolved - Identity: `event-contract:ios-feedback-report-review-feedback-report-resolved` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-resolved ```json { "slug": "ios-feedback-report-review-feedback-report-resolved", "eventType": "feedback_report.resolved", "eventVersion": 1, "title": "Feedback Report Resolved", "summary": "Application-owned feedback report fact emitted after resolve_report reaches resolved.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "resolve_report", "actor": "Operations reviewer", "from": [ "review_pending" ], "to": "resolved", "idempotency": "Bind actor, disposition, exact evidence revision, audit, and notification outbox in one commit." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_resolved", "eventType": "feedback_report.resolved", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "resolved", "command": "resolve_report", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-resolved", "title": "feedback_report.resolved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.resolved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind actor, disposition, exact evidence revision, audit, and notification outbox in one commit." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportResolved(event, seen) {\n if (event.eventType !== \"feedback_report.resolved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.resolved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.resolved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportResolved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.resolved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-resolved" } ] } ``` ## event-contract · Feedback Report Rejected - Identity: `event-contract:ios-feedback-report-review-feedback-report-rejected` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-rejected ```json { "slug": "ios-feedback-report-review-feedback-report-rejected", "eventType": "feedback_report.rejected", "eventVersion": 1, "title": "Feedback Report Rejected", "summary": "Application-owned feedback report fact emitted after reject_report reaches rejected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "reject_report", "actor": "Operations reviewer", "from": [ "review_pending" ], "to": "rejected", "idempotency": "One reviewer decision applies once to one immutable report revision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_rejected", "eventType": "feedback_report.rejected", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rejected", "command": "reject_report", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-rejected", "title": "feedback_report.rejected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.rejected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One reviewer decision applies once to one immutable report revision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportRejected(event, seen) {\n if (event.eventType !== \"feedback_report.rejected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.rejected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.rejected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportRejected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.rejected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-rejected" } ] } ``` ## event-contract · Feedback Report Cancelled - Identity: `event-contract:ios-feedback-report-review-feedback-report-cancelled` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-cancelled ```json { "slug": "ios-feedback-report-review-feedback-report-cancelled", "eventType": "feedback_report.cancelled", "eventVersion": 1, "title": "Feedback Report Cancelled", "summary": "Application-owned feedback report fact emitted after cancel_report reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "feedback report" }, "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base" ], "relatedContractSlugs": [], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "cancel_report", "actor": "Contributor", "from": [ "draft", "capturing", "candidate" ], "to": "cancelled", "idempotency": "Repeated cancellation returns the terminal result while cleanup remains exactly-once-in-effect." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_ios_feedback_report_review_feedback_report_cancelled", "eventType": "feedback_report.cancelled", "eventVersion": 1, "aggregateType": "feedback report", "aggregateId": "example-ios-feedback-report-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel_report", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/ios-feedback-report-review-feedback-report-cancelled", "title": "feedback_report.cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "feedback_report.cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "feedback report" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Repeated cancellation returns the terminal result while cleanup remains exactly-once-in-effect." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeFeedbackReportCancelled(event, seen) {\n if (event.eventType !== \"feedback_report.cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"feedback_report.cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"feedback_report.cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeFeedbackReportCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"feedback_report.cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-cancelled" } ] } ``` ## event-contract · Location Capture Attempt Created - Identity: `event-contract:location-capture-evidence-location-capture-attempt-created` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-attempt-created ```json { "slug": "location-capture-evidence-location-capture-attempt-created", "eventType": "location_capture.attempt_created", "eventVersion": 1, "title": "Location Capture Attempt Created", "summary": "Application-owned location capture attempt fact emitted after create_attempt reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "create_attempt", "actor": "Host application", "from": [], "to": "draft", "idempotency": "Map one external case and capture-purpose identity to one attempt across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_attempt_created", "eventType": "location_capture.attempt_created", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_attempt", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-attempt-created", "title": "location_capture.attempt_created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.attempt_created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Map one external case and capture-purpose identity to one attempt across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureAttemptCreated(event, seen) {\n if (event.eventType !== \"location_capture.attempt_created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.attempt_created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.attempt_created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureAttemptCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.attempt_created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-attempt-created" } ] } ``` ## event-contract · Location Capture Permission Requested - Identity: `event-contract:location-capture-evidence-location-capture-permission-requested` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-permission-requested ```json { "slug": "location-capture-evidence-location-capture-permission-requested", "eventType": "location_capture.permission_requested", "eventVersion": 1, "title": "Location Capture Permission Requested", "summary": "Application-owned location capture attempt fact emitted after request_permission reaches permission_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "request_permission", "actor": "Application user", "from": [ "draft" ], "to": "permission_pending", "idempotency": "Record one visible request per policy decision and current native authorization state." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_permission_requested", "eventType": "location_capture.permission_requested", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "permission_pending", "command": "request_permission", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-permission-requested", "title": "location_capture.permission_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.permission_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Record one visible request per policy decision and current native authorization state." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCapturePermissionRequested(event, seen) {\n if (event.eventType !== \"location_capture.permission_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.permission_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.permission_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCapturePermissionRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.permission_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-permission-requested" } ] } ``` ## event-contract · Location Capture Sdk Ready - Identity: `event-contract:location-capture-evidence-location-capture-sdk-ready` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-sdk-ready ```json { "slug": "location-capture-evidence-location-capture-sdk-ready", "eventType": "location_capture.sdk_ready", "eventVersion": 1, "title": "Location Capture Sdk Ready", "summary": "Application-owned location capture attempt fact emitted after prepare_sdk reaches ready.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "prepare_sdk", "actor": "Platform adapter", "from": [ "permission_pending" ], "to": "ready", "idempotency": "Bind initialization and validated configuration to one launch generation without persisting credentials or SDK instances." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_sdk_ready", "eventType": "location_capture.sdk_ready", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Platform adapter", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "ready", "command": "prepare_sdk", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-sdk-ready", "title": "location_capture.sdk_ready application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.sdk_ready" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind initialization and validated configuration to one launch generation without persisting credentials or SDK instances." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureSdkReady(event, seen) {\n if (event.eventType !== \"location_capture.sdk_ready\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.sdk_ready\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.sdk_ready\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureSdkReady(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.sdk_ready\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-sdk-ready" } ] } ``` ## event-contract · Location Capture Acquisition Started - Identity: `event-contract:location-capture-evidence-location-capture-acquisition-started` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-acquisition-started ```json { "slug": "location-capture-evidence-location-capture-acquisition-started", "eventType": "location_capture.acquisition_started", "eventVersion": 1, "title": "Location Capture Acquisition Started", "summary": "Application-owned location capture attempt fact emitted after start_acquisition reaches acquiring.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "start_acquisition", "actor": "Application user", "from": [ "ready", "review_pending" ], "to": "acquiring", "idempotency": "A command key starts at most one single-shot request or subscription generation." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_acquisition_started", "eventType": "location_capture.acquisition_started", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "acquiring", "command": "start_acquisition", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-acquisition-started", "title": "location_capture.acquisition_started application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.acquisition_started" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "A command key starts at most one single-shot request or subscription generation." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureAcquisitionStarted(event, seen) {\n if (event.eventType !== \"location_capture.acquisition_started\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.acquisition_started\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.acquisition_started\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureAcquisitionStarted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.acquisition_started\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-acquisition-started" } ] } ``` ## event-contract · Location Capture Candidate Received - Identity: `event-contract:location-capture-evidence-location-capture-candidate-received` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-candidate-received ```json { "slug": "location-capture-evidence-location-capture-candidate-received", "eventType": "location_capture.candidate_received", "eventVersion": 1, "title": "Location Capture Candidate Received", "summary": "Application-owned location capture attempt fact emitted after receive_location reaches candidate.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "receive_location", "actor": "Platform adapter", "from": [ "acquiring" ], "to": "candidate", "idempotency": "Normalize and hash one qualifying terminal event per single-shot generation, or deduplicate subscribed events by bounded source identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_candidate_received", "eventType": "location_capture.candidate_received", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Platform adapter", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "candidate", "command": "receive_location", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-candidate-received", "title": "location_capture.candidate_received application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.candidate_received" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Normalize and hash one qualifying terminal event per single-shot generation, or deduplicate subscribed events by bounded source identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureCandidateReceived(event, seen) {\n if (event.eventType !== \"location_capture.candidate_received\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.candidate_received\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.candidate_received\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureCandidateReceived(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.candidate_received\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-candidate-received" } ] } ``` ## event-contract · Location Capture Review Queued - Identity: `event-contract:location-capture-evidence-location-capture-review-queued` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-review-queued ```json { "slug": "location-capture-evidence-location-capture-review-queued", "eventType": "location_capture.review_queued", "eventVersion": 1, "title": "Location Capture Review Queued", "summary": "Application-owned location capture attempt fact emitted after queue_review reaches review_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "queue_review", "actor": "Host application", "from": [ "candidate" ], "to": "review_pending", "idempotency": "The evidence hash and policy version create at most one review case." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_review_queued", "eventType": "location_capture.review_queued", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "review_pending", "command": "queue_review", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-review-queued", "title": "location_capture.review_queued application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.review_queued" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The evidence hash and policy version create at most one review case." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureReviewQueued(event, seen) {\n if (event.eventType !== \"location_capture.review_queued\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.review_queued\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.review_queued\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureReviewQueued(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.review_queued\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-review-queued" } ] } ``` ## event-contract · Location Capture Evidence Accepted - Identity: `event-contract:location-capture-evidence-location-capture-evidence-accepted` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-evidence-accepted ```json { "slug": "location-capture-evidence-location-capture-evidence-accepted", "eventType": "location_capture.evidence_accepted", "eventVersion": 1, "title": "Location Capture Evidence Accepted", "summary": "Application-owned location capture attempt fact emitted after accept_evidence reaches accepted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "accept_evidence", "actor": "Application user", "from": [ "candidate" ], "to": "accepted", "idempotency": "Commit evidence, policy result, processed command, audit event, and outbox record atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_evidence_accepted", "eventType": "location_capture.evidence_accepted", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "accepted", "command": "accept_evidence", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-evidence-accepted", "title": "location_capture.evidence_accepted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.evidence_accepted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit evidence, policy result, processed command, audit event, and outbox record atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureEvidenceAccepted(event, seen) {\n if (event.eventType !== \"location_capture.evidence_accepted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.evidence_accepted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.evidence_accepted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureEvidenceAccepted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.evidence_accepted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-evidence-accepted" } ] } ``` ## event-contract · Location Capture Weak Evidence Approved - Identity: `event-contract:location-capture-evidence-location-capture-weak-evidence-approved` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-weak-evidence-approved ```json { "slug": "location-capture-evidence-location-capture-weak-evidence-approved", "eventType": "location_capture.weak_evidence_approved", "eventVersion": 1, "title": "Location Capture Weak Evidence Approved", "summary": "Application-owned location capture attempt fact emitted after approve_weak_evidence reaches accepted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "approve_weak_evidence", "actor": "Evidence reviewer", "from": [ "review_pending" ], "to": "accepted", "idempotency": "Bind the reviewer identity and bounded justification to the immutable candidate hash." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_weak_evidence_approved", "eventType": "location_capture.weak_evidence_approved", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Evidence reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "accepted", "command": "approve_weak_evidence", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-weak-evidence-approved", "title": "location_capture.weak_evidence_approved application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.weak_evidence_approved" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind the reviewer identity and bounded justification to the immutable candidate hash." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureWeakEvidenceApproved(event, seen) {\n if (event.eventType !== \"location_capture.weak_evidence_approved\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.weak_evidence_approved\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.weak_evidence_approved\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureWeakEvidenceApproved(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.weak_evidence_approved\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-weak-evidence-approved" } ] } ``` ## event-contract · Location Capture Attempt Cancelled - Identity: `event-contract:location-capture-evidence-location-capture-attempt-cancelled` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-attempt-cancelled ```json { "slug": "location-capture-evidence-location-capture-attempt-cancelled", "eventType": "location_capture.attempt_cancelled", "eventVersion": 1, "title": "Location Capture Attempt Cancelled", "summary": "Application-owned location capture attempt fact emitted after cancel_attempt reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "productSlug": "capture-feedback", "stateModel": "hybrid", "aggregate": "location capture attempt" }, "sourceGuideSlugs": [ "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution" ], "relatedContractSlugs": [], "sampleSlug": "address-verifier", "producers": [ { "command": "cancel_attempt", "actor": "Application user", "from": [ "draft", "permission_pending", "ready", "acquiring", "candidate", "review_pending" ], "to": "cancelled", "idempotency": "Repeated cancellation returns the terminal record while stop and unsubscribe cleanup remain exactly-once-in-effect." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_location_capture_evidence_location_capture_attempt_cancelled", "eventType": "location_capture.attempt_cancelled", "eventVersion": 1, "aggregateType": "location capture attempt", "aggregateId": "example-location-capture-evidence-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Application user", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel_attempt", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/location-capture-evidence-location-capture-attempt-cancelled", "title": "location_capture.attempt_cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "location_capture.attempt_cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "location capture attempt" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Repeated cancellation returns the terminal record while stop and unsubscribe cleanup remain exactly-once-in-effect." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeLocationCaptureAttemptCancelled(event, seen) {\n if (event.eventType !== \"location_capture.attempt_cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"location_capture.attempt_cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"location_capture.attempt_cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeLocationCaptureAttemptCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"location_capture.attempt_cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/location-capture-evidence-location-capture-attempt-cancelled" } ] } ``` ## event-contract · Place Contribution Created - Identity: `event-contract:place-contribution-publication-place-contribution-created` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-created ```json { "slug": "place-contribution-publication-place-contribution-created", "eventType": "place_contribution.created", "eventVersion": 1, "title": "Place Contribution Created", "summary": "Application-owned place contribution fact emitted after create_contribution reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "create_contribution", "actor": "Host application", "from": [], "to": "draft", "idempotency": "Map one bounded external case identity to one aggregate across network retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_created", "eventType": "place_contribution.created", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_contribution", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-created", "title": "place_contribution.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Map one bounded external case identity to one aggregate across network retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionCreated(event, seen) {\n if (event.eventType !== \"place_contribution.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-created" } ] } ``` ## event-contract · Place Contribution Widget Opened - Identity: `event-contract:place-contribution-publication-place-contribution-widget-opened` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-widget-opened ```json { "slug": "place-contribution-publication-place-contribution-widget-opened", "eventType": "place_contribution.widget_opened", "eventVersion": 1, "title": "Place Contribution Widget Opened", "summary": "Application-owned place contribution fact emitted after open_widget reaches widget_open.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "open_widget", "actor": "Contributor", "from": [ "draft" ], "to": "widget_open", "idempotency": "Create at most one immutable attempt per command key and aggregate version." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_widget_opened", "eventType": "place_contribution.widget_opened", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "widget_open", "command": "open_widget", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-widget-opened", "title": "place_contribution.widget_opened application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.widget_opened" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Create at most one immutable attempt per command key and aggregate version." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionWidgetOpened(event, seen) {\n if (event.eventType !== \"place_contribution.widget_opened\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.widget_opened\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.widget_opened\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionWidgetOpened(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.widget_opened\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-widget-opened" } ] } ``` ## event-contract · Place Contribution Submission Reported - Identity: `event-contract:place-contribution-publication-place-contribution-submission-reported` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-submission-reported ```json { "slug": "place-contribution-publication-place-contribution-submission-reported", "eventType": "place_contribution.submission_reported", "eventVersion": 1, "title": "Place Contribution Submission Reported", "summary": "Application-owned place contribution fact emitted after report_submission reaches submission_reported.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "report_submission", "actor": "Contributor", "from": [ "widget_open" ], "to": "submission_reported", "idempotency": "Record one acknowledgement for the active attempt without inventing a provider receipt." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_submission_reported", "eventType": "place_contribution.submission_reported", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "submission_reported", "command": "report_submission", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-submission-reported", "title": "place_contribution.submission_reported application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.submission_reported" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Record one acknowledgement for the active attempt without inventing a provider receipt." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionSubmissionReported(event, seen) {\n if (event.eventType !== \"place_contribution.submission_reported\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.submission_reported\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.submission_reported\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionSubmissionReported(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.submission_reported\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-submission-reported" } ] } ``` ## event-contract · Place Contribution Reconciliation Queued - Identity: `event-contract:place-contribution-publication-place-contribution-reconciliation-queued` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-reconciliation-queued ```json { "slug": "place-contribution-publication-place-contribution-reconciliation-queued", "eventType": "place_contribution.reconciliation_queued", "eventVersion": 1, "title": "Place Contribution Reconciliation Queued", "summary": "Application-owned place contribution fact emitted after queue_reconciliation reaches publication_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "queue_reconciliation", "actor": "Host application", "from": [ "submission_reported" ], "to": "publication_pending", "idempotency": "The same scheduling key creates at most one pending transition and outbox event." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_reconciliation_queued", "eventType": "place_contribution.reconciliation_queued", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "publication_pending", "command": "queue_reconciliation", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-reconciliation-queued", "title": "place_contribution.reconciliation_queued application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.reconciliation_queued" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The same scheduling key creates at most one pending transition and outbox event." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionReconciliationQueued(event, seen) {\n if (event.eventType !== \"place_contribution.reconciliation_queued\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.reconciliation_queued\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.reconciliation_queued\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionReconciliationQueued(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.reconciliation_queued\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-reconciliation-queued" } ] } ``` ## event-contract · Place Contribution Published - Identity: `event-contract:place-contribution-publication-place-contribution-published` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-published ```json { "slug": "place-contribution-publication-place-contribution-published", "eventType": "place_contribution.published", "eventVersion": 1, "title": "Place Contribution Published", "summary": "Application-owned place contribution fact emitted after confirm_publication reaches published.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "confirm_publication", "actor": "Operations reviewer", "from": [ "submission_reported", "publication_pending" ], "to": "published", "idempotency": "Hash the supported evidence source, Mappls Pin, observation time, and source fingerprint before committing." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_published", "eventType": "place_contribution.published", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "published", "command": "confirm_publication", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-published", "title": "place_contribution.published application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.published" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash the supported evidence source, Mappls Pin, observation time, and source fingerprint before committing." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionPublished(event, seen) {\n if (event.eventType !== \"place_contribution.published\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.published\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.published\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionPublished(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.published\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-published" } ] } ``` ## event-contract · Place Contribution Rejected - Identity: `event-contract:place-contribution-publication-place-contribution-rejected` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-rejected ```json { "slug": "place-contribution-publication-place-contribution-rejected", "eventType": "place_contribution.rejected", "eventVersion": 1, "title": "Place Contribution Rejected", "summary": "Application-owned place contribution fact emitted after reject reaches rejected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "reject", "actor": "Operations reviewer", "from": [ "submission_reported", "publication_pending" ], "to": "rejected", "idempotency": "Preserve the review decision, reason, and attempt version under the reviewer command key." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_rejected", "eventType": "place_contribution.rejected", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Operations reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rejected", "command": "reject", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-rejected", "title": "place_contribution.rejected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.rejected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Preserve the review decision, reason, and attempt version under the reviewer command key." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionRejected(event, seen) {\n if (event.eventType !== \"place_contribution.rejected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.rejected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.rejected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionRejected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.rejected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-rejected" } ] } ``` ## event-contract · Place Contribution Retried - Identity: `event-contract:place-contribution-publication-place-contribution-retried` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-retried ```json { "slug": "place-contribution-publication-place-contribution-retried", "eventType": "place_contribution.retried", "eventVersion": 1, "title": "Place Contribution Retried", "summary": "Application-owned place contribution fact emitted after retry reaches widget_open.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "retry", "actor": "Contributor", "from": [ "rejected" ], "to": "widget_open", "idempotency": "Create a new immutable attempt once while retaining the rejected attempt and decision in audit history." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_retried", "eventType": "place_contribution.retried", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "widget_open", "command": "retry", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-retried", "title": "place_contribution.retried application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.retried" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Create a new immutable attempt once while retaining the rejected attempt and decision in audit history." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionRetried(event, seen) {\n if (event.eventType !== \"place_contribution.retried\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.retried\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.retried\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionRetried(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.retried\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-retried" } ] } ``` ## event-contract · Place Contribution Withdrawn - Identity: `event-contract:place-contribution-publication-place-contribution-withdrawn` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-withdrawn ```json { "slug": "place-contribution-publication-place-contribution-withdrawn", "eventType": "place_contribution.withdrawn", "eventVersion": 1, "title": "Place Contribution Withdrawn", "summary": "Application-owned place contribution fact emitted after withdraw reaches withdrawn.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "productSlug": "capture-feedback", "stateModel": "stateful", "aggregate": "place contribution" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-rest-apis" ], "relatedContractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sampleSlug": "place-contribution-desk", "producers": [ { "command": "withdraw", "actor": "Contributor", "from": [ "draft", "widget_open", "submission_reported", "publication_pending" ], "to": "withdrawn", "idempotency": "Stop host follow-up once without representing this as provider-side deletion." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_place_contribution_publication_place_contribution_withdrawn", "eventType": "place_contribution.withdrawn", "eventVersion": 1, "aggregateType": "place contribution", "aggregateId": "example-place-contribution-publication-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Contributor", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "withdrawn", "command": "withdraw", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/place-contribution-publication-place-contribution-withdrawn", "title": "place_contribution.withdrawn application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "place_contribution.withdrawn" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "place contribution" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Stop host follow-up once without representing this as provider-side deletion." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumePlaceContributionWithdrawn(event, seen) {\n if (event.eventType !== \"place_contribution.withdrawn\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"place_contribution.withdrawn\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"place_contribution.withdrawn\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumePlaceContributionWithdrawn(event Event, seen map[string]bool) error {\n\tif event.EventType != \"place_contribution.withdrawn\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/place-contribution-publication-place-contribution-withdrawn" } ] } ``` ## event-contract · Realview Inspection Created - Identity: `event-contract:realview-remote-inspection-realview-inspection-created` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-created ```json { "slug": "realview-remote-inspection-realview-inspection-created", "eventType": "realview_inspection.created", "eventVersion": 1, "title": "Realview Inspection Created", "summary": "Application-owned remote visual inspection fact emitted after create_inspection reaches draft.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "create_inspection", "actor": "Host application", "from": [], "to": "draft", "idempotency": "One external inspection identity maps to one aggregate across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_created", "eventType": "realview_inspection.created", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "draft", "command": "create_inspection", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-created", "title": "realview_inspection.created application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.created" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One external inspection identity maps to one aggregate across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionCreated(event, seen) {\n if (event.eventType !== \"realview_inspection.created\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.created\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.created\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionCreated(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.created\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-created" } ] } ``` ## event-contract · Realview Inspection Entitlement Requested - Identity: `event-contract:realview-remote-inspection-realview-inspection-entitlement-requested` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-requested ```json { "slug": "realview-remote-inspection-realview-inspection-entitlement-requested", "eventType": "realview_inspection.entitlement_requested", "eventVersion": 1, "title": "Realview Inspection Entitlement Requested", "summary": "Application-owned remote visual inspection fact emitted after request_entitlement reaches entitlement_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "request_entitlement", "actor": "Inspector", "from": [ "draft" ], "to": "entitlement_pending", "idempotency": "The product, environment, and account request identity is stable and contains no credential value." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_entitlement_requested", "eventType": "realview_inspection.entitlement_requested", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspector", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "entitlement_pending", "command": "request_entitlement", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-entitlement-requested", "title": "realview_inspection.entitlement_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.entitlement_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "The product, environment, and account request identity is stable and contains no credential value." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionEntitlementRequested(event, seen) {\n if (event.eventType !== \"realview_inspection.entitlement_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.entitlement_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.entitlement_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionEntitlementRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.entitlement_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-requested" } ] } ``` ## event-contract · Realview Inspection Entitlement Confirmed - Identity: `event-contract:realview-remote-inspection-realview-inspection-entitlement-confirmed` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-confirmed ```json { "slug": "realview-remote-inspection-realview-inspection-entitlement-confirmed", "eventType": "realview_inspection.entitlement_confirmed", "eventVersion": 1, "title": "Realview Inspection Entitlement Confirmed", "summary": "Application-owned remote visual inspection fact emitted after confirm_entitlement reaches ready.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "confirm_entitlement", "actor": "Platform administrator", "from": [ "entitlement_pending" ], "to": "ready", "idempotency": "Commit only entitlement reference, exact host, restrictions, and expiry metadata—not the issued token." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_entitlement_confirmed", "eventType": "realview_inspection.entitlement_confirmed", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Platform administrator", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "ready", "command": "confirm_entitlement", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-entitlement-confirmed", "title": "realview_inspection.entitlement_confirmed application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.entitlement_confirmed" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit only entitlement reference, exact host, restrictions, and expiry metadata—not the issued token." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionEntitlementConfirmed(event, seen) {\n if (event.eventType !== \"realview_inspection.entitlement_confirmed\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.entitlement_confirmed\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.entitlement_confirmed\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionEntitlementConfirmed(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.entitlement_confirmed\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-confirmed" } ] } ``` ## event-contract · Realview Inspection Viewer Opened - Identity: `event-contract:realview-remote-inspection-realview-inspection-viewer-opened` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-viewer-opened ```json { "slug": "realview-remote-inspection-realview-inspection-viewer-opened", "eventType": "realview_inspection.viewer_opened", "eventVersion": 1, "title": "Realview Inspection Viewer Opened", "summary": "Application-owned remote visual inspection fact emitted after open_viewer reaches viewing.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "open_viewer", "actor": "Inspector", "from": [ "ready", "coverage_unavailable", "rework_required" ], "to": "viewing", "idempotency": "One command creates one immutable attempt and one ephemeral token-handle reference." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_viewer_opened", "eventType": "realview_inspection.viewer_opened", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspector", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "viewing", "command": "open_viewer", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-viewer-opened", "title": "realview_inspection.viewer_opened application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.viewer_opened" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One command creates one immutable attempt and one ephemeral token-handle reference." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionViewerOpened(event, seen) {\n if (event.eventType !== \"realview_inspection.viewer_opened\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.viewer_opened\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.viewer_opened\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionViewerOpened(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.viewer_opened\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-viewer-opened" } ] } ``` ## event-contract · Realview Inspection Coverage Unavailable - Identity: `event-contract:realview-remote-inspection-realview-inspection-coverage-unavailable` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-coverage-unavailable ```json { "slug": "realview-remote-inspection-realview-inspection-coverage-unavailable", "eventType": "realview_inspection.coverage_unavailable", "eventVersion": 1, "title": "Realview Inspection Coverage Unavailable", "summary": "Application-owned remote visual inspection fact emitted after record_no_coverage reaches coverage_unavailable.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "record_no_coverage", "actor": "Host application", "from": [ "viewing" ], "to": "coverage_unavailable", "idempotency": "Accept one exact-origin, one-field status 204 result for the active attempt only." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_coverage_unavailable", "eventType": "realview_inspection.coverage_unavailable", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "coverage_unavailable", "command": "record_no_coverage", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-coverage-unavailable", "title": "realview_inspection.coverage_unavailable application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.coverage_unavailable" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Accept one exact-origin, one-field status 204 result for the active attempt only." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionCoverageUnavailable(event, seen) {\n if (event.eventType !== \"realview_inspection.coverage_unavailable\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.coverage_unavailable\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.coverage_unavailable\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionCoverageUnavailable(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.coverage_unavailable\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-coverage-unavailable" } ] } ``` ## event-contract · Realview Inspection Observation Recorded - Identity: `event-contract:realview-remote-inspection-realview-inspection-observation-recorded` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-observation-recorded ```json { "slug": "realview-remote-inspection-realview-inspection-observation-recorded", "eventType": "realview_inspection.observation_recorded", "eventVersion": 1, "title": "Realview Inspection Observation Recorded", "summary": "Application-owned remote visual inspection fact emitted after record_observation reaches observation_recorded.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "record_observation", "actor": "Inspector", "from": [ "viewing" ], "to": "observation_recorded", "idempotency": "Hash the bounded checklist, notes, attempt, actor, and observation time." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_observation_recorded", "eventType": "realview_inspection.observation_recorded", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspector", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "observation_recorded", "command": "record_observation", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-observation-recorded", "title": "realview_inspection.observation_recorded application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.observation_recorded" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Hash the bounded checklist, notes, attempt, actor, and observation time." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionObservationRecorded(event, seen) {\n if (event.eventType !== \"realview_inspection.observation_recorded\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.observation_recorded\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.observation_recorded\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionObservationRecorded(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.observation_recorded\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-observation-recorded" } ] } ``` ## event-contract · Realview Inspection Review Requested - Identity: `event-contract:realview-remote-inspection-realview-inspection-review-requested` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-review-requested ```json { "slug": "realview-remote-inspection-realview-inspection-review-requested", "eventType": "realview_inspection.review_requested", "eventVersion": 1, "title": "Realview Inspection Review Requested", "summary": "Application-owned remote visual inspection fact emitted after submit_review reaches review_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "submit_review", "actor": "Inspector", "from": [ "observation_recorded" ], "to": "review_pending", "idempotency": "Freeze one observation set and enqueue review atomically." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_review_requested", "eventType": "realview_inspection.review_requested", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspector", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "review_pending", "command": "submit_review", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-review-requested", "title": "realview_inspection.review_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.review_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Freeze one observation set and enqueue review atomically." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionReviewRequested(event, seen) {\n if (event.eventType !== \"realview_inspection.review_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.review_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.review_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionReviewRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.review_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-review-requested" } ] } ``` ## event-contract · Realview Inspection Accepted - Identity: `event-contract:realview-remote-inspection-realview-inspection-accepted` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-accepted ```json { "slug": "realview-remote-inspection-realview-inspection-accepted", "eventType": "realview_inspection.accepted", "eventVersion": 1, "title": "Realview Inspection Accepted", "summary": "Application-owned remote visual inspection fact emitted after accept reaches accepted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "accept", "actor": "Inspection reviewer", "from": [ "review_pending" ], "to": "accepted", "idempotency": "Bind reviewer, reason, policy version, observation IDs, and command identity." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_accepted", "eventType": "realview_inspection.accepted", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspection reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "accepted", "command": "accept", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-accepted", "title": "realview_inspection.accepted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.accepted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Bind reviewer, reason, policy version, observation IDs, and command identity." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionAccepted(event, seen) {\n if (event.eventType !== \"realview_inspection.accepted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.accepted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.accepted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionAccepted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.accepted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-accepted" } ] } ``` ## event-contract · Realview Inspection Rework Requested - Identity: `event-contract:realview-remote-inspection-realview-inspection-rework-requested` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-rework-requested ```json { "slug": "realview-remote-inspection-realview-inspection-rework-requested", "eventType": "realview_inspection.rework_requested", "eventVersion": 1, "title": "Realview Inspection Rework Requested", "summary": "Application-owned remote visual inspection fact emitted after request_rework reaches rework_required.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "request_rework", "actor": "Inspection reviewer", "from": [ "review_pending" ], "to": "rework_required", "idempotency": "Retain the reviewed evidence and create one attributable rework decision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_rework_requested", "eventType": "realview_inspection.rework_requested", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspection reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rework_required", "command": "request_rework", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-rework-requested", "title": "realview_inspection.rework_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.rework_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Retain the reviewed evidence and create one attributable rework decision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionReworkRequested(event, seen) {\n if (event.eventType !== \"realview_inspection.rework_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.rework_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.rework_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionReworkRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.rework_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-rework-requested" } ] } ``` ## event-contract · Realview Inspection Entitlement Expired - Identity: `event-contract:realview-remote-inspection-realview-inspection-entitlement-expired` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-expired ```json { "slug": "realview-remote-inspection-realview-inspection-entitlement-expired", "eventType": "realview_inspection.entitlement_expired", "eventVersion": 1, "title": "Realview Inspection Entitlement Expired", "summary": "Application-owned remote visual inspection fact emitted after record_entitlement_expired reaches entitlement_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "record_entitlement_expired", "actor": "Host application", "from": [ "ready", "viewing" ], "to": "entitlement_pending", "idempotency": "Invalidate the active attempt once and discard only its ephemeral token handle." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_entitlement_expired", "eventType": "realview_inspection.entitlement_expired", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Host application", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "entitlement_pending", "command": "record_entitlement_expired", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-entitlement-expired", "title": "realview_inspection.entitlement_expired application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.entitlement_expired" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Invalidate the active attempt once and discard only its ephemeral token handle." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionEntitlementExpired(event, seen) {\n if (event.eventType !== \"realview_inspection.entitlement_expired\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.entitlement_expired\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.entitlement_expired\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionEntitlementExpired(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.entitlement_expired\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-expired" } ] } ``` ## event-contract · Realview Inspection Cancelled - Identity: `event-contract:realview-remote-inspection-realview-inspection-cancelled` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-cancelled ```json { "slug": "realview-remote-inspection-realview-inspection-cancelled", "eventType": "realview_inspection.cancelled", "eventVersion": 1, "title": "Realview Inspection Cancelled", "summary": "Application-owned remote visual inspection fact emitted after cancel reaches cancelled.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "productSlug": "app-widgets-deep-links", "stateModel": "stateful", "aggregate": "remote visual inspection" }, "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-maps-js" ], "relatedContractSlugs": [], "sampleSlug": "realview-inspection-desk", "producers": [ { "command": "cancel", "actor": "Inspector", "from": [ "draft", "entitlement_pending", "ready", "viewing", "coverage_unavailable", "observation_recorded", "review_pending", "rework_required" ], "to": "cancelled", "idempotency": "Commit actor, reason, cleanup, audit, and outbox exactly once." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_realview_remote_inspection_realview_inspection_cancelled", "eventType": "realview_inspection.cancelled", "eventVersion": 1, "aggregateType": "remote visual inspection", "aggregateId": "example-realview-remote-inspection-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Inspector", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "cancelled", "command": "cancel", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/realview-remote-inspection-realview-inspection-cancelled", "title": "realview_inspection.cancelled application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "realview_inspection.cancelled" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "remote visual inspection" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Commit actor, reason, cleanup, audit, and outbox exactly once." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeRealviewInspectionCancelled(event, seen) {\n if (event.eventType !== \"realview_inspection.cancelled\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"realview_inspection.cancelled\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"realview_inspection.cancelled\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeRealviewInspectionCancelled(event Event, seen map[string]bool) error {\n\tif event.EventType != \"realview_inspection.cancelled\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-cancelled" } ] } ``` ## event-contract · Vision Case Registered - Identity: `event-contract:vision-inference-review-vision-case-registered` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-case-registered ```json { "slug": "vision-inference-review-vision-case-registered", "eventType": "vision.case_registered", "eventVersion": 1, "title": "Vision Case Registered", "summary": "Application-owned vision evidence case fact emitted after register_case reaches registered.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "register_case", "actor": "Asset steward", "from": [], "to": "registered", "idempotency": "One external reference and asset hash map to one case across retries." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_case_registered", "eventType": "vision.case_registered", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Asset steward", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "registered", "command": "register_case", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-case-registered", "title": "vision.case_registered application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.case_registered" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One external reference and asset hash map to one case across retries." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionCaseRegistered(event, seen) {\n if (event.eventType !== \"vision.case_registered\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.case_registered\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.case_registered\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionCaseRegistered(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.case_registered\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-case-registered" } ] } ``` ## event-contract · Vision Model Locked - Identity: `event-contract:vision-inference-review-vision-model-locked` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-model-locked ```json { "slug": "vision-inference-review-vision-model-locked", "eventType": "vision.model_locked", "eventVersion": 1, "title": "Vision Model Locked", "summary": "Application-owned vision evidence case fact emitted after lock_model reaches model_locked.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "lock_model", "actor": "Vision worker", "from": [ "registered" ], "to": "model_locked", "idempotency": "Server reference, model key, metadata fingerprint, and policy version identify one lock." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_model_locked", "eventType": "vision.model_locked", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Vision worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "model_locked", "command": "lock_model", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-model-locked", "title": "vision.model_locked application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.model_locked" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Server reference, model key, metadata fingerprint, and policy version identify one lock." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionModelLocked(event, seen) {\n if (event.eventType !== \"vision.model_locked\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.model_locked\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.model_locked\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionModelLocked(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.model_locked\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-model-locked" } ] } ``` ## event-contract · Vision Inference Requested - Identity: `event-contract:vision-inference-review-vision-inference-requested` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-inference-requested ```json { "slug": "vision-inference-review-vision-inference-requested", "eventType": "vision.inference_requested", "eventVersion": 1, "title": "Vision Inference Requested", "summary": "Application-owned vision evidence case fact emitted after request_inference reaches inference_requested.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "request_inference", "actor": "Vision worker", "from": [ "model_locked" ], "to": "inference_requested", "idempotency": "One attempt identity binds the case version, asset hash, model fingerprint, and request policy." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_inference_requested", "eventType": "vision.inference_requested", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Vision worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "inference_requested", "command": "request_inference", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-inference-requested", "title": "vision.inference_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.inference_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One attempt identity binds the case version, asset hash, model fingerprint, and request policy." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionInferenceRequested(event, seen) {\n if (event.eventType !== \"vision.inference_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.inference_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.inference_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionInferenceRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.inference_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-inference-requested" } ] } ``` ## event-contract · Vision Inference Recorded - Identity: `event-contract:vision-inference-review-vision-inference-recorded` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-inference-recorded ```json { "slug": "vision-inference-review-vision-inference-recorded", "eventType": "vision.inference_recorded", "eventVersion": 1, "title": "Vision Inference Recorded", "summary": "Application-owned vision evidence case fact emitted after record_inference reaches inferred.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "record_inference", "actor": "Vision worker", "from": [ "inference_requested" ], "to": "inferred", "idempotency": "Provider status and response hash close one active attempt exactly once." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_inference_recorded", "eventType": "vision.inference_recorded", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Vision worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "inferred", "command": "record_inference", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-inference-recorded", "title": "vision.inference_recorded application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.inference_recorded" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Provider status and response hash close one active attempt exactly once." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionInferenceRecorded(event, seen) {\n if (event.eventType !== \"vision.inference_recorded\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.inference_recorded\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.inference_recorded\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionInferenceRecorded(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.inference_recorded\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-inference-recorded" } ] } ``` ## event-contract · Vision Review Requested - Identity: `event-contract:vision-inference-review-vision-review-requested` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-review-requested ```json { "slug": "vision-inference-review-vision-review-requested", "eventType": "vision.review_requested", "eventVersion": 1, "title": "Vision Review Requested", "summary": "Application-owned vision evidence case fact emitted after submit_review reaches review_pending.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "submit_review", "actor": "Policy service", "from": [ "inferred" ], "to": "review_pending", "idempotency": "Thresholds, reason codes, policy version, and attempt identity create one immutable review request." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_review_requested", "eventType": "vision.review_requested", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Policy service", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "review_pending", "command": "submit_review", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-review-requested", "title": "vision.review_requested application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.review_requested" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Thresholds, reason codes, policy version, and attempt identity create one immutable review request." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionReviewRequested(event, seen) {\n if (event.eventType !== \"vision.review_requested\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.review_requested\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.review_requested\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionReviewRequested(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.review_requested\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-review-requested" } ] } ``` ## event-contract · Vision Accepted - Identity: `event-contract:vision-inference-review-vision-accepted` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-accepted ```json { "slug": "vision-inference-review-vision-accepted", "eventType": "vision.accepted", "eventVersion": 1, "title": "Vision Accepted", "summary": "Application-owned vision evidence case fact emitted after accept reaches accepted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "accept", "actor": "Independent reviewer", "from": [ "review_pending" ], "to": "accepted", "idempotency": "Reviewer, reason, policy, attempt, and expected aggregate version identify the terminal decision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_accepted", "eventType": "vision.accepted", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Independent reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "accepted", "command": "accept", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-accepted", "title": "vision.accepted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.accepted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Reviewer, reason, policy, attempt, and expected aggregate version identify the terminal decision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionAccepted(event, seen) {\n if (event.eventType !== \"vision.accepted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.accepted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.accepted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionAccepted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.accepted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-accepted" } ] } ``` ## event-contract · Vision Rejected - Identity: `event-contract:vision-inference-review-vision-rejected` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-rejected ```json { "slug": "vision-inference-review-vision-rejected", "eventType": "vision.rejected", "eventVersion": 1, "title": "Vision Rejected", "summary": "Application-owned vision evidence case fact emitted after reject reaches rejected.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "reject", "actor": "Independent reviewer", "from": [ "review_pending" ], "to": "rejected", "idempotency": "Reviewer, reason, policy, attempt, and expected aggregate version identify the terminal decision." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_rejected", "eventType": "vision.rejected", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Independent reviewer", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "rejected", "command": "reject", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-rejected", "title": "vision.rejected application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.rejected" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "Reviewer, reason, policy, attempt, and expected aggregate version identify the terminal decision." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionRejected(event, seen) {\n if (event.eventType !== \"vision.rejected\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.rejected\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.rejected\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionRejected(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.rejected\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-rejected" } ] } ``` ## event-contract · Vision Redacted - Identity: `event-contract:vision-inference-review-vision-redacted` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-redacted ```json { "slug": "vision-inference-review-vision-redacted", "eventType": "vision.redacted", "eventVersion": 1, "title": "Vision Redacted", "summary": "Application-owned vision evidence case fact emitted after redact reaches redacted.", "authority": "application-blueprint", "providerPayloadClaimed": false, "journey": { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "productSlug": "ai-location", "stateModel": "stateful", "aggregate": "vision evidence case" }, "sourceGuideSlugs": [ "skydnn-aiapi-docs" ], "relatedContractSlugs": [ "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sampleSlug": "vision-evidence-desk", "producers": [ { "command": "redact", "actor": "Privacy worker", "from": [ "inferred", "review_pending", "accepted", "rejected" ], "to": "redacted", "idempotency": "One retention action removes derived detail while preserving the minimum integrity and audit record." } ], "envelope": [ { "name": "eventId", "type": "string", "required": true, "description": "Globally unique immutable identity used to deduplicate delivery and replay.", "example": "evt_example_0001" }, { "name": "eventType", "type": "string", "required": true, "description": "Names the application-owned fact. Consumers must reject or quarantine unknown values.", "example": "task.completed" }, { "name": "eventVersion", "type": "integer", "required": true, "description": "Version of this event contract. Version 1 is the only published version in this catalog.", "example": 1 }, { "name": "aggregateType", "type": "string", "required": true, "description": "Application aggregate that owns the transition.", "example": "task" }, { "name": "aggregateId", "type": "string", "required": true, "description": "Stable application identity; do not substitute a mutable display label.", "example": "example-task-001" }, { "name": "aggregateVersion", "type": "integer", "required": true, "description": "Monotonically increasing aggregate version after the transition.", "example": 7 }, { "name": "tenantId", "type": "string", "required": true, "description": "Application tenant boundary used for authorization and routing.", "example": "tenant_example" }, { "name": "actor", "type": "object", "required": true, "description": "Attributable actor type and application identity that caused or recorded the fact.", "example": { "type": "Supervisor", "id": "actor_example" } }, { "name": "occurredAt", "type": "string · date-time", "required": true, "description": "UTC time at which the underlying action occurred.", "example": "2026-01-01T10:00:00.000Z" }, { "name": "recordedAt", "type": "string · date-time", "required": true, "description": "UTC time at which the application durably committed the event.", "example": "2026-01-01T10:00:00.125Z" }, { "name": "idempotencyKey", "type": "string", "required": true, "description": "Stable key supplied by the producing command and retained across retries.", "example": "cmd_example_0001" }, { "name": "correlationId", "type": "string", "required": true, "description": "Identity shared by events and calls in one business journey.", "example": "corr_example_0001" }, { "name": "causationId", "type": "string | null", "required": true, "description": "Event or command that directly caused this fact; null only for a root event.", "example": null }, { "name": "data", "type": "object", "required": true, "description": "Application-owned, event-specific data. This catalog does not claim a Mappls provider payload shape.", "example": { "resultingState": "completed", "evidenceBoundary": "application-owned-example" } } ], "example": { "eventId": "evt_example_vision_inference_review_vision_redacted", "eventType": "vision.redacted", "eventVersion": 1, "aggregateType": "vision evidence case", "aggregateId": "example-vision-inference-review-001", "aggregateVersion": 1, "tenantId": "tenant_example", "actor": { "type": "Privacy worker", "id": "actor_example" }, "occurredAt": "2026-01-01T10:00:00.000Z", "recordedAt": "2026-01-01T10:00:00.125Z", "idempotencyKey": "cmd_example_0001", "correlationId": "corr_example_0001", "causationId": null, "data": { "resultingState": "redacted", "command": "redact", "evidenceBoundary": "application-owned-example" } }, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.mappls.com/events/schema.json#/$defs/vision-inference-review-vision-redacted", "title": "vision.redacted application event", "description": "Application-owned journey blueprint. This is not a claimed Mappls provider webhook or event payload.", "type": "object", "additionalProperties": false, "required": [ "eventId", "eventType", "eventVersion", "aggregateType", "aggregateId", "aggregateVersion", "tenantId", "actor", "occurredAt", "recordedAt", "idempotencyKey", "correlationId", "causationId", "data" ], "properties": { "eventId": { "type": "string", "minLength": 1 }, "eventType": { "const": "vision.redacted" }, "eventVersion": { "const": 1 }, "aggregateType": { "const": "vision evidence case" }, "aggregateId": { "type": "string", "minLength": 1 }, "aggregateVersion": { "type": "integer", "minimum": 1 }, "tenantId": { "type": "string", "minLength": 1 }, "actor": { "type": "object", "additionalProperties": false, "required": [ "type", "id" ], "properties": { "type": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 } } }, "occurredAt": { "type": "string", "format": "date-time" }, "recordedAt": { "type": "string", "format": "date-time" }, "idempotencyKey": { "type": "string", "minLength": 1 }, "correlationId": { "type": "string", "minLength": 1 }, "causationId": { "type": [ "string", "null" ] }, "data": { "type": "object", "description": "Application-owned event-specific data; define and version this object in the consuming application." } } }, "delivery": { "publisher": "Commit the aggregate transition and a transactional outbox row together; publish from the outbox after commit.", "orderingKey": "aggregateId", "consumerDeduplicationKey": "eventId", "producerIdempotency": [ "One retention action removes derived detail while preserving the minimum integrity and audit record." ], "replayRule": "Replay the immutable event with the same eventId. A consumer must not repeat its side effect when that eventId was already committed.", "unknownOutcomeRule": "After a timeout, reconcile the aggregate and outbox before retrying the same idempotencyKey; do not mint a replacement command identity.", "privacyRule": "Keep credentials, raw precise-location traces, media, and unnecessary personal data out of the envelope. Put governed references in data only when the application policy permits them." }, "samples": [ { "language": "javascript", "label": "JavaScript consumer", "code": "export function consumeVisionRedacted(event, seen) {\n if (event.eventType !== \"vision.redacted\" || event.eventVersion !== 1) return;\n if (seen.has(event.eventId)) return;\n if (!Number.isInteger(event.aggregateVersion) || event.aggregateVersion < 1) throw new Error(\"Invalid aggregateVersion\");\n // Apply one idempotent application-side projection here.\n seen.add(event.eventId);\n}" }, { "language": "python", "label": "Python consumer", "code": "def consume(event: dict, seen: set[str]) -> None:\n if event.get(\"eventType\") != \"vision.redacted\" or event.get(\"eventVersion\") != 1:\n return\n if event[\"eventId\"] in seen:\n return\n if not isinstance(event.get(\"aggregateVersion\"), int) or event[\"aggregateVersion\"] < 1:\n raise ValueError(\"Invalid aggregateVersion\")\n # Apply one idempotent application-side projection here.\n seen.add(event[\"eventId\"])" }, { "language": "java", "label": "Java consumer", "code": "void consume(Map event, Set seen) {\n if (!\"vision.redacted\".equals(event.get(\"eventType\")) || !Integer.valueOf(1).equals(event.get(\"eventVersion\"))) return;\n String eventId = (String) event.get(\"eventId\");\n if (seen.contains(eventId)) return;\n // Validate aggregateVersion, apply one idempotent projection, then commit the dedup record atomically.\n seen.add(eventId);\n}" }, { "language": "go", "label": "Go consumer", "code": "func ConsumeVisionRedacted(event Event, seen map[string]bool) error {\n\tif event.EventType != \"vision.redacted\" || event.EventVersion != 1 || seen[event.EventID] { return nil }\n\tif event.AggregateVersion < 1 { return errors.New(\"invalid aggregateVersion\") }\n\t// Apply one idempotent application-side projection here.\n\tseen[event.EventID] = true\n\treturn nil\n}\n\n// Contract: https://developer.mappls.com/events/vision-inference-review-vision-redacted" } ] } ``` ## sample-application · Store Locator - Identity: `sample-application:store-locator` - Canonical: https://developer.mappls.com/samples/store-locator ```json { "slug": "store-locator", "name": "Store Locator", "description": "Discover eligible branches, compare distance and ETA, preserve Mappls Pin identity, and hand off safely to navigation.", "stack": [ "Node.js", "Responsive map-and-list UI", "Nearby adapter", "Matrix adapter" ], "products": [ "maps", "search-places", "routes-navigation", "app-widgets-deep-links" ], "journey": "Locate → discover → filter → rank → select → navigate", "difficulty": "Starter", "downloadPath": "/downloads/store-locator.zip", "checksumPath": "/downloads/store-locator.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 6, "verifiedFeatures": [ "Responsive synchronized map and list", "Credential-safe server boundary", "Nearby and matrix contract provenance", "Stable Mappls Pin continuity", "Service intersection filters", "Opening and accessibility eligibility", "Distance, ETA, and name ranking", "Honest radius and empty states", "Validated navigation deep links", "Canonical bounded cache", "Defensive cache isolation" ] } ``` ## sample-application · Delivery Control Tower - Identity: `sample-application:delivery-control-tower` - Canonical: https://developer.mappls.com/samples/delivery-control-tower ```json { "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" ], "products": [ "intouch-telematics", "routes-navigation", "maps" ], "journey": "Plan → ready → track → recover → close → replay", "difficulty": "Advanced", "downloadPath": "/downloads/delivery-control-tower.zip", "checksumPath": "/downloads/delivery-control-tower.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 7, "verifiedFeatures": [ "Responsive fleet control tower", "Durable trip aggregates", "Immutable telemetry ledger", "Event-time and receipt-time ordering", "Late-event derived revisions", "Owned exception recovery", "Idempotent commands and observations", "Optimistic concurrency", "Transactional outbox", "InTouch adapter boundary", "Provider close reconciliation", "Restart recovery" ] } ``` ## sample-application · Grid Restoration Desk - Identity: `sample-application:grid-restoration-desk` - Canonical: https://developer.mappls.com/samples/grid-restoration-desk ```json { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "stack": [ "Node.js", "Responsive operations desk", "Atomic evidence repository", "Mappls fixture adapter" ], "products": [ "gis-analytics", "intouch-telematics", "workmate", "routes-navigation", "capture-feedback" ], "journey": "Report → correlate → approve switching → dispatch → prove → reconcile", "difficulty": "Advanced", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 14, "verifiedFeatures": [ "Responsive restoration operations desk", "Complete eight-event outage journey", "Role-scoped operational commands", "Independent switching-plan approval", "Assigned-crew enforcement", "Independent restoration reconciliation", "Telemetry and customer-impact recovery gate", "Rejected-attempt retention and rework", "Map and route evidence separated from electrical authority", "Private evidence and credential rejection", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free zero-network fixture mode" ] } ``` ## sample-application · Care Transfer Desk - Identity: `sample-application:care-transfer-desk` - Canonical: https://developer.mappls.com/samples/care-transfer-desk ```json { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "stack": [ "Node.js", "Responsive custody desk", "Atomic evidence repository", "Mappls care fixture adapter" ], "products": [ "search-places", "routes-navigation", "intouch-telematics", "capture-feedback", "gis-analytics" ], "journey": "Request → confirm facility → assign → custody → review exceptions → accept", "difficulty": "Advanced", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 17, "verifiedFeatures": [ "Responsive privacy-minimized custody desk", "Complete ten-event exception-aware journey", "Exact role-scoped commands", "Confirmed clinical-entrance revision", "Bounded transport eligibility and stability window", "Assigned-courier custody enforcement", "Independent condition-exception review", "Arrival separated from completion", "Custody-bound receiver acceptance", "Independent quality reconciliation", "Rejected receipt retention and rework", "Patient and clinical evidence rejection", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free zero-network fixture mode" ] } ``` ## sample-application · Airside Turnaround Desk - Identity: `sample-application:airside-turnaround-desk` - Canonical: https://developer.mappls.com/samples/airside-turnaround-desk ```json { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "stack": [ "Node.js", "Responsive airside control desk", "Atomic evidence repository", "Mappls aviation fixture adapter" ], "products": [ "gis-analytics", "intouch-telematics", "workmate", "maps", "capture-feedback" ], "journey": "Draft → lock stand → plan → dispatch → evidence → review → ready", "difficulty": "Advanced", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 22, "verifiedFeatures": [ "Responsive aviation control desk", "Complete sixteen-event exception-aware journey", "Exact role-scoped operational commands", "Immutable stand and zone revisions", "Stale plan and assignment invalidation", "Eligible vehicle and assigned-lead enforcement", "Four independently evidenced service milestones", "Independent airside exception investigation", "Abort without invented readiness", "Airline, airport, and safety authority separation", "Map, route, task, and telemetry evidence separated from authority", "Passenger, location, clearance, and credential rejection", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free zero-network fixture mode" ] } ``` ## sample-application · Field Service Console - Identity: `sample-application:field-service` - Canonical: https://developer.mappls.com/samples/field-service ```json { "slug": "field-service", "name": "Field Service Console", "description": "Create, assign, execute, and audit a technician visit with proof.", "stack": [ "Node.js", "Browser UI", "Workmate adapter" ], "products": [ "workmate", "routes-navigation", "capture-feedback" ], "journey": "Create → assign → accept → travel → prove → close", "difficulty": "Production pattern", "downloadPath": "/downloads/field-service.zip", "checksumPath": "/downloads/field-service.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 6, "verifiedFeatures": [ "Browser operations console", "Durable task snapshots", "Append-only audit history", "Idempotent commands", "Optimistic concurrency", "Proof approval and rework", "Transactional outbox", "Mappls adapter boundary", "Restart recovery" ] } ``` ## sample-application · Fleet Geofence Monitor - Identity: `sample-application:fleet-geofence` - Canonical: https://developer.mappls.com/samples/fleet-geofence ```json { "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" ], "products": [ "intouch-telematics", "maps" ], "journey": "Draft → publish → breach → acknowledge → resolve", "difficulty": "Production pattern", "downloadPath": "/downloads/fleet-geofence.zip", "checksumPath": "/downloads/fleet-geofence.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 7, "verifiedFeatures": [ "Responsive exception queue", "Validated geofence geometry", "Versioned provider rule identity", "Immutable source activity ledger", "Jitter suppression without evidence loss", "Asset-scope enforcement", "Named case ownership and SLA", "Evidence-backed resolution", "Safe rule retirement", "Idempotent activity ingestion", "Optimistic concurrency", "Transactional outbox", "Restart recovery" ] } ``` ## sample-application · Retail Site Lab - Identity: `sample-application:retail-site-lab` - Canonical: https://developer.mappls.com/samples/retail-site-lab ```json { "slug": "retail-site-lab", "name": "Retail Site Lab", "description": "Compare candidate sites through immutable dataset versions, reproducible scoring, lineage, and governed sharing.", "stack": [ "Node.js", "Browser UI", "mGIS adapter", "Insight lineage" ], "products": [ "gis-analytics", "search-places" ], "journey": "Version → validate → publish → process → share → revoke", "difficulty": "Advanced", "downloadPath": "/downloads/retail-site-lab.zip", "checksumPath": "/downloads/retail-site-lab.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 8, "verifiedFeatures": [ "Responsive decision lab", "Immutable dataset versions", "Content-hash deduplication", "CRS and feature diagnostics", "Reproducible weighted scoring", "Parameter and input lineage", "Failed-attempt retry links", "Audience, expiry, export, and embed policy", "Share revocation without evidence loss", "Idempotent commands", "Optimistic concurrency", "Transactional outbox", "Restart recovery" ] } ``` ## sample-application · Weekend Trip Planner - Identity: `sample-application:trip-planner` - Canonical: https://developer.mappls.com/samples/trip-planner ```json { "slug": "trip-planner", "name": "Weekend Trip Planner", "description": "Preserve Mappls place identity through a durable ordered itinerary, route revisions, progress, and completion.", "stack": [ "Node.js", "Responsive itinerary UI", "Search adapter", "Routes adapter" ], "products": [ "maps", "search-places", "routes-navigation", "app-widgets-deep-links" ], "journey": "Discover → save → sequence → preview → go → complete", "difficulty": "Starter", "downloadPath": "/downloads/trip-planner.zip", "checksumPath": "/downloads/trip-planner.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 8, "verifiedFeatures": [ "Responsive itinerary planner", "Provider-backed discovery provenance", "Mappls Pin identity continuity", "Bounded duplicate-free stops", "Exact sequence validation", "Profile-aware multi-leg routes", "Immutable route revisions", "Automatic stale-route invalidation", "Ordered visit and explicit skip progress", "Pause, resume, and deliberate cancellation", "Completion invariants", "Idempotent commands", "Optimistic concurrency", "Transactional outbox", "Restart recovery" ] } ``` ## sample-application · Incident Dispatch - Identity: `sample-application:incident-dispatch` - Canonical: https://developer.mappls.com/samples/incident-dispatch ```json { "slug": "incident-dispatch", "name": "Incident Dispatch", "description": "Resolve an incident, choose a capable available responder, route, track evidence, enforce arrival, and review.", "stack": [ "Node.js", "Browser control room", "Search adapter", "Routes adapter", "InTouch adapter" ], "products": [ "search-places", "routes-navigation", "intouch-telematics", "gis-analytics" ], "journey": "Report → locate → dispatch → route → coordinate → resolve → review", "difficulty": "Advanced", "downloadPath": "/downloads/incident-dispatch.zip", "checksumPath": "/downloads/incident-dispatch.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 8, "verifiedFeatures": [ "Responsive incident command UI", "Stable CAD identity", "Confidence-bearing location resolution", "Capability and availability filtering", "Matrix ETA responder ranking", "Active-unit double-dispatch prevention", "Assigned-unit acceptance", "Vehicle-aware route identity", "Event-time telemetry ordering", "Late evidence without state regression", "Hazard updates", "Objective arrival policy", "Resolution evidence", "Attributable review metrics", "Idempotent commands", "Optimistic concurrency", "Transactional outbox", "Restart recovery" ] } ``` ## sample-application · Address Verifier - Identity: `sample-application:address-verifier` - Canonical: https://developer.mappls.com/samples/address-verifier ```json { "slug": "address-verifier", "name": "Address Verifier", "description": "Normalize an address, govern consented device evidence, apply versioned policy, and retain an attributable decision.", "stack": [ "Node.js", "Browser trust studio", "Search adapter", "Evidence ledger" ], "products": [ "search-places", "capture-feedback" ], "journey": "Enter → normalize → consent → capture → compare → decide → redact", "difficulty": "Production pattern", "downloadPath": "/downloads/address-verifier.zip", "checksumPath": "/downloads/address-verifier.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 8, "verifiedFeatures": [ "Responsive trust studio", "Stable external business identity", "Mappls Pin normalization and provenance", "Purpose-bound expiring consent", "Consent revocation", "Immutable device-evidence ledger", "Event and receipt time", "Accuracy-bearing capture", "Evidence content hashes", "Versioned distance policy", "Mandatory weak-evidence review", "Automated override prevention", "Precise-data redaction with audit retention", "Idempotent commands", "Optimistic concurrency", "Transactional outbox", "Restart recovery" ] } ``` ## sample-application · Map Story - Identity: `sample-application:map-story` - Canonical: https://developer.mappls.com/samples/map-story ```json { "slug": "map-story", "name": "Map Story", "description": "Compile validated GeoJSON into an accessible, deterministic, source-disclosed narrative map.", "stack": [ "Node.js", "Accessible scrollytelling UI", "GeoJSON compiler" ], "products": [ "maps", "gis-analytics" ], "journey": "Validate → compile → encode → narrate → share", "difficulty": "Starter", "downloadPath": "/downloads/map-story.zip", "checksumPath": "/downloads/map-story.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 5, "verifiedFeatures": [ "Responsive scrollytelling experience", "Bounded GeoJSON compiler", "Geometry and coordinate validation", "Unique feature and sequence identity", "Numeric range enforcement", "Markup-safe narrative content", "Derived geographic bounds and metrics", "Deterministic documented visual encoding", "Keyboard-accessible map points", "Scroll, focus, and URL synchronization", "Required source, date, and license disclosure", "Honest fixture labelling" ] } ``` ## sample-application · Spatial Operations Agent - Identity: `sample-application:spatial-agent` - Canonical: https://developer.mappls.com/samples/spatial-agent ```json { "slug": "spatial-agent", "name": "Spatial Operations Agent", "description": "Research, plan, approve, execute, and cite grounded Mappls MCP operations through fixture, local stdio, or authenticated remote transports.", "stack": [ "Node.js", "Browser agent lab", "Mappls MCP SDK client" ], "products": [ "ai-location", "search-places", "routes-navigation", "intouch-telematics" ], "journey": "Ask → plan → review → approve → execute → cite", "difficulty": "Advanced", "downloadPath": "/downloads/spatial-agent.zip", "checksumPath": "/downloads/spatial-agent.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 15, "verifiedFeatures": [ "Responsive governed-agent UI", "Six-pattern agent authority planner", "Twelve conditional governance controls", "Eight-dimension evaluation contract", "Credential-free solution research", "All sixteen industries and thirteen platform targets", "Deterministic fixture boundary", "Real local stdio MCP client", "Authenticated Streamable HTTP MCP client", "Offline and live-read profile isolation", "HTTPS and exact endpoint validation", "Bounded arguments, calls, buffers, and outputs", "Advertised-tool enforcement", "Gateway credential non-echo", "Deterministic allow-listed plans", "Immutable SHA-256 plan identity", "Human approval as a state transition", "Explicit least-privilege scopes", "Expiring approvals", "Sensitive live-location risk class", "Dependency-bound tool execution", "Provider provenance on every live result", "Explicit catalog provenance for offline tools", "Grounded per-step citations", "Secret-safe failure persistence", "Idempotent commands", "Optimistic concurrency", "Transactional outbox", "Graceful MCP shutdown", "Restart recovery" ] } ``` ## sample-application · A2A Solution Studio - Identity: `sample-application:a2a-solution-studio` - Canonical: https://developer.mappls.com/samples/a2a-solution-studio ```json { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "stack": [ "Node.js", "Responsive coordination UI", "Official A2A SDK client", "Durable evidence ledger" ], "products": [ "ai-location", "search-places", "routes-navigation", "intouch-telematics" ], "journey": "Draft → discover profile → delegate → reconcile → review → accept or reject", "difficulty": "Advanced", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 21, "verifiedFeatures": [ "Responsive A2A coordination studio", "Official A2A v1 SDK client", "JSONRPC and HTTP+JSON negotiation", "OAuth-protected A2A client", "Transport token non-persistence", "Agent Card OAuth contract validation", "Offline and live-read profile discovery", "All ten live-read command contracts", "Exact live-read OAuth scope", "Purpose and data-class evidence", "One-read authority validation", "Provider payload excluded from audit", "Credential-free zero-network fixture", "Agent Card SHA-256 fingerprint", "Advertised-skill and protocol validation", "Client-owned message and context identity", "Server-assigned task identity", "Unknown-outcome context reconciliation", "Structured-only command allowlist", "Canonical command and artifact digests", "Offline authority non-escalation", "Live authority non-escalation", "Human accept and reject review", "Explicit no provider writes", "Explicit no production approval", "Idempotent commands", "Changed-intent replay rejection", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Bounded input and Agent Card", "HTTPS outside loopback" ] } ``` ## sample-application · MCP Identity Interoperability Lab - Identity: `sample-application:mcp-identity-lab` - Canonical: https://developer.mappls.com/samples/mcp-identity-lab ```json { "slug": "mcp-identity-lab", "name": "MCP Identity Interoperability Lab", "description": "Provision, discover, validate, and revoke a remote MCP client through a signed, replay-safe control-plane adapter and a non-issuing OAuth interoperability sandbox.", "stack": [ "Node.js", "Signed pre-registration adapter", "OAuth discovery validator", "Durable audit UI" ], "products": [ "ai-location" ], "journey": "Approve → deliver → register → discover → validate → revoke", "difficulty": "Advanced", "downloadPath": "/downloads/mcp-identity-lab.zip", "checksumPath": "/downloads/mcp-identity-lab.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 13, "verifiedFeatures": [ "Responsive identity boundary explorer", "Worker-compatible HMAC-SHA256 envelope", "Five-minute signature freshness window", "Strict 32 KiB request bound", "Secret-shaped field rejection", "Public and confidential callback policy", "Deterministic non-secret client identity", "Signed retry contract compatibility", "Exact replay and event conflict handling", "Durable signed-event receipts", "RFC 9728 protected-resource metadata", "RFC 8414 authorization-server metadata", "Exact OAuth resource indicator", "PKCE S256 request validation", "Exact redirect and least-scope checks", "No authorization-code or token issuance", "Idempotent conformance runs", "Typed revocation outcomes", "Append-only audit evidence", "Atomic file persistence", "Restart recovery" ] } ``` ## sample-application · Vision Evidence Desk - Identity: `sample-application:vision-evidence-desk` - Canonical: https://developer.mappls.com/samples/vision-evidence-desk ```json { "slug": "vision-evidence-desk", "name": "Vision Evidence Desk", "description": "Lock a SkyDNN model to an immutable asset identity, record a synchronous fixture inference, validate geometry and confidence, review independently, and redact derived detections on schedule.", "stack": [ "Node.js", "Responsive review UI", "SkyDNN synchronous adapter", "Evidence and retention ledger" ], "products": [ "ai-location", "gis-analytics", "capture-feedback" ], "journey": "Register → lock model → infer → validate → review → decide → redact", "difficulty": "Advanced", "downloadPath": "/downloads/vision-evidence-desk.zip", "checksumPath": "/downloads/vision-evidence-desk.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 10, "verifiedFeatures": [ "Responsive vision-review desk", "Public OpenAPI and marketing boundary separation", "Synchronous provider contract separated from application workflow", "No image body, media URL, credential, face, plate, or internal path input", "Opaque asset references and SHA-256 identity", "Purpose, lawful-basis, capture-time, and retention gates", "Entitled model-discovery fixture", "Immutable model fingerprint lock", "Idempotent inference attempts", "Normalized rectangle, polygon, and polyline validation", "Confidence and sensitive-class review policy", "Independent reviewer separation of duties", "Attributable acceptance and rejection", "Derived-output redaction with minimum audit retention", "Secret-safe provider failures", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free fixture mode" ] } ``` ## sample-application · Widget Journey Host - Identity: `sample-application:widget-journey-host` - Canonical: https://developer.mappls.com/samples/widget-journey-host ```json { "slug": "widget-journey-host", "name": "Widget Journey Host", "description": "Own a complete place-selection journey around a Mappls widget: launch, recover through fallback, normalize a candidate, commit deliberately, invalidate stale selection, and submit exactly once in effect.", "stack": [ "Node.js", "Responsive host form UI", "Widget message adapter", "Durable evidence store" ], "products": [ "app-widgets-deep-links", "search-places" ], "journey": "Draft → open → candidate → commit → submit", "difficulty": "Production pattern", "downloadPath": "/downloads/widget-journey-host.zip", "checksumPath": "/downloads/widget-journey-host.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 8, "verifiedFeatures": [ "Responsive widget-host journey", "Exact-origin postMessage validation", "Versioned candidate schema", "Mappls Pin normalization", "Opaque provider result rejection", "Application-owned durable selection", "Useful manual fallback", "Stale-selection invalidation after host edits", "Deliberate cancellation", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Restart recovery", "Credential-free fixture mode" ] } ``` ## sample-application · Deep-link & Native UI Journey Host - Identity: `sample-application:deep-link-journey-host` - Canonical: https://developer.mappls.com/samples/deep-link-journey-host ```json { "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" ], "products": [ "app-widgets-deep-links", "routes-navigation", "intouch-telematics" ], "journey": "Draft → edit → validate → select or review → acknowledge", "difficulty": "Production pattern", "downloadPath": "/downloads/deep-link-journey-host.zip", "checksumPath": "/downloads/deep-link-journey-host.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 11, "verifiedFeatures": [ "Responsive direction and geofence journey lab", "Exact documented Mappls navigation HTTPS fallback", "Validated Mappls app URI", "Explicit no-return-callback evidence boundary", "Versioned host-owned iOS adapter envelopes", "Stale editor generation rejection", "Immutable route and geometry draft revisions", "Route-index and intent-match validation", "Navigation request separated from target acceptance", "Circle radius and coordinate bounds", "Canonical non-crossing polygon validation", "SHA-256 geometry identity", "Independent geofence reviewer separation of duties", "Approved application draft separated from provider publication", "No invented geofence deep link or rule identity", "Idempotent commands", "Cross-aggregate replay rejection", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free fixture mode" ] } ``` ## sample-application · Place Contribution Desk - Identity: `sample-application:place-contribution-desk` - Canonical: https://developer.mappls.com/samples/place-contribution-desk ```json { "slug": "place-contribution-desk", "name": "Place Contribution Desk", "description": "Embed the public Add a Place form, preserve contributor-reported submission as testimony, reconcile independently, and close only with attributable publication evidence.", "stack": [ "Node.js", "Responsive operations UI", "Add a Place iframe", "Reconciliation evidence ledger" ], "products": [ "app-widgets-deep-links", "capture-feedback", "search-places" ], "journey": "Draft → open → report → reconcile → publish, reject, or withdraw", "difficulty": "Production pattern", "downloadPath": "/downloads/place-contribution-desk.zip", "checksumPath": "/downloads/place-contribution-desk.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 8, "verifiedFeatures": [ "Responsive contribution operations desk", "Corrected public iframe query shape", "No undocumented submission endpoint", "No invented callback or receipt", "Contributor testimony separated from provider evidence", "Seven explicit lifecycle states", "Immutable widget attempts", "Mappls Pin evidence validation", "Allow-listed evidence sources", "Explicit application-side withdrawal boundary", "Rejection and immutable retry", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free fixture mode" ] } ``` ## sample-application · RealView Inspection Desk - Identity: `sample-application:realview-inspection-desk` - Canonical: https://developer.mappls.com/samples/realview-inspection-desk ```json { "slug": "realview-inspection-desk", "name": "RealView Inspection Desk", "description": "Qualify paid RealView access, open bounded viewer attempts, validate the documented no-imagery signal, record human observations, and require separate review without persisting tokens or imagery.", "stack": [ "Node.js", "Responsive inspection UI", "RealView Auth2 adapter", "Human evidence and review ledger" ], "products": [ "app-widgets-deep-links", "maps", "capture-feedback" ], "journey": "Draft → entitle → view → observe → review → accept or rework", "difficulty": "Advanced", "downloadPath": "/downloads/realview-inspection-desk.zip", "checksumPath": "/downloads/realview-inspection-desk.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 10, "verifiedFeatures": [ "Responsive remote-inspection desk", "Paid-entitlement state separated from application state", "No credential or token-bearing URL input", "Non-secret entitlement references", "Ephemeral token-handle model", "Exact Auth2 origin equality", "One-field status-204 schema validation", "Lookalike-origin rejection", "HTTP shell and coverage evidence separation", "Immutable viewer attempts", "Human observations without provider metadata", "No imagery or screenshot persistence", "Inspector-reviewer separation of duties", "Entitlement expiry recovery", "Immutable rework", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free fixture mode" ] } ``` ## sample-application · Offline Release Control - Identity: `sample-application:offline-release-control` - Canonical: https://developer.mappls.com/samples/offline-release-control ```json { "slug": "offline-release-control", "name": "Offline Release Control", "description": "Operate an entitled offline or automotive runtime as one compatible, dual-slot release across manufacture, activation, installation, qualification, update, interruption, rollback, and retirement.", "stack": [ "Node.js", "Responsive fleet release UI", "A/B slot controller", "Manifest and qualification ledger" ], "products": [ "offline-automotive", "maps", "routes-navigation" ], "journey": "Manufacture → activate → install → qualify → update → recover → retire", "difficulty": "Advanced", "downloadPath": "/downloads/offline-release-control.zip", "checksumPath": "/downloads/offline-release-control.zip.sha256", "implementation": "full-stack-reference", "verifiedTestCount": 10, "verifiedFeatures": [ "Responsive fleet release console", "Public and local evidence-generation separation", "No runtime, map package, binary, license, activation key, credential, or URL input", "Non-secret entitlement evidence", "Runtime/data/configuration/voice manifest unit", "Exact CPU/ABI/OS/graphics compatibility", "SHA-256 manifest and component identities", "Independent signature and observed-digest attestations", "Dual-slot active and known-good invariants", "Download, verify, stage, switch, and qualify checkpoints", "Seven-lane deterministic qualification suite", "Power-loss recovery before atomic switch", "Power-loss rollback after switch", "Post-qualification regression rollback", "Activation expiry and offline-grace gate", "Retirement without history deletion", "Idempotent commands", "Optimistic concurrency", "Append-only audit events", "Transactional outbox", "Atomic restart recovery", "Credential-free fixture mode" ] } ``` ## implementation-recipe · Contract slice: A delivery promise customers can trust - Identity: `implementation-recipe:last-mile-delivery-request-response` - Canonical: https://developer.mappls.com/recipes/last-mile-delivery-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "last-mile-delivery-request-response", "title": "Contract slice: A delivery promise customers can trust", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Logistics", "scenario": "At 18:05 a customer places a same-evening grocery order to a loosely formatted apartment address. The promise engine has eight minutes to validate serviceability and a two-hour window; dispatch must combine it with 37 stops, the driver may lose connectivity, and support needs one explainable timeline when the entrance is hard to find.", "outcome": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep.", "audience": [ "Checkout customer", "Dispatch planner" ], "metrics": [ "First-attempt delivery rate", "Cost per stop", "ETA error", "Distance per order" ], "useCase": { "slug": "last-mile-delivery", "title": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Normalize the destination and retain its Mappls Pin", "owner": "Order system of record", "implementation": "Owns order, customer promise, consent, service window, package constraints, payment, and terminal delivery outcome.", "dataContract": "Order ↔ destination Mappls Pin and acceptance timestamp", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Ambiguous apartment entrance", "recovery": "Offer landmark/entrance candidates, let the customer confirm one stable pin, and preserve the original address plus every selection revision." } }, { "id": "stage-2", "title": "Optimize stops against capacity and time windows", "owner": "Location normalization", "implementation": "Search and address services produce candidates; the accepted Mappls Pin becomes the durable destination identity rather than repeatedly geocoding text.", "dataContract": "Route revision ↔ ordered stop IDs, profile, constraints, provider request identity", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver telemetry goes silent", "recovery": "Show last verified progress and age, alert dispatch after policy threshold, and avoid inventing a moving ETA." } } ], "contracts": [ { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "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", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "authMode": "bearer", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-search-json-autosuggest-api", "primaryOperation": "GET /api/places/search/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/last-mile-delivery-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Pilot address capture and Mappls Pin continuity on one checkout flow", "Add matrix-assisted planning in shadow mode and compare against dispatcher choices" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/last-mile-delivery-request-response" } ``` ## implementation-recipe · Application flow: A delivery promise customers can trust - Identity: `implementation-recipe:last-mile-delivery-composed-experience` - Canonical: https://developer.mappls.com/recipes/last-mile-delivery-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "last-mile-delivery-composed-experience", "title": "Application flow: A delivery promise customers can trust", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Logistics", "scenario": "At 18:05 a customer places a same-evening grocery order to a loosely formatted apartment address. The promise engine has eight minutes to validate serviceability and a two-hour window; dispatch must combine it with 37 stops, the driver may lose connectivity, and support needs one explainable timeline when the entrance is hard to find.", "outcome": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep.", "audience": [ "Checkout customer", "Dispatch planner", "Driver", "Customer-support agent" ], "metrics": [ "First-attempt delivery rate", "Cost per stop", "ETA error", "Distance per order" ], "useCase": { "slug": "last-mile-delivery", "title": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Normalize the destination and retain its Mappls Pin", "owner": "Order system of record", "implementation": "Owns order, customer promise, consent, service window, package constraints, payment, and terminal delivery outcome.", "dataContract": "Order ↔ destination Mappls Pin and acceptance timestamp", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Ambiguous apartment entrance", "recovery": "Offer landmark/entrance candidates, let the customer confirm one stable pin, and preserve the original address plus every selection revision." } }, { "id": "stage-2", "title": "Optimize stops against capacity and time windows", "owner": "Location normalization", "implementation": "Search and address services produce candidates; the accepted Mappls Pin becomes the durable destination identity rather than repeatedly geocoding text.", "dataContract": "Route revision ↔ ordered stop IDs, profile, constraints, provider request identity", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "method": "GET", "path": "/{rest_key}/{resources}/{profile}/{geopositions}", "summary": "Route Optimization API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routeOpt.yml", "sourceFingerprint": "af458e128aba8f5264d3747175f1b5cfdf6929686fb4e12872d20d69b8fa7ac9", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver telemetry goes silent", "recovery": "Show last verified progress and age, alert dispatch after policy threshold, and avoid inventing a moving ETA." } }, { "id": "stage-3", "title": "Navigate with live rerouting", "owner": "Planning and guidance", "implementation": "Route and matrix boundaries sequence eligible stops, preserve route revisions, and provide driver guidance without making the map UI authoritative.", "dataContract": "Telemetry event ↔ source/event/content identity, event time, receipt time, accuracy", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Provider accepts a route/trip command after timeout", "recovery": "Reconcile by idempotency/provider identity before issuing another command or closing locally." } }, { "id": "stage-4", "title": "Stream driver and order state", "owner": "Trip evidence", "implementation": "InTouch observations are deduplicated by source identity and event time; ETA revisions and exceptions are derived without rewriting raw telemetry.", "dataContract": "Proof submission ↔ consent purpose, media hashes, location evidence, reviewer decision", "contract": { "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", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "authMode": "bearer", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Ambiguous apartment entrance", "recovery": "Offer landmark/entrance candidates, let the customer confirm one stable pin, and preserve the original address plus every selection revision." } } ], "contracts": [ { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "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", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "authMode": "bearer", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "method": "GET", "path": "/{rest_key}/{resources}/{profile}/{geopositions}", "summary": "Route Optimization API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routeOpt.yml", "sourceFingerprint": "af458e128aba8f5264d3747175f1b5cfdf6929686fb4e12872d20d69b8fa7ac9", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "authMode": "bearer", "href": "/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-search-json-autosuggest-api", "primaryOperation": "GET /api/places/search/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/last-mile-delivery-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Pilot address capture and Mappls Pin continuity on one checkout flow", "Add matrix-assisted planning in shadow mode and compare against dispatcher choices", "Enable one depot with bounded live telemetry and exception ownership", "Expose customer ETA only after freshness/error SLOs pass" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/last-mile-delivery-composed-experience" } ``` ## implementation-recipe · Operating journey: A delivery promise customers can trust - Identity: `implementation-recipe:last-mile-delivery-durable-operation` - Canonical: https://developer.mappls.com/recipes/last-mile-delivery-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "last-mile-delivery-durable-operation", "title": "Operating journey: A delivery promise customers can trust", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Logistics", "scenario": "At 18:05 a customer places a same-evening grocery order to a loosely formatted apartment address. The promise engine has eight minutes to validate serviceability and a two-hour window; dispatch must combine it with 37 stops, the driver may lose connectivity, and support needs one explainable timeline when the entrance is hard to find.", "outcome": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep.", "audience": [ "Checkout customer", "Dispatch planner", "Driver", "Customer-support agent", "Transport partner" ], "metrics": [ "First-attempt delivery rate", "Cost per stop", "ETA error", "Distance per order" ], "useCase": { "slug": "last-mile-delivery", "title": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Normalize the destination and retain its Mappls Pin", "owner": "Order system of record", "implementation": "Owns order, customer promise, consent, service window, package constraints, payment, and terminal delivery outcome.", "dataContract": "Order ↔ destination Mappls Pin and acceptance timestamp", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Ambiguous apartment entrance", "recovery": "Offer landmark/entrance candidates, let the customer confirm one stable pin, and preserve the original address plus every selection revision." } }, { "id": "stage-2", "title": "Optimize stops against capacity and time windows", "owner": "Location normalization", "implementation": "Search and address services produce candidates; the accepted Mappls Pin becomes the durable destination identity rather than repeatedly geocoding text.", "dataContract": "Route revision ↔ ordered stop IDs, profile, constraints, provider request identity", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "method": "GET", "path": "/{rest_key}/{resources}/{profile}/{geopositions}", "summary": "Route Optimization API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routeOpt.yml", "sourceFingerprint": "af458e128aba8f5264d3747175f1b5cfdf6929686fb4e12872d20d69b8fa7ac9", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver telemetry goes silent", "recovery": "Show last verified progress and age, alert dispatch after policy threshold, and avoid inventing a moving ETA." } }, { "id": "stage-3", "title": "Navigate with live rerouting", "owner": "Planning and guidance", "implementation": "Route and matrix boundaries sequence eligible stops, preserve route revisions, and provide driver guidance without making the map UI authoritative.", "dataContract": "Telemetry event ↔ source/event/content identity, event time, receipt time, accuracy", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Provider accepts a route/trip command after timeout", "recovery": "Reconcile by idempotency/provider identity before issuing another command or closing locally." } }, { "id": "stage-4", "title": "Stream driver and order state", "owner": "Trip evidence", "implementation": "InTouch observations are deduplicated by source identity and event time; ETA revisions and exceptions are derived without rewriting raw telemetry.", "dataContract": "Proof submission ↔ consent purpose, media hashes, location evidence, reviewer decision", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Ambiguous apartment entrance", "recovery": "Offer landmark/entrance candidates, let the customer confirm one stable pin, and preserve the original address plus every selection revision." } }, { "id": "stage-5", "title": "Capture geotagged proof and reconcile exceptions", "owner": "Customer and operations views", "implementation": "A privacy-reduced tracking projection serves the customer while dispatch/support retain the attributable full journey and proof-review queue.", "dataContract": "Order ↔ destination Mappls Pin and acceptance timestamp", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver telemetry goes silent", "recovery": "Show last verified progress and age, alert dispatch after policy threshold, and avoid inventing a moving ETA." } } ], "contracts": [ { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "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", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "authMode": "bearer", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "method": "GET", "path": "/{rest_key}/{resources}/{profile}/{geopositions}", "summary": "Route Optimization API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routeOpt.yml", "sourceFingerprint": "af458e128aba8f5264d3747175f1b5cfdf6929686fb4e12872d20d69b8fa7ac9", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/trip.json", "sourceFingerprint": "f475d06cfb9d7bafd8521d713749489be1b26d16de205007fd0b42eef06c254f", "authMode": "bearer", "href": "/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-search-json-autosuggest-api", "primaryOperation": "GET /api/places/search/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/last-mile-delivery-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Pilot address capture and Mappls Pin continuity on one checkout flow", "Add matrix-assisted planning in shadow mode and compare against dispatcher choices", "Enable one depot with bounded live telemetry and exception ownership", "Expose customer ETA only after freshness/error SLOs pass", "Scale by region with cost, privacy, support, and failover reviews" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/last-mile-delivery-durable-operation" } ``` ## implementation-recipe · Contract slice: A pickup flow that survives the real world - Identity: `implementation-recipe:ride-hailing-request-response` - Canonical: https://developer.mappls.com/recipes/ride-hailing-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "ride-hailing-request-response", "title": "Contract slice: A pickup flow that survives the real world", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Mobility", "scenario": "At a busy railway station, a rider searches for the station name but the legal vehicle pickup point is 420 metres away. The marketplace must suggest a safe entrance, match a driver by road ETA rather than straight-line distance, guide both parties, and preserve a reviewable record if either disputes arrival.", "outcome": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points.", "audience": [ "Rider", "Driver" ], "metrics": [ "Pickup ETA", "Cancellation rate", "Driver idle distance", "Pickup support contacts" ], "useCase": { "slug": "ride-hailing", "title": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, "products": [ { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" } ], "workflow": [ { "id": "stage-1", "title": "Bias search to the rider viewport", "owner": "Trip marketplace", "implementation": "Owns request, fare, rider/driver identities, eligibility, assignment, cancellation, safety state, and settlement.", "dataContract": "Ride request ↔ accepted pickup/drop Mappls Pins and selection revisions", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search resolves the building centre", "recovery": "Present signed pickup zones/entrances as candidates and require explicit rider confirmation before matching." } }, { "id": "stage-2", "title": "Confirm a precise pickup pin and landmark", "owner": "Pickup intent", "implementation": "Autosuggest and map confirmation resolve human text and viewport context to a precise Mappls Pin with entrance/landmark explanation.", "dataContract": "Driver candidate ↔ capability, availability, position freshness, matrix ETA", "contract": { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver location is stale", "recovery": "Exclude it from ETA ranking, show marketplace capacity honestly, and request fresh evidence rather than extrapolating indefinitely." } } ], "contracts": [ { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" } ], "contractCoverage": [ { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "difficulty": "Advanced", "declaredTests": 21, "href": "/samples/a2a-solution-studio", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-rest-key-still-image-still-map-image-api", "primaryOperation": "GET /{REST_KEY}/still_image", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/ride-hailing-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Instrument current pickup corrections without changing dispatch", "Introduce confirmed Mappls Pin pickup at a small set of complex venues" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/ride-hailing-request-response" } ``` ## implementation-recipe · Application flow: A pickup flow that survives the real world - Identity: `implementation-recipe:ride-hailing-composed-experience` - Canonical: https://developer.mappls.com/recipes/ride-hailing-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "ride-hailing-composed-experience", "title": "Application flow: A pickup flow that survives the real world", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Mobility", "scenario": "At a busy railway station, a rider searches for the station name but the legal vehicle pickup point is 420 metres away. The marketplace must suggest a safe entrance, match a driver by road ETA rather than straight-line distance, guide both parties, and preserve a reviewable record if either disputes arrival.", "outcome": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points.", "audience": [ "Rider", "Driver", "Marketplace dispatcher", "Safety operator" ], "metrics": [ "Pickup ETA", "Cancellation rate", "Driver idle distance", "Pickup support contacts" ], "useCase": { "slug": "ride-hailing", "title": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, "products": [ { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" } ], "workflow": [ { "id": "stage-1", "title": "Bias search to the rider viewport", "owner": "Trip marketplace", "implementation": "Owns request, fare, rider/driver identities, eligibility, assignment, cancellation, safety state, and settlement.", "dataContract": "Ride request ↔ accepted pickup/drop Mappls Pins and selection revisions", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search resolves the building centre", "recovery": "Present signed pickup zones/entrances as candidates and require explicit rider confirmation before matching." } }, { "id": "stage-2", "title": "Confirm a precise pickup pin and landmark", "owner": "Pickup intent", "implementation": "Autosuggest and map confirmation resolve human text and viewport context to a precise Mappls Pin with entrance/landmark explanation.", "dataContract": "Driver candidate ↔ capability, availability, position freshness, matrix ETA", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver location is stale", "recovery": "Exclude it from ETA ranking, show marketplace capacity honestly, and request fresh evidence rather than extrapolating indefinitely." } }, { "id": "stage-3", "title": "Match with network-aware ETA", "owner": "ETA matching", "implementation": "A bounded matrix ranks eligible fresh driver positions; marketplace policy adds workload, vehicle, safety, and deterministic tie-breaks.", "dataContract": "Assignment ↔ aggregate version, chosen explanation, provider route revision", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Rider and driver disagree on arrival", "recovery": "Retain both event streams, accuracy, call/support actions, and apply a versioned human-review policy." } }, { "id": "stage-4", "title": "Track approach and reroute", "owner": "Approach journey", "implementation": "Route revisions and event-time vehicle observations derive progress, rerouting, pickup-zone entry, and freshness.", "dataContract": "Arrival evidence ↔ event/receipt time, accuracy, zone policy, rider/driver acknowledgement", "contract": { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search resolves the building centre", "recovery": "Present signed pickup zones/entrances as candidates and require explicit rider confirmation before matching." } } ], "contracts": [ { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" } ], "contractCoverage": [ { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" } ], "capstone": { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "difficulty": "Advanced", "declaredTests": 21, "href": "/samples/a2a-solution-studio", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-rest-key-still-image-still-map-image-api", "primaryOperation": "GET /{REST_KEY}/still_image", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/ride-hailing-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Instrument current pickup corrections without changing dispatch", "Introduce confirmed Mappls Pin pickup at a small set of complex venues", "Shadow network-ETA ranking and measure pickup/cancellation outcomes", "Enable approach progress and safety operations for one city" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/ride-hailing-composed-experience" } ``` ## implementation-recipe · Operating journey: A pickup flow that survives the real world - Identity: `implementation-recipe:ride-hailing-durable-operation` - Canonical: https://developer.mappls.com/recipes/ride-hailing-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "ride-hailing-durable-operation", "title": "Operating journey: A pickup flow that survives the real world", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Mobility", "scenario": "At a busy railway station, a rider searches for the station name but the legal vehicle pickup point is 420 metres away. The marketplace must suggest a safe entrance, match a driver by road ETA rather than straight-line distance, guide both parties, and preserve a reviewable record if either disputes arrival.", "outcome": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points.", "audience": [ "Rider", "Driver", "Marketplace dispatcher", "Safety operator", "Customer support" ], "metrics": [ "Pickup ETA", "Cancellation rate", "Driver idle distance", "Pickup support contacts" ], "useCase": { "slug": "ride-hailing", "title": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, "products": [ { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" } ], "workflow": [ { "id": "stage-1", "title": "Bias search to the rider viewport", "owner": "Trip marketplace", "implementation": "Owns request, fare, rider/driver identities, eligibility, assignment, cancellation, safety state, and settlement.", "dataContract": "Ride request ↔ accepted pickup/drop Mappls Pins and selection revisions", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search resolves the building centre", "recovery": "Present signed pickup zones/entrances as candidates and require explicit rider confirmation before matching." } }, { "id": "stage-2", "title": "Confirm a precise pickup pin and landmark", "owner": "Pickup intent", "implementation": "Autosuggest and map confirmation resolve human text and viewport context to a precise Mappls Pin with entrance/landmark explanation.", "dataContract": "Driver candidate ↔ capability, availability, position freshness, matrix ETA", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver location is stale", "recovery": "Exclude it from ETA ranking, show marketplace capacity honestly, and request fresh evidence rather than extrapolating indefinitely." } }, { "id": "stage-3", "title": "Match with network-aware ETA", "owner": "ETA matching", "implementation": "A bounded matrix ranks eligible fresh driver positions; marketplace policy adds workload, vehicle, safety, and deterministic tie-breaks.", "dataContract": "Assignment ↔ aggregate version, chosen explanation, provider route revision", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Rider and driver disagree on arrival", "recovery": "Retain both event streams, accuracy, call/support actions, and apply a versioned human-review policy." } }, { "id": "stage-4", "title": "Track approach and reroute", "owner": "Approach journey", "implementation": "Route revisions and event-time vehicle observations derive progress, rerouting, pickup-zone entry, and freshness.", "dataContract": "Arrival evidence ↔ event/receipt time, accuracy, zone policy, rider/driver acknowledgement", "contract": { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search resolves the building centre", "recovery": "Present signed pickup zones/entrances as candidates and require explicit rider confirmation before matching." } }, { "id": "stage-5", "title": "Detect arrival and close the trip", "owner": "Shared rendezvous experience", "implementation": "Rider and driver receive the same stable pickup identity with role-appropriate directions and a support-visible discrepancy trail.", "dataContract": "Ride request ↔ accepted pickup/drop Mappls Pins and selection revisions", "contract": { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Driver location is stale", "recovery": "Exclude it from ETA ranking, show marketplace capacity honestly, and request fresh evidence rather than extrapolating indefinitely." } } ], "contracts": [ { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "routes-navigation", "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" } ], "contractCoverage": [ { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" } ], "capstone": { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "difficulty": "Advanced", "declaredTests": 21, "href": "/samples/a2a-solution-studio", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-rest-key-still-image-still-map-image-api", "primaryOperation": "GET /{REST_KEY}/still_image", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/ride-hailing-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Instrument current pickup corrections without changing dispatch", "Introduce confirmed Mappls Pin pickup at a small set of complex venues", "Shadow network-ETA ranking and measure pickup/cancellation outcomes", "Enable approach progress and safety operations for one city", "Expand only after bias, privacy, driver-experience, and incident reviews" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/ride-hailing-durable-operation" } ``` ## implementation-recipe · Contract slice: Dispatch the right technician, with the right proof - Identity: `implementation-recipe:field-service-request-response` - Canonical: https://developer.mappls.com/recipes/field-service-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "field-service-request-response", "title": "Contract slice: Dispatch the right technician, with the right proof", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Utilities", "scenario": "A utility receives a no-power complaint for a commercial unit. Dispatch must resolve the service point, choose a technician with the correct certification and inventory, survive an offline basement visit, collect readings and imagery, route weak proof to review, and close the job only after the provider and customer records agree.", "outcome": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off.", "audience": [ "Service requester", "Dispatcher" ], "metrics": [ "First-time-fix rate", "Jobs per shift", "SLA compliance", "Repeat visit rate" ], "useCase": { "slug": "field-service", "title": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, "products": [ { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Geocode and classify the service location", "owner": "Work-order system", "implementation": "Owns customer/service asset, SLA, required skills, inventory, commercial outcome, and the authoritative terminal status.", "dataContract": "Work order ↔ service asset/location ID, SLA, skill and inventory requirements", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician accepts while another assignment races", "recovery": "Use optimistic aggregate versions and one active assignment invariant; surface conflict instead of last-write-wins." } }, { "id": "stage-2", "title": "Assign by skills, shift, inventory, and ETA", "owner": "Spatial service context", "implementation": "Search, asset layers, and mGIS context bind the request to a stable service location, access notes, network assets, and hazards.", "dataContract": "Assignment ↔ technician eligibility snapshot, ETA evidence, policy version", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline commands replay after reassignment", "recovery": "Validate actor, task version, and transition preconditions for every queued command; retain rejected evidence." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" } ], "contractCoverage": [ { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/field-service-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Model task states and audit without provider mutation", "Connect one Workmate sandbox team through outbox and signed reconciliation" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/field-service-request-response" } ``` ## implementation-recipe · Application flow: Dispatch the right technician, with the right proof - Identity: `implementation-recipe:field-service-composed-experience` - Canonical: https://developer.mappls.com/recipes/field-service-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "field-service-composed-experience", "title": "Application flow: Dispatch the right technician, with the right proof", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Utilities", "scenario": "A utility receives a no-power complaint for a commercial unit. Dispatch must resolve the service point, choose a technician with the correct certification and inventory, survive an offline basement visit, collect readings and imagery, route weak proof to review, and close the job only after the provider and customer records agree.", "outcome": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off.", "audience": [ "Service requester", "Dispatcher", "Technician", "Proof reviewer" ], "metrics": [ "First-time-fix rate", "Jobs per shift", "SLA compliance", "Repeat visit rate" ], "useCase": { "slug": "field-service", "title": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, "products": [ { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Geocode and classify the service location", "owner": "Work-order system", "implementation": "Owns customer/service asset, SLA, required skills, inventory, commercial outcome, and the authoritative terminal status.", "dataContract": "Work order ↔ service asset/location ID, SLA, skill and inventory requirements", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician accepts while another assignment races", "recovery": "Use optimistic aggregate versions and one active assignment invariant; surface conflict instead of last-write-wins." } }, { "id": "stage-2", "title": "Assign by skills, shift, inventory, and ETA", "owner": "Spatial service context", "implementation": "Search, asset layers, and mGIS context bind the request to a stable service location, access notes, network assets, and hazards.", "dataContract": "Assignment ↔ technician eligibility snapshot, ETA evidence, policy version", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline commands replay after reassignment", "recovery": "Validate actor, task version, and transition preconditions for every queued command; retain rejected evidence." } }, { "id": "stage-3", "title": "Guide the technician", "owner": "Workmate lifecycle", "implementation": "Provider task identity mirrors explicit create, assign, accept, travel, arrive, prove, review/rework, and close transitions through an outbox/callback boundary.", "dataContract": "Offline command ↔ stable idempotency key, expected aggregate version, device time", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Proof is incomplete", "recovery": "Move to named review/rework with reason and a new submission identity; never overwrite the rejected attempt." } }, { "id": "stage-4", "title": "Collect checklist, image, and signature proof", "owner": "Technician experience", "implementation": "Mobile guidance, offline command queue, checklists, evidence capture, and conflict UI operate under scoped task and consent policy.", "dataContract": "Proof ↔ immutable submission ID/hash, consent, accuracy, checklist, reviewer decision", "contract": { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician accepts while another assignment races", "recovery": "Use optimistic aggregate versions and one active assignment invariant; surface conflict instead of last-write-wins." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "workmate-get-tasklists-to-get-the-task-list-details", "method": "GET", "path": "/taskLists", "summary": "To get the task list details.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" } ], "contractCoverage": [ { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/field-service-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Model task states and audit without provider mutation", "Connect one Workmate sandbox team through outbox and signed reconciliation", "Pilot offline-safe execution and proof review for one job type", "Add skill/ETA-assisted assignment in recommendation mode" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/field-service-composed-experience" } ``` ## implementation-recipe · Operating journey: Dispatch the right technician, with the right proof - Identity: `implementation-recipe:field-service-durable-operation` - Canonical: https://developer.mappls.com/recipes/field-service-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "field-service-durable-operation", "title": "Operating journey: Dispatch the right technician, with the right proof", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Utilities", "scenario": "A utility receives a no-power complaint for a commercial unit. Dispatch must resolve the service point, choose a technician with the correct certification and inventory, survive an offline basement visit, collect readings and imagery, route weak proof to review, and close the job only after the provider and customer records agree.", "outcome": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off.", "audience": [ "Service requester", "Dispatcher", "Technician", "Proof reviewer", "Operations manager" ], "metrics": [ "First-time-fix rate", "Jobs per shift", "SLA compliance", "Repeat visit rate" ], "useCase": { "slug": "field-service", "title": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, "products": [ { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Geocode and classify the service location", "owner": "Work-order system", "implementation": "Owns customer/service asset, SLA, required skills, inventory, commercial outcome, and the authoritative terminal status.", "dataContract": "Work order ↔ service asset/location ID, SLA, skill and inventory requirements", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician accepts while another assignment races", "recovery": "Use optimistic aggregate versions and one active assignment invariant; surface conflict instead of last-write-wins." } }, { "id": "stage-2", "title": "Assign by skills, shift, inventory, and ETA", "owner": "Spatial service context", "implementation": "Search, asset layers, and mGIS context bind the request to a stable service location, access notes, network assets, and hazards.", "dataContract": "Assignment ↔ technician eligibility snapshot, ETA evidence, policy version", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline commands replay after reassignment", "recovery": "Validate actor, task version, and transition preconditions for every queued command; retain rejected evidence." } }, { "id": "stage-3", "title": "Guide the technician", "owner": "Workmate lifecycle", "implementation": "Provider task identity mirrors explicit create, assign, accept, travel, arrive, prove, review/rework, and close transitions through an outbox/callback boundary.", "dataContract": "Offline command ↔ stable idempotency key, expected aggregate version, device time", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Proof is incomplete", "recovery": "Move to named review/rework with reason and a new submission identity; never overwrite the rejected attempt." } }, { "id": "stage-4", "title": "Collect checklist, image, and signature proof", "owner": "Technician experience", "implementation": "Mobile guidance, offline command queue, checklists, evidence capture, and conflict UI operate under scoped task and consent policy.", "dataContract": "Proof ↔ immutable submission ID/hash, consent, accuracy, checklist, reviewer decision", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician accepts while another assignment races", "recovery": "Use optimistic aggregate versions and one active assignment invariant; surface conflict instead of last-write-wins." } }, { "id": "stage-5", "title": "Analyze repeat faults spatially", "owner": "Operations and analytics", "implementation": "Owned exception/review queues, audit, repeat-fault spatial analysis, and SLA metrics derive from immutable task/evidence history.", "dataContract": "Work order ↔ service asset/location ID, SLA, skill and inventory requirements", "contract": { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline commands replay after reassignment", "recovery": "Validate actor, task version, and transition preconditions for every queued command; retain rejected evidence." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "workmate-get-tasklists-to-get-the-task-list-details", "method": "GET", "path": "/taskLists", "summary": "To get the task list details.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "slug": "workmate-put-tasks-taskid-to-update-the-task-description-status", "method": "PUT", "path": "/tasks/{taskId}", "summary": "To update the task description & status.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "transition", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status" }, { "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/walking/{geopositions}", "summary": "Routing API with walking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingWalking.yml", "sourceFingerprint": "dd614ed88ba528548b43633bcdf89d01b25ae8d906e32c00ab61fa3fe5b76d63", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" } ], "contractCoverage": [ { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/field-service-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Model task states and audit without provider mutation", "Connect one Workmate sandbox team through outbox and signed reconciliation", "Pilot offline-safe execution and proof review for one job type", "Add skill/ETA-assisted assignment in recommendation mode", "Scale with policy versioning, workforce consent, retention, and support certification" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/field-service-durable-operation" } ``` ## implementation-recipe · Contract slice: Restore the grid from alarm to verified service - Identity: `implementation-recipe:energy-grid-resilience-request-response` - Canonical: https://developer.mappls.com/recipes/energy-grid-resilience-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "energy-grid-resilience-request-response", "title": "Contract slice: Restore the grid from alarm to verified service", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Energy", "scenario": "A monsoon storm trips feeders across two districts while flood exposure changes road access by the minute. Grid operations must correlate alarms against an exact network version, estimate affected service points, obtain an independently approved switching plan, dispatch capable crews, preserve every field observation, and avoid declaring restoration until telemetry and customer-impact evidence converge.", "outcome": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk.", "audience": [ "Grid control operator", "Outage coordinator" ], "metrics": [ "Customers restored per hour", "SAIDI contribution", "Crew travel time", "Repeat outage rate" ], "useCase": { "slug": "energy-grid-resilience", "title": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Version the network and hazard context", "owner": "Network and hazard authority", "implementation": "The utility system of record owns assets, connectivity, protection settings, switching authority and customer-service relationships; versioned mGIS layers add terrain, flood, access and vegetation context without replacing that authority.", "dataContract": "Grid asset ↔ topology/configuration version, owner and safety class", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms collapse onto the wrong feeder", "recovery": "Retain each source alarm, topology version and correlation reason; require operator correction and create a new incident revision rather than rewriting prior evidence." } }, { "id": "stage-2", "title": "Correlate alarms into bounded outage incidents", "owner": "Outage correlation", "implementation": "Append-only alarms and calls map to exact network versions and form bounded incidents under a versioned correlation rule with operator correction.", "dataContract": "Alarm ↔ source/event/content identity, event/receipt time and mapped asset", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A road route crosses a newly flooded segment", "recovery": "Append the hazard revision, invalidate the route identity, keep the switching plan separate, and require dispatch to approve a safe replacement." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/energy-grid-resilience-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Reconcile one feeder model and its ownership", "Replay historical storms through correlation in shadow mode" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/energy-grid-resilience-request-response" } ``` ## implementation-recipe · Application flow: Restore the grid from alarm to verified service - Identity: `implementation-recipe:energy-grid-resilience-composed-experience` - Canonical: https://developer.mappls.com/recipes/energy-grid-resilience-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "energy-grid-resilience-composed-experience", "title": "Application flow: Restore the grid from alarm to verified service", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Energy", "scenario": "A monsoon storm trips feeders across two districts while flood exposure changes road access by the minute. Grid operations must correlate alarms against an exact network version, estimate affected service points, obtain an independently approved switching plan, dispatch capable crews, preserve every field observation, and avoid declaring restoration until telemetry and customer-impact evidence converge.", "outcome": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk.", "audience": [ "Grid control operator", "Outage coordinator", "Switching authority", "Field crew" ], "metrics": [ "Customers restored per hour", "SAIDI contribution", "Crew travel time", "Repeat outage rate" ], "useCase": { "slug": "energy-grid-resilience", "title": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Version the network and hazard context", "owner": "Network and hazard authority", "implementation": "The utility system of record owns assets, connectivity, protection settings, switching authority and customer-service relationships; versioned mGIS layers add terrain, flood, access and vegetation context without replacing that authority.", "dataContract": "Grid asset ↔ topology/configuration version, owner and safety class", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms collapse onto the wrong feeder", "recovery": "Retain each source alarm, topology version and correlation reason; require operator correction and create a new incident revision rather than rewriting prior evidence." } }, { "id": "stage-2", "title": "Correlate alarms into bounded outage incidents", "owner": "Outage correlation", "implementation": "Append-only alarms and calls map to exact network versions and form bounded incidents under a versioned correlation rule with operator correction.", "dataContract": "Alarm ↔ source/event/content identity, event/receipt time and mapped asset", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A road route crosses a newly flooded segment", "recovery": "Append the hazard revision, invalidate the route identity, keep the switching plan separate, and require dispatch to approve a safe replacement." } }, { "id": "stage-3", "title": "Approve a switching and crew plan", "owner": "Switching and dispatch", "implementation": "An application-owned plan separates electrical safety approval from skill-, equipment- and ETA-aware Workmate assignments; no map or route result authorizes switching.", "dataContract": "Switching plan ↔ exact assets, sequence, approver, version and expiry", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Crew completion arrives before telemetry recovery", "recovery": "Keep the task evidence complete but the outage in reconciliation; query authoritative device and customer-impact sources before closure." } }, { "id": "stage-4", "title": "Guide crews and capture field evidence", "owner": "Field execution", "implementation": "Offline-safe tasks, route evidence, asset identity, observations and proof submissions preserve stable command IDs, expected versions and event/receipt time.", "dataContract": "Crew task ↔ eligibility snapshot, route evidence, provider identity and proof", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms collapse onto the wrong feeder", "recovery": "Retain each source alarm, topology version and correlation reason; require operator correction and create a new incident revision rather than rewriting prior evidence." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "method": "GET", "path": "/configurations/categories", "summary": "To get the list of client category in an account", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/energy-grid-resilience-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Reconcile one feeder model and its ownership", "Replay historical storms through correlation in shadow mode", "Pilot approved switching plus offline crew evidence", "Require multi-source restoration reconciliation in one district" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/energy-grid-resilience-composed-experience" } ``` ## implementation-recipe · Operating journey: Restore the grid from alarm to verified service - Identity: `implementation-recipe:energy-grid-resilience-durable-operation` - Canonical: https://developer.mappls.com/recipes/energy-grid-resilience-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "energy-grid-resilience-durable-operation", "title": "Operating journey: Restore the grid from alarm to verified service", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Energy", "scenario": "A monsoon storm trips feeders across two districts while flood exposure changes road access by the minute. Grid operations must correlate alarms against an exact network version, estimate affected service points, obtain an independently approved switching plan, dispatch capable crews, preserve every field observation, and avoid declaring restoration until telemetry and customer-impact evidence converge.", "outcome": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk.", "audience": [ "Grid control operator", "Outage coordinator", "Switching authority", "Field crew", "Customer-impact lead" ], "metrics": [ "Customers restored per hour", "SAIDI contribution", "Crew travel time", "Repeat outage rate" ], "useCase": { "slug": "energy-grid-resilience", "title": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Version the network and hazard context", "owner": "Network and hazard authority", "implementation": "The utility system of record owns assets, connectivity, protection settings, switching authority and customer-service relationships; versioned mGIS layers add terrain, flood, access and vegetation context without replacing that authority.", "dataContract": "Grid asset ↔ topology/configuration version, owner and safety class", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms collapse onto the wrong feeder", "recovery": "Retain each source alarm, topology version and correlation reason; require operator correction and create a new incident revision rather than rewriting prior evidence." } }, { "id": "stage-2", "title": "Correlate alarms into bounded outage incidents", "owner": "Outage correlation", "implementation": "Append-only alarms and calls map to exact network versions and form bounded incidents under a versioned correlation rule with operator correction.", "dataContract": "Alarm ↔ source/event/content identity, event/receipt time and mapped asset", "contract": { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A road route crosses a newly flooded segment", "recovery": "Append the hazard revision, invalidate the route identity, keep the switching plan separate, and require dispatch to approve a safe replacement." } }, { "id": "stage-3", "title": "Approve a switching and crew plan", "owner": "Switching and dispatch", "implementation": "An application-owned plan separates electrical safety approval from skill-, equipment- and ETA-aware Workmate assignments; no map or route result authorizes switching.", "dataContract": "Switching plan ↔ exact assets, sequence, approver, version and expiry", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Crew completion arrives before telemetry recovery", "recovery": "Keep the task evidence complete but the outage in reconciliation; query authoritative device and customer-impact sources before closure." } }, { "id": "stage-4", "title": "Guide crews and capture field evidence", "owner": "Field execution", "implementation": "Offline-safe tasks, route evidence, asset identity, observations and proof submissions preserve stable command IDs, expected versions and event/receipt time.", "dataContract": "Crew task ↔ eligibility snapshot, route evidence, provider identity and proof", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms collapse onto the wrong feeder", "recovery": "Retain each source alarm, topology version and correlation reason; require operator correction and create a new incident revision rather than rewriting prior evidence." } }, { "id": "stage-5", "title": "Reconcile telemetry, customer impact, and restoration", "owner": "Restoration reconciliation", "implementation": "Closure requires authoritative device state, switching completion, crew evidence and customer-impact recovery; mismatches remain an owned exception.", "dataContract": "Restoration ↔ telemetry, customer-impact and operator reconciliation evidence", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A road route crosses a newly flooded segment", "recovery": "Append the hazard revision, invalidate the route identity, keep the switching plan separate, and require dispatch to approve a safe replacement." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "method": "GET", "path": "/configurations/categories", "summary": "To get the list of client category in an account", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarms", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "method": "GET", "path": "/{rest-key}/{resources}/{profile}/{geopositions}", "summary": "Distance Matrix API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/distanceMatrix.yml", "sourceFingerprint": "bc3f5585c2351e756400d1280beeb69393a98e5b607c26cde62248e2deb6743d", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "level": "Advanced", "duration": "90 min", "outcome": "A stateful live-delivery journey with recovery and replay.", "href": "/tutorials/delivery-eta" }, { "slug": "intouch-trip-lifecycle", "title": "Reconcile a complete InTouch trip lifecycle", "level": "Advanced", "duration": "2 hr", "outcome": "A restart-safe connected trip with replay, late evidence, and closure reconciliation.", "href": "/tutorials/intouch-trip-lifecycle" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/energy-grid-resilience-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Reconcile one feeder model and its ownership", "Replay historical storms through correlation in shadow mode", "Pilot approved switching plus offline crew evidence", "Require multi-source restoration reconciliation in one district", "Expand after electrical-safety, privacy, resilience, workforce and regulatory review" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/energy-grid-resilience-durable-operation" } ``` ## implementation-recipe · Contract slice: Choose the next store with evidence - Identity: `implementation-recipe:retail-expansion-request-response` - Canonical: https://developer.mappls.com/recipes/retail-expansion-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "retail-expansion-request-response", "title": "Contract slice: Choose the next store with evidence", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Retail", "scenario": "A retailer is comparing 60 candidate neighbourhoods for 12 stores. Analysts must combine travel-time catchments, competition, demographics, access and existing performance, explain every score, prevent data drift between committee meetings, and revoke a shared decision view after the acquisition window closes.", "outcome": "Faster site screening and investment decisions grounded in a reusable spatial model.", "audience": [ "Expansion analyst", "GIS data steward" ], "metrics": [ "Forecast accuracy", "Cannibalization risk", "Time to shortlist", "Revenue per catchment" ], "useCase": { "slug": "retail-expansion", "title": "Choose the next store with evidence", "href": "/use-cases/retail-expansion" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" } ], "workflow": [ { "id": "stage-1", "title": "Publish candidate sites and performance data", "owner": "Enterprise data products", "implementation": "Own approved store performance, candidate, demand, competition and financial datasets with source, license, observation date and steward.", "dataContract": "Dataset version ↔ source/license/date/schema/CRS/content hash", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Demographic feed changes mid-analysis", "recovery": "Publish a new immutable input version and rerun; retain both result revisions and prevent silent replacement." } }, { "id": "stage-2", "title": "Generate drive-time catchments", "owner": "mGIS version registry", "implementation": "Publishes immutable spatial dataset versions with content hash, schema, CRS, validation diagnostics and access policy.", "dataContract": "Catchment attempt ↔ route profile, threshold, input versions, engine version", "contract": { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Candidate geometry has the wrong CRS", "recovery": "Fail before processing with feature-level diagnostics and require a corrected dataset version." } } ], "contracts": [ { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "cordova-map", "title": "Ship a Mappls map in Cordova and Ionic", "level": "Intermediate", "duration": "50 min", "outcome": "A hybrid map screen with lifecycle-safe native bridge handling.", "href": "/tutorials/cordova-map" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" } ], "journeys": [], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-nearby-json-nearby-api", "primaryOperation": "GET /api/places/nearby/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/retail-expansion-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Inventory and classify source datasets and licenses", "Reproduce one historical store decision from immutable versions" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/retail-expansion-request-response" } ``` ## implementation-recipe · Application flow: Choose the next store with evidence - Identity: `implementation-recipe:retail-expansion-composed-experience` - Canonical: https://developer.mappls.com/recipes/retail-expansion-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "retail-expansion-composed-experience", "title": "Application flow: Choose the next store with evidence", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Retail", "scenario": "A retailer is comparing 60 candidate neighbourhoods for 12 stores. Analysts must combine travel-time catchments, competition, demographics, access and existing performance, explain every score, prevent data drift between committee meetings, and revoke a shared decision view after the acquisition window closes.", "outcome": "Faster site screening and investment decisions grounded in a reusable spatial model.", "audience": [ "Expansion analyst", "GIS data steward", "Real-estate manager", "Finance reviewer" ], "metrics": [ "Forecast accuracy", "Cannibalization risk", "Time to shortlist", "Revenue per catchment" ], "useCase": { "slug": "retail-expansion", "title": "Choose the next store with evidence", "href": "/use-cases/retail-expansion" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" } ], "workflow": [ { "id": "stage-1", "title": "Publish candidate sites and performance data", "owner": "Enterprise data products", "implementation": "Own approved store performance, candidate, demand, competition and financial datasets with source, license, observation date and steward.", "dataContract": "Dataset version ↔ source/license/date/schema/CRS/content hash", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Demographic feed changes mid-analysis", "recovery": "Publish a new immutable input version and rerun; retain both result revisions and prevent silent replacement." } }, { "id": "stage-2", "title": "Generate drive-time catchments", "owner": "mGIS version registry", "implementation": "Publishes immutable spatial dataset versions with content hash, schema, CRS, validation diagnostics and access policy.", "dataContract": "Catchment attempt ↔ route profile, threshold, input versions, engine version", "contract": { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Candidate geometry has the wrong CRS", "recovery": "Fail before processing with feature-level diagnostics and require a corrected dataset version." } }, { "id": "stage-3", "title": "Join demand and competition signals", "owner": "Analysis engine", "implementation": "Creates parameterized catchments, joins exact input versions, normalizes signals and writes immutable scoring attempts and lineage.", "dataContract": "Score attempt ↔ normalization, weights, exclusions, ties, output hash", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Executive link is forwarded", "recovery": "Enforce audience/expiry, log access, prohibit export where required, and revoke the share without deleting lineage." } }, { "id": "stage-4", "title": "Score and compare candidates", "owner": "Analyst decision lab", "implementation": "Compares candidates, sensitivity and exclusions without mutating source evidence; comments and selections name result revisions.", "dataContract": "Share ↔ result revision, audience, expiry, export/embed policy, revocation", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Demographic feed changes mid-analysis", "recovery": "Publish a new immutable input version and rerun; retain both result revisions and prevent silent replacement." } } ], "contracts": [ { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "cordova-map", "title": "Ship a Mappls map in Cordova and Ionic", "level": "Intermediate", "duration": "50 min", "outcome": "A hybrid map screen with lifecycle-safe native bridge handling.", "href": "/tutorials/cordova-map" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" }, { "slug": "flutter-map", "title": "Build a Flutter map and place picker", "level": "Intermediate", "duration": "45 min", "outcome": "A reusable cross-platform location field.", "href": "/tutorials/flutter-map" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-nearby-json-nearby-api", "primaryOperation": "GET /api/places/nearby/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/retail-expansion-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Inventory and classify source datasets and licenses", "Reproduce one historical store decision from immutable versions", "Run model beside the existing spreadsheet for one region", "Add governed collaboration and sensitivity review" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/retail-expansion-composed-experience" } ``` ## implementation-recipe · Operating journey: Choose the next store with evidence - Identity: `implementation-recipe:retail-expansion-durable-operation` - Canonical: https://developer.mappls.com/recipes/retail-expansion-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "retail-expansion-durable-operation", "title": "Operating journey: Choose the next store with evidence", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Retail", "scenario": "A retailer is comparing 60 candidate neighbourhoods for 12 stores. Analysts must combine travel-time catchments, competition, demographics, access and existing performance, explain every score, prevent data drift between committee meetings, and revoke a shared decision view after the acquisition window closes.", "outcome": "Faster site screening and investment decisions grounded in a reusable spatial model.", "audience": [ "Expansion analyst", "GIS data steward", "Real-estate manager", "Finance reviewer", "Executive approver" ], "metrics": [ "Forecast accuracy", "Cannibalization risk", "Time to shortlist", "Revenue per catchment" ], "useCase": { "slug": "retail-expansion", "title": "Choose the next store with evidence", "href": "/use-cases/retail-expansion" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" } ], "workflow": [ { "id": "stage-1", "title": "Publish candidate sites and performance data", "owner": "Enterprise data products", "implementation": "Own approved store performance, candidate, demand, competition and financial datasets with source, license, observation date and steward.", "dataContract": "Dataset version ↔ source/license/date/schema/CRS/content hash", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Demographic feed changes mid-analysis", "recovery": "Publish a new immutable input version and rerun; retain both result revisions and prevent silent replacement." } }, { "id": "stage-2", "title": "Generate drive-time catchments", "owner": "mGIS version registry", "implementation": "Publishes immutable spatial dataset versions with content hash, schema, CRS, validation diagnostics and access policy.", "dataContract": "Catchment attempt ↔ route profile, threshold, input versions, engine version", "contract": { "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "method": "POST", "path": "/api/places/along_route", "summary": "POI Along the Route API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/alongRoute.yml", "sourceFingerprint": "e4b96b425a6607716c1739b3d7d3e384c3dbab7b354267da45f82e73f00910c9", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Candidate geometry has the wrong CRS", "recovery": "Fail before processing with feature-level diagnostics and require a corrected dataset version." } }, { "id": "stage-3", "title": "Join demand and competition signals", "owner": "Analysis engine", "implementation": "Creates parameterized catchments, joins exact input versions, normalizes signals and writes immutable scoring attempts and lineage.", "dataContract": "Score attempt ↔ normalization, weights, exclusions, ties, output hash", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Executive link is forwarded", "recovery": "Enforce audience/expiry, log access, prohibit export where required, and revoke the share without deleting lineage." } }, { "id": "stage-4", "title": "Score and compare candidates", "owner": "Analyst decision lab", "implementation": "Compares candidates, sensitivity and exclusions without mutating source evidence; comments and selections name result revisions.", "dataContract": "Share ↔ result revision, audience, expiry, export/embed policy, revocation", "contract": { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Demographic feed changes mid-analysis", "recovery": "Publish a new immutable input version and rerun; retain both result revisions and prevent silent replacement." } }, { "id": "stage-5", "title": "Share an executive decision map", "owner": "Governed sharing", "implementation": "Audience, expiry, export/embed rules, executive narrative and revocation wrap one immutable result rather than an untraceable screenshot.", "dataContract": "Dataset version ↔ source/license/date/schema/CRS/content hash", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Candidate geometry has the wrong CRS", "recovery": "Fail before processing with feature-level diagnostics and require a corrected dataset version." } } ], "contracts": [ { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "method": "GET", "path": "/api/places/woodpecker", "summary": "Address Standardization API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/woodpecker.yml", "sourceFingerprint": "3f28b55a402736d962c9a4249a77738d2435dc61d2274164b43e440892aee908", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "method": "POST", "path": "/api/places/along_route", "summary": "POI Along the Route API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/alongRoute.yml", "sourceFingerprint": "e4b96b425a6607716c1739b3d7d3e384c3dbab7b354267da45f82e73f00910c9", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "cordova-map", "title": "Ship a Mappls map in Cordova and Ionic", "level": "Intermediate", "duration": "50 min", "outcome": "A hybrid map screen with lifecycle-safe native bridge handling.", "href": "/tutorials/cordova-map" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" }, { "slug": "flutter-map", "title": "Build a Flutter map and place picker", "level": "Intermediate", "duration": "45 min", "outcome": "A reusable cross-platform location field.", "href": "/tutorials/flutter-map" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" }, { "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "level": "Intermediate", "duration": "55 min", "outcome": "An accessible map layer whose visual state is reproducible from source data.", "href": "/tutorials/geojson-operations-layer" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" } ], "journeys": [ { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-nearby-json-nearby-api", "primaryOperation": "GET /api/places/nearby/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/retail-expansion-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Inventory and classify source datasets and licenses", "Reproduce one historical store decision from immutable versions", "Run model beside the existing spreadsheet for one region", "Add governed collaboration and sensitivity review", "Promote only after finance, data governance, fairness, and forecast back-testing" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/retail-expansion-durable-operation" } ``` ## implementation-recipe · Contract slice: Make address risk explainable - Identity: `implementation-recipe:banking-address-risk-request-response` - Canonical: https://developer.mappls.com/recipes/banking-address-risk-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "banking-address-risk-request-response", "title": "Contract slice: Make address risk explainable", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Financial services", "scenario": "A small-business applicant enters an informal address and consents to a device-location check. The bank must normalize the address, compare accuracy-bearing evidence, join serviceability/risk geography, auto-approve only strong cases, redact precise evidence on schedule, and still explain the decision years later.", "outcome": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses.", "audience": [ "Applicant", "Onboarding service" ], "metrics": [ "Straight-through processing", "False-positive review rate", "Verification turnaround", "Fraud loss" ], "useCase": { "slug": "banking-address-risk", "title": "Make address risk explainable", "href": "/use-cases/banking-address-risk" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Normalize the entered address", "owner": "Onboarding system", "implementation": "Owns application, declared address, consent, KYC identity, product eligibility, decision and regulatory retention.", "dataContract": "Declared address ↔ original text, normalized candidates, chosen Mappls Pin", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Device fix is weak or unavailable", "recovery": "Do not infer presence; continue with alternate evidence or manual review and record the reason." } }, { "id": "stage-2", "title": "Compare declared and captured locations", "owner": "Address normalization", "implementation": "Search/standardization returns candidates and a selected Mappls Pin with source provenance rather than a rewritten string presented as certainty.", "dataContract": "Device evidence ↔ consent/purpose, coordinate, accuracy, times, source, hash", "contract": { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Address and device evidence disagree", "recovery": "Retain both, calculate distance under a versioned policy, and prohibit automated override of a reviewer rejection." } } ], "contracts": [ { "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "method": "GET", "path": "/api/places/woodpecker", "summary": "Address Standardization API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/woodpecker.yml", "sourceFingerprint": "3f28b55a402736d962c9a4249a77738d2435dc61d2274164b43e440892aee908", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "reverse-geocode-check-in", "title": "Turn a device fix into a trustworthy check-in", "level": "Beginner", "duration": "30 min", "outcome": "A privacy-aware check-in that retains both raw evidence and human-readable context.", "href": "/tutorials/reverse-geocode-check-in" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-woodpecker-address-standardization-api", "primaryOperation": "GET /api/places/woodpecker", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/banking-address-risk-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Normalize addresses and measure candidate ambiguity", "Capture consent/evidence in shadow mode with no decision impact" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/banking-address-risk-request-response" } ``` ## implementation-recipe · Application flow: Make address risk explainable - Identity: `implementation-recipe:banking-address-risk-composed-experience` - Canonical: https://developer.mappls.com/recipes/banking-address-risk-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "banking-address-risk-composed-experience", "title": "Application flow: Make address risk explainable", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Financial services", "scenario": "A small-business applicant enters an informal address and consents to a device-location check. The bank must normalize the address, compare accuracy-bearing evidence, join serviceability/risk geography, auto-approve only strong cases, redact precise evidence on schedule, and still explain the decision years later.", "outcome": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses.", "audience": [ "Applicant", "Onboarding service", "Risk analyst", "Manual reviewer" ], "metrics": [ "Straight-through processing", "False-positive review rate", "Verification turnaround", "Fraud loss" ], "useCase": { "slug": "banking-address-risk", "title": "Make address risk explainable", "href": "/use-cases/banking-address-risk" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Normalize the entered address", "owner": "Onboarding system", "implementation": "Owns application, declared address, consent, KYC identity, product eligibility, decision and regulatory retention.", "dataContract": "Declared address ↔ original text, normalized candidates, chosen Mappls Pin", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Device fix is weak or unavailable", "recovery": "Do not infer presence; continue with alternate evidence or manual review and record the reason." } }, { "id": "stage-2", "title": "Compare declared and captured locations", "owner": "Address normalization", "implementation": "Search/standardization returns candidates and a selected Mappls Pin with source provenance rather than a rewritten string presented as certainty.", "dataContract": "Device evidence ↔ consent/purpose, coordinate, accuracy, times, source, hash", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Address and device evidence disagree", "recovery": "Retain both, calculate distance under a versioned policy, and prohibit automated override of a reviewer rejection." } }, { "id": "stage-3", "title": "Join serviceability and risk zones", "owner": "Evidence service", "implementation": "Captures consented device fix, accuracy, event/receipt time and content hash separately from reverse-geocoded label.", "dataContract": "Risk enrichment ↔ zone dataset versions and feature values", "contract": { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Precise evidence reaches retention limit", "recovery": "Redact payload while retaining hash, coarse result, consent/decision lineage and attributable deletion event." } }, { "id": "stage-4", "title": "Score confidence with reasons", "owner": "Risk policy engine", "implementation": "Joins versioned zones and computes explainable features under a named policy; weak/contradictory evidence enters manual review.", "dataContract": "Decision ↔ policy version, evidence IDs, reasons, reviewer and redaction state", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Device fix is weak or unavailable", "recovery": "Do not infer presence; continue with alternate evidence or manual review and record the reason." } } ], "contracts": [ { "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "method": "GET", "path": "/api/places/woodpecker", "summary": "Address Standardization API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/woodpecker.yml", "sourceFingerprint": "3f28b55a402736d962c9a4249a77738d2435dc61d2274164b43e440892aee908", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "method": "POST", "path": "/api/places/along_route", "summary": "POI Along the Route API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/alongRoute.yml", "sourceFingerprint": "e4b96b425a6607716c1739b3d7d3e384c3dbab7b354267da45f82e73f00910c9", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "reverse-geocode-check-in", "title": "Turn a device fix into a trustworthy check-in", "level": "Beginner", "duration": "30 min", "outcome": "A privacy-aware check-in that retains both raw evidence and human-readable context.", "href": "/tutorials/reverse-geocode-check-in" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [ { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-woodpecker-address-standardization-api", "primaryOperation": "GET /api/places/woodpecker", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/banking-address-risk-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Normalize addresses and measure candidate ambiguity", "Capture consent/evidence in shadow mode with no decision impact", "Back-test a versioned policy against reviewed cases", "Pilot reviewer tooling and redaction workflow" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/banking-address-risk-composed-experience" } ``` ## implementation-recipe · Operating journey: Make address risk explainable - Identity: `implementation-recipe:banking-address-risk-durable-operation` - Canonical: https://developer.mappls.com/recipes/banking-address-risk-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "banking-address-risk-durable-operation", "title": "Operating journey: Make address risk explainable", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Financial services", "scenario": "A small-business applicant enters an informal address and consents to a device-location check. The bank must normalize the address, compare accuracy-bearing evidence, join serviceability/risk geography, auto-approve only strong cases, redact precise evidence on schedule, and still explain the decision years later.", "outcome": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses.", "audience": [ "Applicant", "Onboarding service", "Risk analyst", "Manual reviewer", "Compliance auditor" ], "metrics": [ "Straight-through processing", "False-positive review rate", "Verification turnaround", "Fraud loss" ], "useCase": { "slug": "banking-address-risk", "title": "Make address risk explainable", "href": "/use-cases/banking-address-risk" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Normalize the entered address", "owner": "Onboarding system", "implementation": "Owns application, declared address, consent, KYC identity, product eligibility, decision and regulatory retention.", "dataContract": "Declared address ↔ original text, normalized candidates, chosen Mappls Pin", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Device fix is weak or unavailable", "recovery": "Do not infer presence; continue with alternate evidence or manual review and record the reason." } }, { "id": "stage-2", "title": "Compare declared and captured locations", "owner": "Address normalization", "implementation": "Search/standardization returns candidates and a selected Mappls Pin with source provenance rather than a rewritten string presented as certainty.", "dataContract": "Device evidence ↔ consent/purpose, coordinate, accuracy, times, source, hash", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Address and device evidence disagree", "recovery": "Retain both, calculate distance under a versioned policy, and prohibit automated override of a reviewer rejection." } }, { "id": "stage-3", "title": "Join serviceability and risk zones", "owner": "Evidence service", "implementation": "Captures consented device fix, accuracy, event/receipt time and content hash separately from reverse-geocoded label.", "dataContract": "Risk enrichment ↔ zone dataset versions and feature values", "contract": { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Precise evidence reaches retention limit", "recovery": "Redact payload while retaining hash, coarse result, consent/decision lineage and attributable deletion event." } }, { "id": "stage-4", "title": "Score confidence with reasons", "owner": "Risk policy engine", "implementation": "Joins versioned zones and computes explainable features under a named policy; weak/contradictory evidence enters manual review.", "dataContract": "Decision ↔ policy version, evidence IDs, reasons, reviewer and redaction state", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Device fix is weak or unavailable", "recovery": "Do not infer presence; continue with alternate evidence or manual review and record the reason." } }, { "id": "stage-5", "title": "Escalate only unresolved cases", "owner": "Audit and privacy controls", "implementation": "Preserve input/policy/decision lineage while access controls, purpose limits and redaction remove precise data when no longer required.", "dataContract": "Declared address ↔ original text, normalized candidates, chosen Mappls Pin", "contract": { "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "method": "GET", "path": "/api/places/woodpecker", "summary": "Address Standardization API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/woodpecker.yml", "sourceFingerprint": "3f28b55a402736d962c9a4249a77738d2435dc61d2274164b43e440892aee908", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Address and device evidence disagree", "recovery": "Retain both, calculate distance under a versioned policy, and prohibit automated override of a reviewer rejection." } } ], "contracts": [ { "slug": "core-location-get-api-places-woodpecker-address-standardization-api", "method": "GET", "path": "/api/places/woodpecker", "summary": "Address Standardization API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/woodpecker.yml", "sourceFingerprint": "3f28b55a402736d962c9a4249a77738d2435dc61d2274164b43e440892aee908", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "method": "GET", "path": "/{REST_KEY}/rev_geocode", "summary": "Reverse Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/revGeocode.yml", "sourceFingerprint": "fe7746feeb136f533afaf6048c5d0d69a8f193de3c71ade521c9aa6f412eb2b1", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api" }, { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "method": "POST", "path": "/api/places/along_route", "summary": "POI Along the Route API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/alongRoute.yml", "sourceFingerprint": "e4b96b425a6607716c1739b3d7d3e384c3dbab7b354267da45f82e73f00910c9", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "reverse-geocode-check-in", "title": "Turn a device fix into a trustworthy check-in", "level": "Beginner", "duration": "30 min", "outcome": "A privacy-aware check-in that retains both raw evidence and human-readable context.", "href": "/tutorials/reverse-geocode-check-in" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "address-autocomplete", "title": "Build address autocomplete that users trust", "level": "Beginner", "duration": "20 min", "outcome": "An accessible, resilient delivery-address field.", "href": "/tutorials/address-autocomplete" } ], "journeys": [ { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-woodpecker-address-standardization-api", "primaryOperation": "GET /api/places/woodpecker", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/banking-address-risk-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Normalize addresses and measure candidate ambiguity", "Capture consent/evidence in shadow mode with no decision impact", "Back-test a versioned policy against reviewed cases", "Pilot reviewer tooling and redaction workflow", "Enable bounded automation only after compliance, bias, security, and model-risk approval" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/banking-address-risk-durable-operation" } ``` ## implementation-recipe · Contract slice: Evidence-led claims from incident to settlement - Identity: `implementation-recipe:insurance-claims-request-response` - Canonical: https://developer.mappls.com/recipes/insurance-claims-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "insurance-claims-request-response", "title": "Contract slice: Evidence-led claims from incident to settlement", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Insurance", "scenario": "After a severe storm, a policyholder submits vehicle-damage images and location evidence. The insurer must guide capture, detect missing or contradictory context without overclaiming authenticity, run model-locked vision triage with human review, dispatch scarce assessors by eligibility and ETA, join hazard exposure, and retain explainable evidence through settlement and appeal.", "outcome": "Faster, more consistent claims decisions with tamper-aware spatial evidence.", "audience": [ "Policyholder", "Claims intake" ], "metrics": [ "Settlement time", "Assessor travel", "Evidence completeness", "Leakage rate" ], "useCase": { "slug": "insurance-claims", "title": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, "products": [ { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "MCP" ], "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "delivery": "direct", "href": "/docs/ai-location" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" } ], "workflow": [ { "id": "stage-1", "title": "Record consented incident location", "owner": "Claims system", "implementation": "Owns policy, claimant, incident declaration, coverage, reserves, decisions, settlement and appeal.", "dataContract": "Claim ↔ declared incident place and policy coverage snapshot", "contract": { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "method": "GET", "path": "/models/{api_model_key}", "summary": "Returns the details of provided model", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Media upload partially succeeds", "recovery": "Use per-object hashes and a submission manifest; keep the claim incomplete until all required evidence commits." } }, { "id": "stage-2", "title": "Capture guided photo evidence", "owner": "Consented capture and vision boundary", "implementation": "Collects guided media, device/location accuracy, timestamps, hashes, capture policy and disclosure; an entitled SkyDNN adapter locks model identity, validates bounded derived geometry and confidence, and never treats metadata or inference as proof by itself.", "dataContract": "Evidence submission ↔ immutable media hashes, consent, times, accuracy, device/source", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Vision result is uncertain or sensitive", "recovery": "Preserve model and input identities, route to an independent reviewer, and prohibit automatic settlement or fraud decisions." } } ], "contracts": [ { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "method": "GET", "path": "/models/{api_model_key}", "summary": "Returns the details of provided model", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "method": "GET", "path": "/models", "summary": "Returns the details of all the models", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" } ], "contractCoverage": [ { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "ai-location", "productName": "AI & Location", "normalizedOperations": 21, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "primaryOperation": "GET /models/{api_model_key}", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/insurance-claims-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Start with guided completeness checks only", "Add entitled fixture-first vision triage with model provenance and mandatory review bands" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/insurance-claims-request-response" } ``` ## implementation-recipe · Application flow: Evidence-led claims from incident to settlement - Identity: `implementation-recipe:insurance-claims-composed-experience` - Canonical: https://developer.mappls.com/recipes/insurance-claims-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "insurance-claims-composed-experience", "title": "Application flow: Evidence-led claims from incident to settlement", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Insurance", "scenario": "After a severe storm, a policyholder submits vehicle-damage images and location evidence. The insurer must guide capture, detect missing or contradictory context without overclaiming authenticity, run model-locked vision triage with human review, dispatch scarce assessors by eligibility and ETA, join hazard exposure, and retain explainable evidence through settlement and appeal.", "outcome": "Faster, more consistent claims decisions with tamper-aware spatial evidence.", "audience": [ "Policyholder", "Claims intake", "Assessor", "Fraud analyst" ], "metrics": [ "Settlement time", "Assessor travel", "Evidence completeness", "Leakage rate" ], "useCase": { "slug": "insurance-claims", "title": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, "products": [ { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "MCP" ], "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "delivery": "direct", "href": "/docs/ai-location" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" } ], "workflow": [ { "id": "stage-1", "title": "Record consented incident location", "owner": "Claims system", "implementation": "Owns policy, claimant, incident declaration, coverage, reserves, decisions, settlement and appeal.", "dataContract": "Claim ↔ declared incident place and policy coverage snapshot", "contract": { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "method": "GET", "path": "/models/{api_model_key}", "summary": "Returns the details of provided model", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Media upload partially succeeds", "recovery": "Use per-object hashes and a submission manifest; keep the claim incomplete until all required evidence commits." } }, { "id": "stage-2", "title": "Capture guided photo evidence", "owner": "Consented capture and vision boundary", "implementation": "Collects guided media, device/location accuracy, timestamps, hashes, capture policy and disclosure; an entitled SkyDNN adapter locks model identity, validates bounded derived geometry and confidence, and never treats metadata or inference as proof by itself.", "dataContract": "Evidence submission ↔ immutable media hashes, consent, times, accuracy, device/source", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Vision result is uncertain or sensitive", "recovery": "Preserve model and input identities, route to an independent reviewer, and prohibit automatic settlement or fraud decisions." } }, { "id": "stage-3", "title": "Run model-locked vision triage with human review bands", "owner": "Spatial enrichment", "implementation": "Normalizes incident place, joins versioned hazard/catastrophe layers and links every feature to its source and observation window.", "dataContract": "Vision attempt ↔ model fingerprint, asset hash, bounded detections, confidence, review policy", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Location metadata conflicts with declaration", "recovery": "Preserve both sources, lower automation confidence and route to review rather than silently choosing one." } }, { "id": "stage-4", "title": "Dispatch an assessor when needed", "owner": "Assessment operations", "implementation": "Routes incomplete, uncertain, sensitive, or high-risk claims to independent review and capable assessors, ranks eligible teams by network ETA and tracks field-task proof.", "dataContract": "Hazard feature ↔ dataset/version, geometry relation, observation date", "contract": { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Catastrophe data is revised", "recovery": "Publish a new dataset/version and derived claim revision without rewriting the evidence used in the original decision." } } ], "contracts": [ { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "method": "GET", "path": "/models/{api_model_key}", "summary": "Returns the details of provided model", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "method": "GET", "path": "/models", "summary": "Returns the details of all the models", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "method": "GET", "path": "/server/whoami", "summary": "Returns the current models in port", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" } ], "contractCoverage": [ { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "ai-location", "productName": "AI & Location", "normalizedOperations": 21, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "primaryOperation": "GET /models/{api_model_key}", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/insurance-claims-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Start with guided completeness checks only", "Add entitled fixture-first vision triage with model provenance and mandatory review bands", "Add spatial hazard enrichment with analyst-visible lineage", "Pilot assessor eligibility/ETA recommendations" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/insurance-claims-composed-experience" } ``` ## implementation-recipe · Operating journey: Evidence-led claims from incident to settlement - Identity: `implementation-recipe:insurance-claims-durable-operation` - Canonical: https://developer.mappls.com/recipes/insurance-claims-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "insurance-claims-durable-operation", "title": "Operating journey: Evidence-led claims from incident to settlement", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Insurance", "scenario": "After a severe storm, a policyholder submits vehicle-damage images and location evidence. The insurer must guide capture, detect missing or contradictory context without overclaiming authenticity, run model-locked vision triage with human review, dispatch scarce assessors by eligibility and ETA, join hazard exposure, and retain explainable evidence through settlement and appeal.", "outcome": "Faster, more consistent claims decisions with tamper-aware spatial evidence.", "audience": [ "Policyholder", "Claims intake", "Assessor", "Fraud analyst", "Catastrophe manager" ], "metrics": [ "Settlement time", "Assessor travel", "Evidence completeness", "Leakage rate" ], "useCase": { "slug": "insurance-claims", "title": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, "products": [ { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "ai-location", "name": "AI & Location", "summary": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "MCP" ], "capabilities": [ "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "delivery": "direct", "href": "/docs/ai-location" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" } ], "workflow": [ { "id": "stage-1", "title": "Record consented incident location", "owner": "Claims system", "implementation": "Owns policy, claimant, incident declaration, coverage, reserves, decisions, settlement and appeal.", "dataContract": "Claim ↔ declared incident place and policy coverage snapshot", "contract": { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "method": "GET", "path": "/models/{api_model_key}", "summary": "Returns the details of provided model", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Media upload partially succeeds", "recovery": "Use per-object hashes and a submission manifest; keep the claim incomplete until all required evidence commits." } }, { "id": "stage-2", "title": "Capture guided photo evidence", "owner": "Consented capture and vision boundary", "implementation": "Collects guided media, device/location accuracy, timestamps, hashes, capture policy and disclosure; an entitled SkyDNN adapter locks model identity, validates bounded derived geometry and confidence, and never treats metadata or inference as proof by itself.", "dataContract": "Evidence submission ↔ immutable media hashes, consent, times, accuracy, device/source", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Vision result is uncertain or sensitive", "recovery": "Preserve model and input identities, route to an independent reviewer, and prohibit automatic settlement or fraud decisions." } }, { "id": "stage-3", "title": "Run model-locked vision triage with human review bands", "owner": "Spatial enrichment", "implementation": "Normalizes incident place, joins versioned hazard/catastrophe layers and links every feature to its source and observation window.", "dataContract": "Vision attempt ↔ model fingerprint, asset hash, bounded detections, confidence, review policy", "contract": { "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "method": "GET", "path": "/models", "summary": "Returns the details of all the models", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Location metadata conflicts with declaration", "recovery": "Preserve both sources, lower automation confidence and route to review rather than silently choosing one." } }, { "id": "stage-4", "title": "Dispatch an assessor when needed", "owner": "Assessment operations", "implementation": "Routes incomplete, uncertain, sensitive, or high-risk claims to independent review and capable assessors, ranks eligible teams by network ETA and tracks field-task proof.", "dataContract": "Hazard feature ↔ dataset/version, geometry relation, observation date", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Catastrophe data is revised", "recovery": "Publish a new dataset/version and derived claim revision without rewriting the evidence used in the original decision." } }, { "id": "stage-5", "title": "Overlay hazard and policy context", "owner": "Decision evidence", "implementation": "Policy engine and reviewer actions name exact submissions, enrichments, model fingerprints, rule versions and reasons; later evidence creates a revision and retention policy redacts derived detections without erasing audit.", "dataContract": "Assessment decision ↔ evidence IDs, rule/model version, reviewer, settlement revision", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Media upload partially succeeds", "recovery": "Use per-object hashes and a submission manifest; keep the claim incomplete until all required evidence commits." } } ], "contracts": [ { "slug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "method": "GET", "path": "/models/{api_model_key}", "summary": "Returns the details of provided model", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "method": "GET", "path": "/models", "summary": "Returns the details of all the models", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "method": "GET", "path": "/server/whoami", "summary": "Returns the current models in port", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "observe", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "method": "POST", "path": "/predict", "summary": "Returns the prediction as response in form of JSON", "product": "AI & Vision", "productSlugs": [ "ai-location" ], "stateModel": "hybrid", "journeyRole": "command", "contractStatus": "current-source", "sourceFile": "aihub/docs/skydnn-aiapi-docs/docs/swagger/swagger-aimldl-auth-min-v2.yml", "sourceFingerprint": "e19a9fcee8a760b1e7d50bae49991bafda1928ae51958c4400be4e5010f7c779", "authMode": "bearer", "href": "/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" } ], "contractCoverage": [ { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "ai-location", "productName": "AI & Location", "normalizedOperations": 21, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "governed-spatial-agent-run", "title": "Governed spatial agent run", "summary": "Turn a natural-language spatial objective into an inspectable plan, obtain an exact least-privilege approval, execute allow-listed Mappls tools, and cite provider evidence without exposing credentials to the model.", "stateModel": "stateful", "aggregate": "agent run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-agent-run" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" }, { "slug": "vision-inference-review", "title": "Governed SkyDNN inference review", "summary": "Lock an entitled model to an immutable asset identity, call the documented synchronous prediction boundary, validate geometry and confidence, require independent review, and redact derived detections on schedule.", "stateModel": "stateful", "aggregate": "vision evidence case", "states": 8, "transitions": 8, "href": "/journeys/vision-inference-review" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "primaryOperation": "GET /models/{api_model_key}", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/insurance-claims-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Start with guided completeness checks only", "Add entitled fixture-first vision triage with model provenance and mandatory review bands", "Add spatial hazard enrichment with analyst-visible lineage", "Pilot assessor eligibility/ETA recommendations", "Introduce versioned triage rules with independent reviewer separation", "Scale after consent, fraud, model-risk, fairness, retention, catastrophe, and appeal audits" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/insurance-claims-durable-operation" } ``` ## implementation-recipe · Contract slice: Coordinate time-critical care without losing custody - Identity: `implementation-recipe:hospital-care-logistics-request-response` - Canonical: https://developer.mappls.com/recipes/hospital-care-logistics-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "hospital-care-logistics-request-response", "title": "Contract slice: Coordinate time-critical care without losing custody", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Healthcare", "scenario": "A district hospital needs to transfer a patient to a tertiary campus while a laboratory specimen travels separately under a strict stability window. The coordinator must resolve the correct clinical entrance, choose eligible transport, retain custody at every hand-off, detect route and temperature delay, reveal only the minimum operational location, and close each journey only after the receiving team accepts it.", "outcome": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody.", "audience": [ "Transfer coordinator", "Ambulance dispatcher" ], "metrics": [ "Door-to-door transfer time", "On-time specimen delivery", "Custody exceptions", "Privacy incidents" ], "useCase": { "slug": "hospital-care-logistics", "title": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Resolve the correct facility, campus, and entrance", "owner": "Clinical and laboratory systems", "implementation": "Authoritative systems own patient or specimen identity, clinical priority, consent, custody policy, stability window and receiving acceptance; the location workflow stores only opaque operational references.", "dataContract": "Transfer ↔ opaque clinical reference, priority, consent and accepted entrance", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search selects the public entrance instead of emergency receiving", "recovery": "Present approved campus entrances as explicit candidates, require coordinator confirmation, and retain the original query and selection revision." } }, { "id": "stage-2", "title": "Select an eligible vehicle and bounded route", "owner": "Facility and entrance resolution", "implementation": "Search and governed campus data resolve a stable Mappls Pin or enterprise entrance identity while preserving candidate, confirmer and revision evidence.", "dataContract": "Transport assignment ↔ eligibility snapshot, vehicle, route revision and expiry", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Location or condition evidence becomes stale", "recovery": "Show last verified time and source, alert the responsible coordinator, and stop projecting an invented ETA or safe-condition claim." } } ], "contracts": [ { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-geocode-geocode-api", "primaryOperation": "GET /api/places/geocode", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/hospital-care-logistics-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Govern facility and entrance identities without patient data", "Run fixture transfers with complete custody events" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/hospital-care-logistics-request-response" } ``` ## implementation-recipe · Application flow: Coordinate time-critical care without losing custody - Identity: `implementation-recipe:hospital-care-logistics-composed-experience` - Canonical: https://developer.mappls.com/recipes/hospital-care-logistics-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "hospital-care-logistics-composed-experience", "title": "Application flow: Coordinate time-critical care without losing custody", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Healthcare", "scenario": "A district hospital needs to transfer a patient to a tertiary campus while a laboratory specimen travels separately under a strict stability window. The coordinator must resolve the correct clinical entrance, choose eligible transport, retain custody at every hand-off, detect route and temperature delay, reveal only the minimum operational location, and close each journey only after the receiving team accepts it.", "outcome": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody.", "audience": [ "Transfer coordinator", "Ambulance dispatcher", "Driver or courier", "Receiving clinician" ], "metrics": [ "Door-to-door transfer time", "On-time specimen delivery", "Custody exceptions", "Privacy incidents" ], "useCase": { "slug": "hospital-care-logistics", "title": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Resolve the correct facility, campus, and entrance", "owner": "Clinical and laboratory systems", "implementation": "Authoritative systems own patient or specimen identity, clinical priority, consent, custody policy, stability window and receiving acceptance; the location workflow stores only opaque operational references.", "dataContract": "Transfer ↔ opaque clinical reference, priority, consent and accepted entrance", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search selects the public entrance instead of emergency receiving", "recovery": "Present approved campus entrances as explicit candidates, require coordinator confirmation, and retain the original query and selection revision." } }, { "id": "stage-2", "title": "Select an eligible vehicle and bounded route", "owner": "Facility and entrance resolution", "implementation": "Search and governed campus data resolve a stable Mappls Pin or enterprise entrance identity while preserving candidate, confirmer and revision evidence.", "dataContract": "Transport assignment ↔ eligibility snapshot, vehicle, route revision and expiry", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Location or condition evidence becomes stale", "recovery": "Show last verified time and source, alert the responsible coordinator, and stop projecting an invented ETA or safe-condition claim." } }, { "id": "stage-3", "title": "Track custody and freshness through every hand-off", "owner": "Eligibility and dispatch", "implementation": "Application policy filters vehicle, equipment, staff, service area and availability before network ETA ranks eligible options.", "dataContract": "Custody event ↔ item reference, from/to role, event/receipt time and acknowledgement", "contract": { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "The receiver cannot match the custody identity", "recovery": "Keep the journey at arrived-but-unaccepted, preserve both observations and escalate through a human reconciliation queue without exposing clinical data." } }, { "id": "stage-4", "title": "Escalate delay or temperature exceptions", "owner": "Privacy-minimized journey", "implementation": "Event-time vehicle and custody observations derive progress and exceptions; role projections withhold clinical content and unnecessary precise history.", "dataContract": "Condition exception ↔ sensor/source identity, threshold policy and reviewer outcome", "contract": { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search selects the public entrance instead of emergency receiving", "recovery": "Present approved campus entrances as explicit candidates, require coordinator confirmation, and retain the original query and selection revision." } } ], "contracts": [ { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-geocode-geocode-api", "primaryOperation": "GET /api/places/geocode", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/hospital-care-logistics-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Govern facility and entrance identities without patient data", "Run fixture transfers with complete custody events", "Pilot one non-emergency specimen lane with bounded telemetry", "Add patient transfer only after clinical and privacy approval" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/hospital-care-logistics-composed-experience" } ``` ## implementation-recipe · Operating journey: Coordinate time-critical care without losing custody - Identity: `implementation-recipe:hospital-care-logistics-durable-operation` - Canonical: https://developer.mappls.com/recipes/hospital-care-logistics-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "hospital-care-logistics-durable-operation", "title": "Operating journey: Coordinate time-critical care without losing custody", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Healthcare", "scenario": "A district hospital needs to transfer a patient to a tertiary campus while a laboratory specimen travels separately under a strict stability window. The coordinator must resolve the correct clinical entrance, choose eligible transport, retain custody at every hand-off, detect route and temperature delay, reveal only the minimum operational location, and close each journey only after the receiving team accepts it.", "outcome": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody.", "audience": [ "Transfer coordinator", "Ambulance dispatcher", "Driver or courier", "Receiving clinician", "Privacy and quality reviewer" ], "metrics": [ "Door-to-door transfer time", "On-time specimen delivery", "Custody exceptions", "Privacy incidents" ], "useCase": { "slug": "hospital-care-logistics", "title": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Resolve the correct facility, campus, and entrance", "owner": "Clinical and laboratory systems", "implementation": "Authoritative systems own patient or specimen identity, clinical priority, consent, custody policy, stability window and receiving acceptance; the location workflow stores only opaque operational references.", "dataContract": "Transfer ↔ opaque clinical reference, priority, consent and accepted entrance", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search selects the public entrance instead of emergency receiving", "recovery": "Present approved campus entrances as explicit candidates, require coordinator confirmation, and retain the original query and selection revision." } }, { "id": "stage-2", "title": "Select an eligible vehicle and bounded route", "owner": "Facility and entrance resolution", "implementation": "Search and governed campus data resolve a stable Mappls Pin or enterprise entrance identity while preserving candidate, confirmer and revision evidence.", "dataContract": "Transport assignment ↔ eligibility snapshot, vehicle, route revision and expiry", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Location or condition evidence becomes stale", "recovery": "Show last verified time and source, alert the responsible coordinator, and stop projecting an invented ETA or safe-condition claim." } }, { "id": "stage-3", "title": "Track custody and freshness through every hand-off", "owner": "Eligibility and dispatch", "implementation": "Application policy filters vehicle, equipment, staff, service area and availability before network ETA ranks eligible options.", "dataContract": "Custody event ↔ item reference, from/to role, event/receipt time and acknowledgement", "contract": { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "The receiver cannot match the custody identity", "recovery": "Keep the journey at arrived-but-unaccepted, preserve both observations and escalate through a human reconciliation queue without exposing clinical data." } }, { "id": "stage-4", "title": "Escalate delay or temperature exceptions", "owner": "Privacy-minimized journey", "implementation": "Event-time vehicle and custody observations derive progress and exceptions; role projections withhold clinical content and unnecessary precise history.", "dataContract": "Condition exception ↔ sensor/source identity, threshold policy and reviewer outcome", "contract": { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Search selects the public entrance instead of emergency receiving", "recovery": "Present approved campus entrances as explicit candidates, require coordinator confirmation, and retain the original query and selection revision." } }, { "id": "stage-5", "title": "Reconcile arrival, acceptance, and retained evidence", "owner": "Acceptance and quality review", "implementation": "Every hand-off is versioned and attributable; arrival is not completion until the authorized receiver accepts the matching custody identity.", "dataContract": "Completion ↔ arrival evidence, receiver acceptance and retained audit policy", "contract": { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Location or condition evidence becomes stale", "recovery": "Show last verified time and source, alert the responsible coordinator, and stop projecting an invented ETA or safe-condition claim." } } ], "contracts": [ { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "method": "GET", "path": "/{rest-key}/{resources}/{profile}/{geopositions}", "summary": "Distance Matrix API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/distanceMatrix.yml", "sourceFingerprint": "bc3f5585c2351e756400d1280beeb69393a98e5b607c26cde62248e2deb6743d", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarms", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-geocode-geocode-api", "primaryOperation": "GET /api/places/geocode", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/hospital-care-logistics-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Govern facility and entrance identities without patient data", "Run fixture transfers with complete custody events", "Pilot one non-emergency specimen lane with bounded telemetry", "Add patient transfer only after clinical and privacy approval", "Scale after accessibility, consent, retention, downtime, safety and quality drills" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/hospital-care-logistics-durable-operation" } ``` ## implementation-recipe · Contract slice: Route coordinated response under pressure - Identity: `implementation-recipe:emergency-response-request-response` - Canonical: https://developer.mappls.com/recipes/emergency-response-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "emergency-response-request-response", "title": "Contract slice: Route coordinated response under pressure", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Public safety", "scenario": "A caller reports a road collision near an informal landmark while multiple units are returning from other incidents. The control room must resolve location confidence, choose capable available responders using fresh positions and vehicle-aware ETA, update routes around hazards, prevent double dispatch, prove arrival, and replay the incident for review.", "outcome": "Reduced time to scene and safer decisions across dispatch, responders, and command.", "audience": [ "Caller", "Emergency call taker" ], "metrics": [ "Call-to-dispatch time", "Arrival time", "Unit utilization", "Coverage gaps" ], "useCase": { "slug": "emergency-response", "title": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Resolve location from address, pin, or device", "owner": "CAD incident record", "implementation": "Owns call, incident identity, priority, location revisions, assigned resources, hazards, resolution and review.", "dataContract": "Incident location ↔ revision, source, confidence, confirmer", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Caller description produces multiple locations", "recovery": "Show ranked candidates and confidence to the call taker; record confirmation and every revision." } }, { "id": "stage-2", "title": "Find eligible nearby responders", "owner": "Location resolution", "implementation": "Combines address, landmark, Mappls Pin and consented device evidence while retaining candidates, confidence and human confirmation.", "dataContract": "Unit eligibility ↔ capability, availability, jurisdiction, telemetry freshness", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Unit position is stale", "recovery": "Exclude from automated ranking or mark ETA unavailable; request fresh evidence and let an accountable dispatcher decide." } } ], "contracts": [ { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" } ], "journeys": [], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-search-json-autosuggest-api", "primaryOperation": "GET /api/places/search/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/emergency-response-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Replay historical incidents through location-resolution tooling", "Shadow capability/matrix recommendations beside dispatchers" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/emergency-response-request-response" } ``` ## implementation-recipe · Application flow: Route coordinated response under pressure - Identity: `implementation-recipe:emergency-response-composed-experience` - Canonical: https://developer.mappls.com/recipes/emergency-response-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "emergency-response-composed-experience", "title": "Application flow: Route coordinated response under pressure", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Public safety", "scenario": "A caller reports a road collision near an informal landmark while multiple units are returning from other incidents. The control room must resolve location confidence, choose capable available responders using fresh positions and vehicle-aware ETA, update routes around hazards, prevent double dispatch, prove arrival, and replay the incident for review.", "outcome": "Reduced time to scene and safer decisions across dispatch, responders, and command.", "audience": [ "Caller", "Emergency call taker", "Dispatcher", "Responder" ], "metrics": [ "Call-to-dispatch time", "Arrival time", "Unit utilization", "Coverage gaps" ], "useCase": { "slug": "emergency-response", "title": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Resolve location from address, pin, or device", "owner": "CAD incident record", "implementation": "Owns call, incident identity, priority, location revisions, assigned resources, hazards, resolution and review.", "dataContract": "Incident location ↔ revision, source, confidence, confirmer", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Caller description produces multiple locations", "recovery": "Show ranked candidates and confidence to the call taker; record confirmation and every revision." } }, { "id": "stage-2", "title": "Find eligible nearby responders", "owner": "Location resolution", "implementation": "Combines address, landmark, Mappls Pin and consented device evidence while retaining candidates, confidence and human confirmation.", "dataContract": "Unit eligibility ↔ capability, availability, jurisdiction, telemetry freshness", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Unit position is stale", "recovery": "Exclude from automated ranking or mark ETA unavailable; request fresh evidence and let an accountable dispatcher decide." } }, { "id": "stage-3", "title": "Route with vehicle constraints", "owner": "Resource and route service", "implementation": "Filters capability/availability/jurisdiction first, then uses matrix/route evidence with freshness and deterministic dispatch policy.", "dataContract": "Dispatch ↔ matrix evidence, route revision, expected aggregate versions", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Hazard changes after dispatch", "recovery": "Append a hazard revision, compute a new route identity, notify assigned units and retain both plans." } }, { "id": "stage-4", "title": "Track units and changing hazards", "owner": "Live coordination", "implementation": "Ingests event-time unit telemetry and hazard revisions, derives progress and arrival evidence, and blocks one unit from two active incidents.", "dataContract": "Arrival/resolution ↔ objective evidence, actor, times, open-hazard/exception checks", "contract": { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Caller description produces multiple locations", "recovery": "Show ranked candidates and confidence to the call taker; record confirmation and every revision." } } ], "contracts": [ { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-search-json-autosuggest-api", "primaryOperation": "GET /api/places/search/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/emergency-response-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Replay historical incidents through location-resolution tooling", "Shadow capability/matrix recommendations beside dispatchers", "Pilot one incident class with unit telemetry and double-dispatch protection", "Add hazard rerouting and objective arrival policy" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/emergency-response-composed-experience" } ``` ## implementation-recipe · Operating journey: Route coordinated response under pressure - Identity: `implementation-recipe:emergency-response-durable-operation` - Canonical: https://developer.mappls.com/recipes/emergency-response-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "emergency-response-durable-operation", "title": "Operating journey: Route coordinated response under pressure", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Public safety", "scenario": "A caller reports a road collision near an informal landmark while multiple units are returning from other incidents. The control room must resolve location confidence, choose capable available responders using fresh positions and vehicle-aware ETA, update routes around hazards, prevent double dispatch, prove arrival, and replay the incident for review.", "outcome": "Reduced time to scene and safer decisions across dispatch, responders, and command.", "audience": [ "Caller", "Emergency call taker", "Dispatcher", "Responder", "Incident commander" ], "metrics": [ "Call-to-dispatch time", "Arrival time", "Unit utilization", "Coverage gaps" ], "useCase": { "slug": "emergency-response", "title": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" } ], "workflow": [ { "id": "stage-1", "title": "Resolve location from address, pin, or device", "owner": "CAD incident record", "implementation": "Owns call, incident identity, priority, location revisions, assigned resources, hazards, resolution and review.", "dataContract": "Incident location ↔ revision, source, confidence, confirmer", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Caller description produces multiple locations", "recovery": "Show ranked candidates and confidence to the call taker; record confirmation and every revision." } }, { "id": "stage-2", "title": "Find eligible nearby responders", "owner": "Location resolution", "implementation": "Combines address, landmark, Mappls Pin and consented device evidence while retaining candidates, confidence and human confirmation.", "dataContract": "Unit eligibility ↔ capability, availability, jurisdiction, telemetry freshness", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Unit position is stale", "recovery": "Exclude from automated ranking or mark ETA unavailable; request fresh evidence and let an accountable dispatcher decide." } }, { "id": "stage-3", "title": "Route with vehicle constraints", "owner": "Resource and route service", "implementation": "Filters capability/availability/jurisdiction first, then uses matrix/route evidence with freshness and deterministic dispatch policy.", "dataContract": "Dispatch ↔ matrix evidence, route revision, expected aggregate versions", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Hazard changes after dispatch", "recovery": "Append a hazard revision, compute a new route identity, notify assigned units and retain both plans." } }, { "id": "stage-4", "title": "Track units and changing hazards", "owner": "Live coordination", "implementation": "Ingests event-time unit telemetry and hazard revisions, derives progress and arrival evidence, and blocks one unit from two active incidents.", "dataContract": "Arrival/resolution ↔ objective evidence, actor, times, open-hazard/exception checks", "contract": { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Caller description produces multiple locations", "recovery": "Show ranked candidates and confidence to the call taker; record confirmation and every revision." } }, { "id": "stage-5", "title": "Replay the incident for review", "owner": "Command and review", "implementation": "Role-specific views, immutable actions, communication references, late evidence and outcome metrics support command and after-action review.", "dataContract": "Incident location ↔ revision, source, confidence, confirmer", "contract": { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Unit position is stale", "recovery": "Exclude from automated ranking or mark ETA unavailable; request fresh evidence and let an accountable dispatcher decide." } } ], "contracts": [ { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "method": "GET", "path": "/devices/nearby", "summary": "Gets the list of all the nearby devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "method": "GET", "path": "/devices/drives", "summary": "Gets drive details of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/drive.json", "sourceFingerprint": "6cdf4c61bc811cde72adc7d658a90c01a1bb4a1f805c85a4d3cd763c2281f2c3", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "level": "Advanced", "duration": "90 min", "outcome": "A stateful live-delivery journey with recovery and replay.", "href": "/tutorials/delivery-eta" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" } ], "capstone": { "slug": "care-transfer-desk", "name": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "difficulty": "Advanced", "declaredTests": 17, "href": "/samples/care-transfer-desk", "downloadPath": "/downloads/care-transfer-desk.zip", "checksumPath": "/downloads/care-transfer-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-search-json-autosuggest-api", "primaryOperation": "GET /api/places/search/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/emergency-response-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Replay historical incidents through location-resolution tooling", "Shadow capability/matrix recommendations beside dispatchers", "Pilot one incident class with unit telemetry and double-dispatch protection", "Add hazard rerouting and objective arrival policy", "Expand only after safety case, resilience, accessibility, training, privacy and regulator review" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/emergency-response-durable-operation" } ``` ## implementation-recipe · Contract slice: A living operations map for the city - Identity: `implementation-recipe:smart-city-operations-request-response` - Canonical: https://developer.mappls.com/recipes/smart-city-operations-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "smart-city-operations-request-response", "title": "Contract slice: A living operations map for the city", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Government", "scenario": "A city receives reports of waterlogging, failed streetlights and waste overflow across different channels. It needs one governed map without collapsing department ownership, must deduplicate related reports, dispatch the correct crew, preserve citizen privacy, publish honest status, and analyze service equity using versioned ward and asset data.", "outcome": "One governed view from daily operations to infrastructure investment planning.", "audience": [ "Citizen", "Control-room operator" ], "metrics": [ "Resolution time", "Asset downtime", "Repeat incidents", "Ward-level service equity" ], "useCase": { "slug": "smart-city-operations", "title": "A living operations map for the city", "href": "/use-cases/smart-city-operations" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" } ], "workflow": [ { "id": "stage-1", "title": "Catalog authoritative layers", "owner": "Department systems of record", "implementation": "Retain authoritative assets, work orders, ownership and service outcomes; the map does not become an ungoverned replacement master.", "dataContract": "Layer ↔ steward, source, schema, CRS, sensitivity, version", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two departments claim the same incident", "recovery": "Keep one coordinating incident with explicit owning/participating work orders; never transfer authority by map edit alone." } }, { "id": "stage-2", "title": "Ingest live assets and citizen reports", "owner": "Spatial data catalogue", "implementation": "mGIS registers layers, schemas, CRS, stewards, update cadence, license/sensitivity and immutable versions.", "dataContract": "Report/alarm ↔ source identity, consent, event/receipt time, coarse/public projection", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Citizen report contains precise personal data", "recovery": "Restrict raw evidence, derive a coarse operational/public location and apply purpose-specific retention/redaction." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" } ], "journeys": [], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/smart-city-operations-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Catalogue high-value layers and authoritative owners", "Unify read-only incident views for one ward" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/smart-city-operations-request-response" } ``` ## implementation-recipe · Application flow: A living operations map for the city - Identity: `implementation-recipe:smart-city-operations-composed-experience` - Canonical: https://developer.mappls.com/recipes/smart-city-operations-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "smart-city-operations-composed-experience", "title": "Application flow: A living operations map for the city", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Government", "scenario": "A city receives reports of waterlogging, failed streetlights and waste overflow across different channels. It needs one governed map without collapsing department ownership, must deduplicate related reports, dispatch the correct crew, preserve citizen privacy, publish honest status, and analyze service equity using versioned ward and asset data.", "outcome": "One governed view from daily operations to infrastructure investment planning.", "audience": [ "Citizen", "Control-room operator", "Department dispatcher", "Field crew" ], "metrics": [ "Resolution time", "Asset downtime", "Repeat incidents", "Ward-level service equity" ], "useCase": { "slug": "smart-city-operations", "title": "A living operations map for the city", "href": "/use-cases/smart-city-operations" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" } ], "workflow": [ { "id": "stage-1", "title": "Catalog authoritative layers", "owner": "Department systems of record", "implementation": "Retain authoritative assets, work orders, ownership and service outcomes; the map does not become an ungoverned replacement master.", "dataContract": "Layer ↔ steward, source, schema, CRS, sensitivity, version", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two departments claim the same incident", "recovery": "Keep one coordinating incident with explicit owning/participating work orders; never transfer authority by map edit alone." } }, { "id": "stage-2", "title": "Ingest live assets and citizen reports", "owner": "Spatial data catalogue", "implementation": "mGIS registers layers, schemas, CRS, stewards, update cadence, license/sensitivity and immutable versions.", "dataContract": "Report/alarm ↔ source identity, consent, event/receipt time, coarse/public projection", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Citizen report contains precise personal data", "recovery": "Restrict raw evidence, derive a coarse operational/public location and apply purpose-specific retention/redaction." } }, { "id": "stage-3", "title": "Dispatch and monitor work", "owner": "Event correlation", "implementation": "Normalizes citizen reports and sensor alarms, preserves each source, and derives bounded incident clusters under a versioned rule.", "dataContract": "Derived incident ↔ member evidence IDs and correlation policy version", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Public status lags internal resolution", "recovery": "Version projections, display freshness, alert on reconciliation delay and correct with an attributable update." } }, { "id": "stage-4", "title": "Publish role-specific dashboards", "owner": "Work orchestration", "implementation": "Creates department-specific tasks, routes capable crews, tracks progress/proof and reconciles closure to the owning system.", "dataContract": "Work order ↔ owning department, asset, SLA, task/provider identity, closure proof", "contract": { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two departments claim the same incident", "recovery": "Keep one coordinating incident with explicit owning/participating work orders; never transfer authority by map edit alone." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "method": "GET", "path": "/devices/drives", "summary": "Gets drive details of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/drive.json", "sourceFingerprint": "6cdf4c61bc811cde72adc7d658a90c01a1bb4a1f805c85a4d3cd763c2281f2c3", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "fleet-geofences", "title": "Build fleet geofence operations", "level": "Advanced", "duration": "75 min", "outcome": "An operations-ready geofence monitor.", "href": "/tutorials/fleet-geofences" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/smart-city-operations-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Catalogue high-value layers and authoritative owners", "Unify read-only incident views for one ward", "Add one department's task lifecycle and reconciliation", "Introduce cross-channel correlation with human confirmation" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/smart-city-operations-composed-experience" } ``` ## implementation-recipe · Operating journey: A living operations map for the city - Identity: `implementation-recipe:smart-city-operations-durable-operation` - Canonical: https://developer.mappls.com/recipes/smart-city-operations-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "smart-city-operations-durable-operation", "title": "Operating journey: A living operations map for the city", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Government", "scenario": "A city receives reports of waterlogging, failed streetlights and waste overflow across different channels. It needs one governed map without collapsing department ownership, must deduplicate related reports, dispatch the correct crew, preserve citizen privacy, publish honest status, and analyze service equity using versioned ward and asset data.", "outcome": "One governed view from daily operations to infrastructure investment planning.", "audience": [ "Citizen", "Control-room operator", "Department dispatcher", "Field crew", "City data steward" ], "metrics": [ "Resolution time", "Asset downtime", "Repeat incidents", "Ward-level service equity" ], "useCase": { "slug": "smart-city-operations", "title": "A living operations map for the city", "href": "/use-cases/smart-city-operations" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" } ], "workflow": [ { "id": "stage-1", "title": "Catalog authoritative layers", "owner": "Department systems of record", "implementation": "Retain authoritative assets, work orders, ownership and service outcomes; the map does not become an ungoverned replacement master.", "dataContract": "Layer ↔ steward, source, schema, CRS, sensitivity, version", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two departments claim the same incident", "recovery": "Keep one coordinating incident with explicit owning/participating work orders; never transfer authority by map edit alone." } }, { "id": "stage-2", "title": "Ingest live assets and citizen reports", "owner": "Spatial data catalogue", "implementation": "mGIS registers layers, schemas, CRS, stewards, update cadence, license/sensitivity and immutable versions.", "dataContract": "Report/alarm ↔ source identity, consent, event/receipt time, coarse/public projection", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Citizen report contains precise personal data", "recovery": "Restrict raw evidence, derive a coarse operational/public location and apply purpose-specific retention/redaction." } }, { "id": "stage-3", "title": "Dispatch and monitor work", "owner": "Event correlation", "implementation": "Normalizes citizen reports and sensor alarms, preserves each source, and derives bounded incident clusters under a versioned rule.", "dataContract": "Derived incident ↔ member evidence IDs and correlation policy version", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Public status lags internal resolution", "recovery": "Version projections, display freshness, alert on reconciliation delay and correct with an attributable update." } }, { "id": "stage-4", "title": "Publish role-specific dashboards", "owner": "Work orchestration", "implementation": "Creates department-specific tasks, routes capable crews, tracks progress/proof and reconciles closure to the owning system.", "dataContract": "Work order ↔ owning department, asset, SLA, task/provider identity, closure proof", "contract": { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two departments claim the same incident", "recovery": "Keep one coordinating incident with explicit owning/participating work orders; never transfer authority by map edit alone." } }, { "id": "stage-5", "title": "Analyze hotspots and service equity", "owner": "Role and public projections", "implementation": "Control room, department, executive and public views apply distinct access, aggregation, delay, accessibility and disclosure policy.", "dataContract": "Layer ↔ steward, source, schema, CRS, sensitivity, version", "contract": { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Citizen report contains precise personal data", "recovery": "Restrict raw evidence, derive a coarse operational/public location and apply purpose-specific retention/redaction." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "method": "GET", "path": "/devices/drives", "summary": "Gets drive details of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/drive.json", "sourceFingerprint": "6cdf4c61bc811cde72adc7d658a90c01a1bb4a1f805c85a4d3cd763c2281f2c3", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "method": "GET", "path": "/reports/forms/{formId}", "summary": "To get form based check in/out details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "slug": "intouch-get-devices-gets-the-live-data-of-devices", "method": "GET", "path": "/devices", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-gets-the-live-data-of-devices" }, { "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "method": "GET", "path": "/reports/movements/{userId}", "summary": "Get users movement details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "fleet-geofences", "title": "Build fleet geofence operations", "level": "Advanced", "duration": "75 min", "outcome": "An operations-ready geofence monitor.", "href": "/tutorials/fleet-geofences" }, { "slug": "geojson-operations-layer", "title": "Render a governed GeoJSON operations layer", "level": "Intermediate", "duration": "55 min", "outcome": "An accessible map layer whose visual state is reproducible from source data.", "href": "/tutorials/geojson-operations-layer" }, { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "level": "Advanced", "duration": "90 min", "outcome": "A stateful live-delivery journey with recovery and replay.", "href": "/tutorials/delivery-eta" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/smart-city-operations-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Catalogue high-value layers and authoritative owners", "Unify read-only incident views for one ward", "Add one department's task lifecycle and reconciliation", "Introduce cross-channel correlation with human confirmation", "Publish privacy/accessibility-reviewed public status and equity metrics before citywide expansion" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/smart-city-operations-durable-operation" } ``` ## implementation-recipe · Contract slice: Navigation built for intermittent connectivity - Identity: `implementation-recipe:connected-vehicle-request-response` - Canonical: https://developer.mappls.com/recipes/connected-vehicle-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "connected-vehicle-request-response", "title": "Contract slice: Navigation built for intermittent connectivity", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Automotive", "scenario": "A vehicle crosses a long connectivity gap after receiving a regional data update the night before. Navigation must boot with a compatible signed offline package, plan and guide locally, blend online traffic/search when available, protect driver attention, and recover automatically if the new package or runtime is unhealthy.", "outcome": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety.", "audience": [ "Driver", "Vehicle head unit" ], "metrics": [ "Route success offline", "Guidance crash-free rate", "Update adoption", "Search success" ], "useCase": { "slug": "connected-vehicle", "title": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" }, "products": [ { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "delivery": "entitlement-dependent", "href": "/docs/offline-automotive" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" } ], "workflow": [ { "id": "stage-1", "title": "Activate the head unit", "owner": "Vehicle/OEM identity", "implementation": "Owns hardware, market/region, entitlement, runtime compatibility, privacy/consent, activation and update campaign.", "dataContract": "Vehicle manifest ↔ hardware/runtime/region/entitlement versions", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Power loss during update", "recovery": "Write only the inactive slot and switch one atomic pointer after verification; boot always finds a previously acknowledged package." } }, { "id": "stage-2", "title": "Install compatible signed regional data", "owner": "Dual-slot offline runtime", "implementation": "Maintains one active and one staged signed package, atomic activation pointer, health acknowledgement and rollback evidence.", "dataContract": "Data package ↔ epoch, region, size, content/signature hash, compatibility", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Online traffic disappears mid-route", "recovery": "Keep guiding from the last valid local route, mark traffic freshness and avoid blocking safety-critical guidance." } } ], "contracts": [ { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" } ], "contractCoverage": [ { "productSlug": "offline-automotive", "productName": "Offline & Automotive", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" } ], "journeys": [], "capstone": { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "difficulty": "Advanced", "declaredTests": 21, "href": "/samples/a2a-solution-studio", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "primaryOperation": "GET /{REST_KEY}/{resources}/{profile}/{geopositions}", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/connected-vehicle-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Prove offline boot/search/route on target hardware", "Add signed dual-slot package staging and power-loss tests" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/connected-vehicle-request-response" } ``` ## implementation-recipe · Application flow: Navigation built for intermittent connectivity - Identity: `implementation-recipe:connected-vehicle-composed-experience` - Canonical: https://developer.mappls.com/recipes/connected-vehicle-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "connected-vehicle-composed-experience", "title": "Application flow: Navigation built for intermittent connectivity", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Automotive", "scenario": "A vehicle crosses a long connectivity gap after receiving a regional data update the night before. Navigation must boot with a compatible signed offline package, plan and guide locally, blend online traffic/search when available, protect driver attention, and recover automatically if the new package or runtime is unhealthy.", "outcome": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety.", "audience": [ "Driver", "Vehicle head unit", "OEM cloud", "Map-data operator" ], "metrics": [ "Route success offline", "Guidance crash-free rate", "Update adoption", "Search success" ], "useCase": { "slug": "connected-vehicle", "title": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" }, "products": [ { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "delivery": "entitlement-dependent", "href": "/docs/offline-automotive" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" } ], "workflow": [ { "id": "stage-1", "title": "Activate the head unit", "owner": "Vehicle/OEM identity", "implementation": "Owns hardware, market/region, entitlement, runtime compatibility, privacy/consent, activation and update campaign.", "dataContract": "Vehicle manifest ↔ hardware/runtime/region/entitlement versions", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Power loss during update", "recovery": "Write only the inactive slot and switch one atomic pointer after verification; boot always finds a previously acknowledged package." } }, { "id": "stage-2", "title": "Install compatible signed regional data", "owner": "Dual-slot offline runtime", "implementation": "Maintains one active and one staged signed package, atomic activation pointer, health acknowledgement and rollback evidence.", "dataContract": "Data package ↔ epoch, region, size, content/signature hash, compatibility", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Online traffic disappears mid-route", "recovery": "Keep guiding from the last valid local route, mark traffic freshness and avoid blocking safety-critical guidance." } }, { "id": "stage-3", "title": "Plan and guide offline", "owner": "Local navigation", "implementation": "Search index, routing graph, guidance and map rendering operate without network under pinned runtime/data/profile versions.", "dataContract": "Route session ↔ offline/online sources, profile, data/traffic versions", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "New package boots but fails route smoke test", "recovery": "Fail health acknowledgement, restore the prior slot and upload privacy-safe diagnostics when connectivity returns." } }, { "id": "stage-4", "title": "Blend online traffic and search when available", "owner": "Online enhancement", "implementation": "Trusted cloud boundary adds fresh search, traffic and telemetry only when entitled and available; responses carry freshness/provenance.", "dataContract": "Update event ↔ campaign, stage, evidence, event/receipt time, health/rollback outcome", "contract": { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Power loss during update", "recovery": "Write only the inactive slot and switch one atomic pointer after verification; boot always finds a previously acknowledged package." } } ], "contracts": [ { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" } ], "contractCoverage": [ { "productSlug": "offline-automotive", "productName": "Offline & Automotive", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" } ], "capstone": { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "difficulty": "Advanced", "declaredTests": 21, "href": "/samples/a2a-solution-studio", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "primaryOperation": "GET /{REST_KEY}/{resources}/{profile}/{geopositions}", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/connected-vehicle-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Prove offline boot/search/route on target hardware", "Add signed dual-slot package staging and power-loss tests", "Pilot online search/traffic as optional enhancement", "Run canary update campaigns with automatic rollback" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/connected-vehicle-composed-experience" } ``` ## implementation-recipe · Operating journey: Navigation built for intermittent connectivity - Identity: `implementation-recipe:connected-vehicle-durable-operation` - Canonical: https://developer.mappls.com/recipes/connected-vehicle-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "connected-vehicle-durable-operation", "title": "Operating journey: Navigation built for intermittent connectivity", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Automotive", "scenario": "A vehicle crosses a long connectivity gap after receiving a regional data update the night before. Navigation must boot with a compatible signed offline package, plan and guide locally, blend online traffic/search when available, protect driver attention, and recover automatically if the new package or runtime is unhealthy.", "outcome": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety.", "audience": [ "Driver", "Vehicle head unit", "OEM cloud", "Map-data operator", "Dealer/support engineer" ], "metrics": [ "Route success offline", "Guidance crash-free rate", "Update adoption", "Search success" ], "useCase": { "slug": "connected-vehicle", "title": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" }, "products": [ { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "delivery": "entitlement-dependent", "href": "/docs/offline-automotive" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" } ], "workflow": [ { "id": "stage-1", "title": "Activate the head unit", "owner": "Vehicle/OEM identity", "implementation": "Owns hardware, market/region, entitlement, runtime compatibility, privacy/consent, activation and update campaign.", "dataContract": "Vehicle manifest ↔ hardware/runtime/region/entitlement versions", "contract": { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Power loss during update", "recovery": "Write only the inactive slot and switch one atomic pointer after verification; boot always finds a previously acknowledged package." } }, { "id": "stage-2", "title": "Install compatible signed regional data", "owner": "Dual-slot offline runtime", "implementation": "Maintains one active and one staged signed package, atomic activation pointer, health acknowledgement and rollback evidence.", "dataContract": "Data package ↔ epoch, region, size, content/signature hash, compatibility", "contract": { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Online traffic disappears mid-route", "recovery": "Keep guiding from the last valid local route, mark traffic freshness and avoid blocking safety-critical guidance." } }, { "id": "stage-3", "title": "Plan and guide offline", "owner": "Local navigation", "implementation": "Search index, routing graph, guidance and map rendering operate without network under pinned runtime/data/profile versions.", "dataContract": "Route session ↔ offline/online sources, profile, data/traffic versions", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "New package boots but fails route smoke test", "recovery": "Fail health acknowledgement, restore the prior slot and upload privacy-safe diagnostics when connectivity returns." } }, { "id": "stage-4", "title": "Blend online traffic and search when available", "owner": "Online enhancement", "implementation": "Trusted cloud boundary adds fresh search, traffic and telemetry only when entitled and available; responses carry freshness/provenance.", "dataContract": "Update event ↔ campaign, stage, evidence, event/receipt time, health/rollback outcome", "contract": { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Power loss during update", "recovery": "Write only the inactive slot and switch one atomic pointer after verification; boot always finds a previously acknowledged package." } }, { "id": "stage-5", "title": "Stage atomic map and runtime updates", "owner": "Fleet operations", "implementation": "Campaign, download, verification, activation, health, rollback and support diagnostics are stateful journeys with aggregate metrics.", "dataContract": "Vehicle manifest ↔ hardware/runtime/region/entitlement versions", "contract": { "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "method": "GET", "path": "/devices/drives", "summary": "Gets drive details of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/drive.json", "sourceFingerprint": "6cdf4c61bc811cde72adc7d658a90c01a1bb4a1f805c85a4d3cd763c2281f2c3", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Online traffic disappears mid-route", "recovery": "Keep guiding from the last valid local route, mark traffic freshness and avoid blocking safety-critical guidance." } } ], "contracts": [ { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "core-location-get-api-places-geocode-geocode-api", "method": "GET", "path": "/api/places/geocode", "summary": "Geocode API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/geocode.yml", "sourceFingerprint": "b1ce0d03e44035477f0d722d623b9d0ff2c5c392613f0f5106fa75392aeb3c05", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "slug": "intouch-get-device-gets-the-live-data-of-devices", "method": "GET", "path": "/device", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "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.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/event.json", "sourceFingerprint": "e12f19aca91ae7a3a69a36fbd62f0929a6e0ffa0437bfc7361557b5b83d69528", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "intouch-get-devices-drives-gets-drive-details-of-a-device", "method": "GET", "path": "/devices/drives", "summary": "Gets drive details of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/drive.json", "sourceFingerprint": "6cdf4c61bc811cde72adc7d658a90c01a1bb4a1f805c85a4d3cd763c2281f2c3", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "intouch-get-devices-gets-the-live-data-of-devices", "method": "GET", "path": "/devices", "summary": "Gets the live data of devices.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/device.json", "sourceFingerprint": "58a17aea1fc8a386e467f0266fb5d92e52e148c709fbcb95565be5c0f25895a4", "authMode": "bearer", "href": "/api-reference/intouch-get-devices-gets-the-live-data-of-devices" } ], "contractCoverage": [ { "productSlug": "offline-automotive", "productName": "Offline & Automotive", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "oauth-server-integration", "title": "Call Mappls safely from a trusted server", "level": "Intermediate", "duration": "35 min", "outcome": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.", "href": "/tutorials/oauth-server-integration" }, { "slug": "a2a-solution-coordination", "title": "Coordinate a complete Mappls A2A journey", "level": "Advanced", "duration": "90 min", "outcome": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.", "href": "/tutorials/a2a-solution-coordination" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "level": "Advanced", "duration": "90 min", "outcome": "A stateful live-delivery journey with recovery and replay.", "href": "/tutorials/delivery-eta" } ], "journeys": [ { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "offline-automotive-release", "title": "Offline automotive release", "summary": "Manufacture, activate, install, operate, update, recover, and retire a navigation runtime and map-data release as one compatible system.", "stateModel": "stateful", "aggregate": "device release", "states": 7, "transitions": 7, "href": "/journeys/offline-automotive-release" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" } ], "capstone": { "slug": "a2a-solution-studio", "name": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "difficulty": "Advanced", "declaredTests": 21, "href": "/samples/a2a-solution-studio", "downloadPath": "/downloads/a2a-solution-studio.zip", "checksumPath": "/downloads/a2a-solution-studio.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "primaryOperation": "GET /{REST_KEY}/{resources}/{profile}/{geopositions}", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/connected-vehicle-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Prove offline boot/search/route on target hardware", "Add signed dual-slot package staging and power-loss tests", "Pilot online search/traffic as optional enhancement", "Run canary update campaigns with automatic rollback", "Scale after driver-distraction, functional-safety, privacy, cybersecurity and dealer-support approval" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/connected-vehicle-durable-operation" } ``` ## implementation-recipe · Contract slice: Run a safe, punctual airport turnaround - Identity: `implementation-recipe:aviation-ground-operations-request-response` - Canonical: https://developer.mappls.com/recipes/aviation-ground-operations-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "aviation-ground-operations-request-response", "title": "Contract slice: Run a safe, punctual airport turnaround", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Aviation", "scenario": "A delayed inbound aircraft changes stand while fuel, catering, baggage and inspection teams are already moving. The airport must publish the current approved airside network, re-plan one versioned turnaround, prevent vehicles entering restricted or closed areas, preserve each milestone hand-off, and avoid declaring departure-ready until airline, airport and safety authorities agree.", "outcome": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams.", "audience": [ "Turnaround coordinator", "Airport operations controller" ], "metrics": [ "On-time departure", "Turnaround milestone variance", "Airside safety exceptions", "Ground-equipment utilization" ], "useCase": { "slug": "aviation-ground-operations", "title": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish the approved airside network and restricted zones", "owner": "Airport operational authority", "implementation": "Airport and airline systems own stands, movement permissions, flight milestones, safety zones, people, equipment and departure decisions; Mappls-derived experiences do not grant aviation or airside authority.", "dataContract": "Airside layer ↔ authority, version, effective window, sensitivity and closure state", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Stand changes after teams accept tasks", "recovery": "Create a new turnaround revision, invalidate incompatible assignments and corridor evidence, and require explicit reacceptance rather than mutating in place." } }, { "id": "stage-2", "title": "Create one versioned turnaround plan", "owner": "Versioned spatial operating picture", "implementation": "Governed enterprise layers publish stands, service roads, closures, restricted zones and emergency access with source, steward, CRS, sensitivity and effective window.", "dataContract": "Turnaround ↔ flight/stand references, milestone graph, version and accountable coordinator", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A vehicle appears outside its approved corridor", "recovery": "Preserve accuracy and network version, alert operations, stop affected automation and require safety review; never infer culpability from a point alone." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/aviation-ground-operations-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Catalogue airside layers and source authorities", "Simulate one turnaround and disruption with synthetic identities" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/aviation-ground-operations-request-response" } ``` ## implementation-recipe · Application flow: Run a safe, punctual airport turnaround - Identity: `implementation-recipe:aviation-ground-operations-composed-experience` - Canonical: https://developer.mappls.com/recipes/aviation-ground-operations-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "aviation-ground-operations-composed-experience", "title": "Application flow: Run a safe, punctual airport turnaround", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Aviation", "scenario": "A delayed inbound aircraft changes stand while fuel, catering, baggage and inspection teams are already moving. The airport must publish the current approved airside network, re-plan one versioned turnaround, prevent vehicles entering restricted or closed areas, preserve each milestone hand-off, and avoid declaring departure-ready until airline, airport and safety authorities agree.", "outcome": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams.", "audience": [ "Turnaround coordinator", "Airport operations controller", "Ground-service team", "Airline station manager" ], "metrics": [ "On-time departure", "Turnaround milestone variance", "Airside safety exceptions", "Ground-equipment utilization" ], "useCase": { "slug": "aviation-ground-operations", "title": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish the approved airside network and restricted zones", "owner": "Airport operational authority", "implementation": "Airport and airline systems own stands, movement permissions, flight milestones, safety zones, people, equipment and departure decisions; Mappls-derived experiences do not grant aviation or airside authority.", "dataContract": "Airside layer ↔ authority, version, effective window, sensitivity and closure state", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Stand changes after teams accept tasks", "recovery": "Create a new turnaround revision, invalidate incompatible assignments and corridor evidence, and require explicit reacceptance rather than mutating in place." } }, { "id": "stage-2", "title": "Create one versioned turnaround plan", "owner": "Versioned spatial operating picture", "implementation": "Governed enterprise layers publish stands, service roads, closures, restricted zones and emergency access with source, steward, CRS, sensitivity and effective window.", "dataContract": "Turnaround ↔ flight/stand references, milestone graph, version and accountable coordinator", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A vehicle appears outside its approved corridor", "recovery": "Preserve accuracy and network version, alert operations, stop affected automation and require safety review; never infer culpability from a point alone." } }, { "id": "stage-3", "title": "Track eligible vehicles and milestone hand-offs", "owner": "Turnaround aggregate", "implementation": "One application-owned plan versions stand, tasks, dependencies, target milestones, responsible organizations and changes after disruption.", "dataContract": "Task ↔ organization, eligibility, equipment, zone policy and evidence", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "One supplier reports complete while another dependency is open", "recovery": "Keep the supplier milestone complete but departure readiness blocked, showing the exact dependency and responsible authority." } }, { "id": "stage-4", "title": "Capture inspection and exception evidence", "owner": "Ground-team execution", "implementation": "Workmate tasks and bounded vehicle observations track accepted assignments, corridor adherence, evidence, pauses and exceptions with offline-safe command identity.", "dataContract": "Vehicle event ↔ device/assignment identity, event/receipt time and approved-network version", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Stand changes after teams accept tasks", "recovery": "Create a new turnaround revision, invalidate incompatible assignments and corridor evidence, and require explicit reacceptance rather than mutating in place." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "method": "GET", "path": "/configurations/categories", "summary": "To get the list of client category in an account", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "fleet-geofences", "title": "Build fleet geofence operations", "level": "Advanced", "duration": "75 min", "outcome": "An operations-ready geofence monitor.", "href": "/tutorials/fleet-geofences" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/aviation-ground-operations-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Catalogue airside layers and source authorities", "Simulate one turnaround and disruption with synthetic identities", "Pilot read-only milestone coordination at one stand", "Add approved vehicle/task evidence under safety oversight" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/aviation-ground-operations-composed-experience" } ``` ## implementation-recipe · Operating journey: Run a safe, punctual airport turnaround - Identity: `implementation-recipe:aviation-ground-operations-durable-operation` - Canonical: https://developer.mappls.com/recipes/aviation-ground-operations-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "aviation-ground-operations-durable-operation", "title": "Operating journey: Run a safe, punctual airport turnaround", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Aviation", "scenario": "A delayed inbound aircraft changes stand while fuel, catering, baggage and inspection teams are already moving. The airport must publish the current approved airside network, re-plan one versioned turnaround, prevent vehicles entering restricted or closed areas, preserve each milestone hand-off, and avoid declaring departure-ready until airline, airport and safety authorities agree.", "outcome": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams.", "audience": [ "Turnaround coordinator", "Airport operations controller", "Ground-service team", "Airline station manager", "Safety investigator" ], "metrics": [ "On-time departure", "Turnaround milestone variance", "Airside safety exceptions", "Ground-equipment utilization" ], "useCase": { "slug": "aviation-ground-operations", "title": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish the approved airside network and restricted zones", "owner": "Airport operational authority", "implementation": "Airport and airline systems own stands, movement permissions, flight milestones, safety zones, people, equipment and departure decisions; Mappls-derived experiences do not grant aviation or airside authority.", "dataContract": "Airside layer ↔ authority, version, effective window, sensitivity and closure state", "contract": { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Stand changes after teams accept tasks", "recovery": "Create a new turnaround revision, invalidate incompatible assignments and corridor evidence, and require explicit reacceptance rather than mutating in place." } }, { "id": "stage-2", "title": "Create one versioned turnaround plan", "owner": "Versioned spatial operating picture", "implementation": "Governed enterprise layers publish stands, service roads, closures, restricted zones and emergency access with source, steward, CRS, sensitivity and effective window.", "dataContract": "Turnaround ↔ flight/stand references, milestone graph, version and accountable coordinator", "contract": { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A vehicle appears outside its approved corridor", "recovery": "Preserve accuracy and network version, alert operations, stop affected automation and require safety review; never infer culpability from a point alone." } }, { "id": "stage-3", "title": "Track eligible vehicles and milestone hand-offs", "owner": "Turnaround aggregate", "implementation": "One application-owned plan versions stand, tasks, dependencies, target milestones, responsible organizations and changes after disruption.", "dataContract": "Task ↔ organization, eligibility, equipment, zone policy and evidence", "contract": { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "method": "GET", "path": "/device/{deviceId}/events", "summary": "Gets the historical location events of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "One supplier reports complete while another dependency is open", "recovery": "Keep the supplier milestone complete but departure readiness blocked, showing the exact dependency and responsible authority." } }, { "id": "stage-4", "title": "Capture inspection and exception evidence", "owner": "Ground-team execution", "implementation": "Workmate tasks and bounded vehicle observations track accepted assignments, corridor adherence, evidence, pauses and exceptions with offline-safe command identity.", "dataContract": "Vehicle event ↔ device/assignment identity, event/receipt time and approved-network version", "contract": { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Stand changes after teams accept tasks", "recovery": "Create a new turnaround revision, invalidate incompatible assignments and corridor evidence, and require explicit reacceptance rather than mutating in place." } }, { "id": "stage-5", "title": "Reconcile departure readiness across authorities", "owner": "Readiness reconciliation", "implementation": "Every required authority submits attributable milestone evidence; the coordinator derives readiness but never overwrites an authority's source record.", "dataContract": "Readiness ↔ required authority decisions, unresolved exceptions and final revision", "contract": { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A vehicle appears outside its approved corridor", "recovery": "Preserve accuracy and network version, alert operations, stop affected automation and require safety review; never infer culpability from a point alone." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "method": "GET", "path": "/configurations/categories", "summary": "To get the list of client category in an account", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarms", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "method": "GET", "path": "/device/{deviceId}/events", "summary": "Gets the historical location events of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "fleet-geofences", "title": "Build fleet geofence operations", "level": "Advanced", "duration": "75 min", "outcome": "An operations-ready geofence monitor.", "href": "/tutorials/fleet-geofences" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/aviation-ground-operations-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Catalogue airside layers and source authorities", "Simulate one turnaround and disruption with synthetic identities", "Pilot read-only milestone coordination at one stand", "Add approved vehicle/task evidence under safety oversight", "Scale only after airport, airline, regulator, cybersecurity, privacy and degraded-mode approval" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/aviation-ground-operations-durable-operation" } ``` ## implementation-recipe · Contract slice: Turn inspiration into an itinerary - Identity: `implementation-recipe:travel-discovery-request-response` - Canonical: https://developer.mappls.com/recipes/travel-discovery-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "travel-discovery-request-response", "title": "Contract slice: Turn inspiration into an itinerary", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Travel", "scenario": "A family planning a three-day city break saves attractions from editorial stories, nearby search and partner inventory. The product must preserve place identity across languages and sources, sequence a feasible itinerary, show neighbourhood and RealView context, avoid stale opening assumptions, and hand off to booking/navigation without losing the selected place.", "outcome": "More confident trip planning and higher conversion from discovery to booking.", "audience": [ "Traveler", "Travel-content editor" ], "metrics": [ "Save-to-book rate", "Itinerary completion", "Search refinement", "Navigation hand-offs" ], "useCase": { "slug": "travel-discovery", "title": "Turn inspiration into an itinerary", "href": "/use-cases/travel-discovery" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "stateModel": "stateless", "platforms": [ "Widgets", "Deep links", "Web", "Android", "iOS" ], "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "delivery": "entitlement-dependent", "href": "/docs/app-widgets-deep-links" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" } ], "workflow": [ { "id": "stage-1", "title": "Discover places by theme and proximity", "owner": "Travel content and inventory", "implementation": "Own editorial collections, commercial availability, pricing, disclosures and booking outcome while mapping every item to a stable place identity.", "dataContract": "Travel item ↔ Mappls Pin, editorial/partner IDs, language and provenance", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two sources describe the same attraction", "recovery": "Reconcile through stable place identity and retain source-specific content/availability rather than merging by name." } }, { "id": "stage-2", "title": "Build a time-aware itinerary", "owner": "Place discovery", "implementation": "Search/nearby and curated sources resolve to Mappls Pins with provenance, language/display labels and duplicate reconciliation.", "dataContract": "Itinerary ↔ ordered stable IDs, constraints, version and route revision", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Opening or availability data is stale", "recovery": "Show source/time, confirm with the authoritative partner and avoid routing a day as guaranteed feasible." } } ], "contracts": [ { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "app-widgets-deep-links", "productName": "App Widgets & Deep Links", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" } ], "journeys": [], "capstone": { "slug": "store-locator", "name": "Store Locator", "description": "Discover eligible branches, compare distance and ETA, preserve Mappls Pin identity, and hand off safely to navigation.", "difficulty": "Starter", "declaredTests": 6, "href": "/samples/store-locator", "downloadPath": "/downloads/store-locator.zip", "checksumPath": "/downloads/store-locator.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-textsearch-json-text-search-api", "primaryOperation": "GET /api/places/textsearch/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/travel-discovery-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Introduce stable Mappls Pin saves across existing discovery", "Build a restart-safe ordered itinerary with fixture routing" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/travel-discovery-request-response" } ``` ## implementation-recipe · Application flow: Turn inspiration into an itinerary - Identity: `implementation-recipe:travel-discovery-composed-experience` - Canonical: https://developer.mappls.com/recipes/travel-discovery-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "travel-discovery-composed-experience", "title": "Application flow: Turn inspiration into an itinerary", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Travel", "scenario": "A family planning a three-day city break saves attractions from editorial stories, nearby search and partner inventory. The product must preserve place identity across languages and sources, sequence a feasible itinerary, show neighbourhood and RealView context, avoid stale opening assumptions, and hand off to booking/navigation without losing the selected place.", "outcome": "More confident trip planning and higher conversion from discovery to booking.", "audience": [ "Traveler", "Travel-content editor", "Booking partner", "Product merchandiser" ], "metrics": [ "Save-to-book rate", "Itinerary completion", "Search refinement", "Navigation hand-offs" ], "useCase": { "slug": "travel-discovery", "title": "Turn inspiration into an itinerary", "href": "/use-cases/travel-discovery" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "stateModel": "stateless", "platforms": [ "Widgets", "Deep links", "Web", "Android", "iOS" ], "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "delivery": "entitlement-dependent", "href": "/docs/app-widgets-deep-links" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" } ], "workflow": [ { "id": "stage-1", "title": "Discover places by theme and proximity", "owner": "Travel content and inventory", "implementation": "Own editorial collections, commercial availability, pricing, disclosures and booking outcome while mapping every item to a stable place identity.", "dataContract": "Travel item ↔ Mappls Pin, editorial/partner IDs, language and provenance", "contract": { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two sources describe the same attraction", "recovery": "Reconcile through stable place identity and retain source-specific content/availability rather than merging by name." } }, { "id": "stage-2", "title": "Build a time-aware itinerary", "owner": "Place discovery", "implementation": "Search/nearby and curated sources resolve to Mappls Pins with provenance, language/display labels and duplicate reconciliation.", "dataContract": "Itinerary ↔ ordered stable IDs, constraints, version and route revision", "contract": { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Opening or availability data is stale", "recovery": "Show source/time, confirm with the authoritative partner and avoid routing a day as guaranteed feasible." } }, { "id": "stage-3", "title": "Visualize routes and neighborhoods", "owner": "Itinerary aggregate", "implementation": "Owns ordered saved place IDs, day/time constraints, route revisions, visits/skips, sharing and deliberate cancellation.", "dataContract": "Place fact ↔ source and observation/freshness timestamp", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Navigation app is absent", "recovery": "Use an HTTPS fallback that preserves the destination and offers browser navigation or store choice without redirect loops." } }, { "id": "stage-4", "title": "Embed 3D or RealView context", "owner": "Map and rich context", "implementation": "Renders routes, neighbourhoods, 3D/RealView or deep-linked experiences with accessible alternatives and explicit freshness.", "dataContract": "Hand-off ↔ destination/offer identity, safe campaign fields, fallback and observed stage", "contract": { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two sources describe the same attraction", "recovery": "Reconcile through stable place identity and retain source-specific content/availability rather than merging by name." } } ], "contracts": [ { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "routes-navigation", "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "app-widgets-deep-links", "productName": "App Widgets & Deep Links", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" }, { "slug": "deep-link-attribution-resilience", "title": "Operate deep links across every hand-off", "level": "Advanced", "duration": "70 min", "outcome": "A measurable zero-SDK journey that never confuses a click with arrival.", "href": "/tutorials/deep-link-attribution-resilience" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" } ], "journeys": [ { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" } ], "capstone": { "slug": "store-locator", "name": "Store Locator", "description": "Discover eligible branches, compare distance and ETA, preserve Mappls Pin identity, and hand off safely to navigation.", "difficulty": "Starter", "declaredTests": 6, "href": "/samples/store-locator", "downloadPath": "/downloads/store-locator.zip", "checksumPath": "/downloads/store-locator.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-textsearch-json-text-search-api", "primaryOperation": "GET /api/places/textsearch/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/travel-discovery-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Introduce stable Mappls Pin saves across existing discovery", "Build a restart-safe ordered itinerary with fixture routing", "Add route revisions and stale-plan invalidation", "Pilot rich context and safe partner/deep-link hand-offs" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/travel-discovery-composed-experience" } ``` ## implementation-recipe · Operating journey: Turn inspiration into an itinerary - Identity: `implementation-recipe:travel-discovery-durable-operation` - Canonical: https://developer.mappls.com/recipes/travel-discovery-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "travel-discovery-durable-operation", "title": "Operating journey: Turn inspiration into an itinerary", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Travel", "scenario": "A family planning a three-day city break saves attractions from editorial stories, nearby search and partner inventory. The product must preserve place identity across languages and sources, sequence a feasible itinerary, show neighbourhood and RealView context, avoid stale opening assumptions, and hand off to booking/navigation without losing the selected place.", "outcome": "More confident trip planning and higher conversion from discovery to booking.", "audience": [ "Traveler", "Travel-content editor", "Booking partner", "Product merchandiser", "Customer support" ], "metrics": [ "Save-to-book rate", "Itinerary completion", "Search refinement", "Navigation hand-offs" ], "useCase": { "slug": "travel-discovery", "title": "Turn inspiration into an itinerary", "href": "/use-cases/travel-discovery" }, "products": [ { "slug": "search-places", "name": "Search & Places", "summary": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "stateModel": "stateless", "platforms": [ "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets" ], "capabilities": [ "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "delivery": "direct", "href": "/docs/search-places" }, { "slug": "maps", "name": "Maps", "summary": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "stateModel": "stateless", "platforms": [ "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST" ], "capabilities": [ "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "delivery": "direct", "href": "/docs/maps" }, { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "summary": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "stateModel": "stateless", "platforms": [ "Widgets", "Deep links", "Web", "Android", "iOS" ], "capabilities": [ "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "delivery": "entitlement-dependent", "href": "/docs/app-widgets-deep-links" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" } ], "workflow": [ { "id": "stage-1", "title": "Discover places by theme and proximity", "owner": "Travel content and inventory", "implementation": "Own editorial collections, commercial availability, pricing, disclosures and booking outcome while mapping every item to a stable place identity.", "dataContract": "Travel item ↔ Mappls Pin, editorial/partner IDs, language and provenance", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two sources describe the same attraction", "recovery": "Reconcile through stable place identity and retain source-specific content/availability rather than merging by name." } }, { "id": "stage-2", "title": "Build a time-aware itinerary", "owner": "Place discovery", "implementation": "Search/nearby and curated sources resolve to Mappls Pins with provenance, language/display labels and duplicate reconciliation.", "dataContract": "Itinerary ↔ ordered stable IDs, constraints, version and route revision", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Opening or availability data is stale", "recovery": "Show source/time, confirm with the authoritative partner and avoid routing a day as guaranteed feasible." } }, { "id": "stage-3", "title": "Visualize routes and neighborhoods", "owner": "Itinerary aggregate", "implementation": "Owns ordered saved place IDs, day/time constraints, route revisions, visits/skips, sharing and deliberate cancellation.", "dataContract": "Place fact ↔ source and observation/freshness timestamp", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Navigation app is absent", "recovery": "Use an HTTPS fallback that preserves the destination and offers browser navigation or store choice without redirect loops." } }, { "id": "stage-4", "title": "Embed 3D or RealView context", "owner": "Map and rich context", "implementation": "Renders routes, neighbourhoods, 3D/RealView or deep-linked experiences with accessible alternatives and explicit freshness.", "dataContract": "Hand-off ↔ destination/offer identity, safe campaign fields, fallback and observed stage", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Two sources describe the same attraction", "recovery": "Reconcile through stable place identity and retain source-specific content/availability rather than merging by name." } }, { "id": "stage-5", "title": "Hand off to navigation", "owner": "Partner hand-off", "implementation": "Booking and navigation links bind place/offer identity, allow-list campaign data and distinguish click from confirmed downstream outcome.", "dataContract": "Travel item ↔ Mappls Pin, editorial/partner IDs, language and provenance", "contract": { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Opening or availability data is stale", "recovery": "Show source/time, confirm with the authoritative partner and avoid routing a day as guaranteed feasible." } } ], "contracts": [ { "slug": "core-location-get-api-places-textsearch-json-text-search-api", "method": "GET", "path": "/api/places/textsearch/json", "summary": "Text Search API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/textsearch.yml", "sourceFingerprint": "afcd3c96db88abefe988018a2ef98ccb5e816c84beefc47bd0c9cd4452b365f6", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api" }, { "slug": "core-location-get-rest-key-still-image-still-map-image-api", "method": "GET", "path": "/{REST_KEY}/still_image", "summary": "Still Map Image API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillMapImageAPI.yml", "sourceFingerprint": "c8559a5aaab9a21da769cd84bbeb2c4c3611f3371f49d5520e47039cd724e755", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "core-location-get-api-places-nearby-json-nearby-api", "method": "GET", "path": "/api/places/nearby/json", "summary": "Nearby API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/nearby.yml", "sourceFingerprint": "4819a31c609c119f03f1db37e90ffc674ff1de4ae1a6336ec5872757bd5d0551", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "slug": "core-location-get-rest-key-elevation-elevation-api", "method": "GET", "path": "/{REST_KEY}/elevation", "summary": "Elevation API", "product": "Core Location", "productSlugs": [ "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/Elevation-API.yml", "sourceFingerprint": "6db3e99ab47abbb74165fae787760a3776568476cc4a4e6cf9f8e8040bba3a93", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "core-location-get-apis-o2o-entity-eloc-place-detail-api", "method": "GET", "path": "/apis/O2O/entity/{eLoc}", "summary": "Place Detail API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/placeDetail-adv.yml", "sourceFingerprint": "569fa6048fd4bcd14e00e727de4863ec5aae3b9a8318097a7e2125d32572b1a2", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api" }, { "slug": "core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "method": "POST", "path": "/{REST_KEY}/still_image_polyline", "summary": "Traveled Route Image API", "product": "Core Location", "productSlugs": [ "routes-navigation", "maps" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/StillImagePolyline.yml", "sourceFingerprint": "1e6f6eade85c296433987ee991d538d5c072917ef353288c20193a0cfda654b6", "authMode": "not-declared", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "core-location-get-api-places-search-json-autosuggest-api", "method": "GET", "path": "/api/places/search/json", "summary": "AutoSuggest API", "product": "Core Location", "productSlugs": [ "search-places" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/autosuggest.yml", "sourceFingerprint": "853e2a51f94cc6cc10291bdfdfbd49d57c6cbe56b91a8ab7893a66639a595cf4", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "slug": "core-location-post-api-places-along-route-poi-along-the-route-api", "method": "POST", "path": "/api/places/along_route", "summary": "POI Along the Route API", "product": "Core Location", "productSlugs": [ "search-places", "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/alongRoute.yml", "sourceFingerprint": "e4b96b425a6607716c1739b3d7d3e384c3dbab7b354267da45f82e73f00910c9", "authMode": "oauth2-bearer", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "contractCoverage": [ { "productSlug": "search-places", "productName": "Search & Places", "normalizedOperations": 8, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "maps", "productName": "Maps", "normalizedOperations": 3, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "app-widgets-deep-links", "productName": "App Widgets & Deep Links", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "cordova-release-hardening", "title": "Qualify a Cordova location release", "level": "Advanced", "duration": "80 min", "outcome": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback.", "href": "/tutorials/cordova-release-hardening" }, { "slug": "deep-link-attribution-resilience", "title": "Operate deep links across every hand-off", "level": "Advanced", "duration": "70 min", "outcome": "A measurable zero-SDK journey that never confuses a click with arrival.", "href": "/tutorials/deep-link-attribution-resilience" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" } ], "journeys": [ { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "consented-address-verification", "title": "Consented address verification", "summary": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "stateModel": "stateful", "aggregate": "address verification", "states": 9, "transitions": 11, "href": "/journeys/consented-address-verification" }, { "slug": "widget-selection-session", "title": "Application-owned widget selection", "summary": "Launch a Mappls widget, recover through a useful fallback, validate a narrow candidate, commit it deliberately, invalidate stale selection, and submit one durable business record.", "stateModel": "hybrid", "aggregate": "widget selection session", "states": 7, "transitions": 8, "href": "/journeys/widget-selection-session" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "realview-remote-inspection", "title": "Entitled RealView remote inspection", "summary": "Qualify paid RealView entitlement, open one browser-visible-token viewer attempt, handle the documented no-imagery signal safely, and turn human observations into a reviewed business record without inventing panorama metadata.", "stateModel": "stateful", "aggregate": "remote visual inspection", "states": 10, "transitions": 11, "href": "/journeys/realview-remote-inspection" } ], "capstone": { "slug": "store-locator", "name": "Store Locator", "description": "Discover eligible branches, compare distance and ETA, preserve Mappls Pin identity, and hand off safely to navigation.", "difficulty": "Starter", "declaredTests": 6, "href": "/samples/store-locator", "downloadPath": "/downloads/store-locator.zip", "checksumPath": "/downloads/store-locator.zip.sha256" }, "codeLab": { "primaryOperationSlug": "core-location-get-api-places-textsearch-json-text-search-api", "primaryOperation": "GET /api/places/textsearch/json", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/travel-discovery-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Introduce stable Mappls Pin saves across existing discovery", "Build a restart-safe ordered itinerary with fixture routing", "Add route revisions and stale-plan invalidation", "Pilot rich context and safe partner/deep-link hand-offs", "Scale after content licensing, accessibility, partner attribution, privacy and conversion-incrementality review" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/travel-discovery-durable-operation" } ``` ## implementation-recipe · Contract slice: Coordinate field operations across every plot - Identity: `implementation-recipe:agriculture-field-ops-request-response` - Canonical: https://developer.mappls.com/recipes/agriculture-field-ops-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "agriculture-field-ops-request-response", "title": "Contract slice: Coordinate field operations across every plot", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Agriculture", "scenario": "A cooperative must inspect hundreds of plots before monsoon planting, route teams across poor connectivity, track shared equipment, capture geotagged observations under farmer consent, prevent reports from being assigned to the wrong parcel, and compare issue recurrence without exposing precise farm data broadly.", "outcome": "Less travel and better traceability for inspection, inputs, harvest, and compliance.", "audience": [ "Farm manager", "Agronomist" ], "metrics": [ "Area serviced per day", "Input variance", "Equipment utilization", "Issue recurrence" ], "useCase": { "slug": "agriculture-field-ops", "title": "Coordinate field operations across every plot", "href": "/use-cases/agriculture-field-ops" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish parcel boundaries", "owner": "Farm/parcel registry", "implementation": "Owns farmer relationship, parcel identity, consent, crop/season and authorized users; geometry versions are governed spatial assets.", "dataContract": "Parcel ↔ stable ID, geometry version, CRS, farmer consent and season", "contract": { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "method": "GET", "path": "/geofence/activity", "summary": "Get all the activities done by devices w.r.t various geofences", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Observation falls near a parcel boundary", "recovery": "Retain accuracy and candidate parcels, require field-worker confirmation or review, and never snap silently." } }, { "id": "stage-2", "title": "Create seasonal field tasks", "owner": "Seasonal planning", "implementation": "Creates plot-specific work and inspection requirements, skills, windows, inputs and equipment eligibility.", "dataContract": "Task ↔ parcel/version, policy, assignee/equipment, offline command IDs", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline task was reassigned", "recovery": "Reject stale actor/version commands on sync, retain evidence and route it to an accountable reconciliation queue." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "method": "GET", "path": "/geofence/activity", "summary": "Get all the activities done by devices w.r.t various geofences", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "method": "GET", "path": "/geofence/", "summary": "Gets All The Configured Geofence(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" } ], "journeys": [], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/agriculture-field-ops-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Govern parcel identities, geometry versions and consent", "Pilot offline inspection for one crop and region" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/agriculture-field-ops-request-response" } ``` ## implementation-recipe · Application flow: Coordinate field operations across every plot - Identity: `implementation-recipe:agriculture-field-ops-composed-experience` - Canonical: https://developer.mappls.com/recipes/agriculture-field-ops-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "agriculture-field-ops-composed-experience", "title": "Application flow: Coordinate field operations across every plot", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Agriculture", "scenario": "A cooperative must inspect hundreds of plots before monsoon planting, route teams across poor connectivity, track shared equipment, capture geotagged observations under farmer consent, prevent reports from being assigned to the wrong parcel, and compare issue recurrence without exposing precise farm data broadly.", "outcome": "Less travel and better traceability for inspection, inputs, harvest, and compliance.", "audience": [ "Farm manager", "Agronomist", "Field worker", "Equipment operator" ], "metrics": [ "Area serviced per day", "Input variance", "Equipment utilization", "Issue recurrence" ], "useCase": { "slug": "agriculture-field-ops", "title": "Coordinate field operations across every plot", "href": "/use-cases/agriculture-field-ops" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish parcel boundaries", "owner": "Farm/parcel registry", "implementation": "Owns farmer relationship, parcel identity, consent, crop/season and authorized users; geometry versions are governed spatial assets.", "dataContract": "Parcel ↔ stable ID, geometry version, CRS, farmer consent and season", "contract": { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "method": "GET", "path": "/geofence/activity", "summary": "Get all the activities done by devices w.r.t various geofences", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Observation falls near a parcel boundary", "recovery": "Retain accuracy and candidate parcels, require field-worker confirmation or review, and never snap silently." } }, { "id": "stage-2", "title": "Create seasonal field tasks", "owner": "Seasonal planning", "implementation": "Creates plot-specific work and inspection requirements, skills, windows, inputs and equipment eligibility.", "dataContract": "Task ↔ parcel/version, policy, assignee/equipment, offline command IDs", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline task was reassigned", "recovery": "Reject stale actor/version commands on sync, retain evidence and route it to an accountable reconciliation queue." } }, { "id": "stage-3", "title": "Optimize crews and equipment", "owner": "Offline field execution", "implementation": "Mobile tasks, map packages, ordered commands and evidence manifests survive connectivity gaps with stable idempotency and versions.", "dataContract": "Observation ↔ evidence hash, accuracy, event/receipt time, source and reviewer", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Equipment telemetry is shared across farms", "recovery": "Scope events to authorized device/time/operation assignments and prevent cross-farm projections at the data boundary." } }, { "id": "stage-4", "title": "Capture geotagged observations", "owner": "Equipment telemetry", "implementation": "InTouch device observations derive utilization and exceptions by event time without replacing operator or maintenance records.", "dataContract": "Analysis ↔ input versions, parameters, agronomist decision and audience policy", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Observation falls near a parcel boundary", "recovery": "Retain accuracy and candidate parcels, require field-worker confirmation or review, and never snap silently." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "method": "GET", "path": "/geofence/activity", "summary": "Get all the activities done by devices w.r.t various geofences", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "method": "GET", "path": "/geofence/", "summary": "Gets All The Configured Geofence(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "method": "GET", "path": "/geofence/{id}", "summary": "Get A Single Or Multiple Geofence(s).", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s" }, { "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "method": "GET", "path": "/reports/forms/{formId}", "summary": "To get form based check in/out details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "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", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "authMode": "bearer", "href": "/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/agriculture-field-ops-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Govern parcel identities, geometry versions and consent", "Pilot offline inspection for one crop and region", "Add equipment utilization with explicit assignment boundaries", "Build reproducible recurrence analysis for agronomists" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/agriculture-field-ops-composed-experience" } ``` ## implementation-recipe · Operating journey: Coordinate field operations across every plot - Identity: `implementation-recipe:agriculture-field-ops-durable-operation` - Canonical: https://developer.mappls.com/recipes/agriculture-field-ops-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "agriculture-field-ops-durable-operation", "title": "Operating journey: Coordinate field operations across every plot", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Agriculture", "scenario": "A cooperative must inspect hundreds of plots before monsoon planting, route teams across poor connectivity, track shared equipment, capture geotagged observations under farmer consent, prevent reports from being assigned to the wrong parcel, and compare issue recurrence without exposing precise farm data broadly.", "outcome": "Less travel and better traceability for inspection, inputs, harvest, and compliance.", "audience": [ "Farm manager", "Agronomist", "Field worker", "Equipment operator", "Compliance auditor" ], "metrics": [ "Area serviced per day", "Input variance", "Equipment utilization", "Issue recurrence" ], "useCase": { "slug": "agriculture-field-ops", "title": "Coordinate field operations across every plot", "href": "/use-cases/agriculture-field-ops" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish parcel boundaries", "owner": "Farm/parcel registry", "implementation": "Owns farmer relationship, parcel identity, consent, crop/season and authorized users; geometry versions are governed spatial assets.", "dataContract": "Parcel ↔ stable ID, geometry version, CRS, farmer consent and season", "contract": { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "method": "GET", "path": "/geofence/activity", "summary": "Get all the activities done by devices w.r.t various geofences", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Observation falls near a parcel boundary", "recovery": "Retain accuracy and candidate parcels, require field-worker confirmation or review, and never snap silently." } }, { "id": "stage-2", "title": "Create seasonal field tasks", "owner": "Seasonal planning", "implementation": "Creates plot-specific work and inspection requirements, skills, windows, inputs and equipment eligibility.", "dataContract": "Task ↔ parcel/version, policy, assignee/equipment, offline command IDs", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline task was reassigned", "recovery": "Reject stale actor/version commands on sync, retain evidence and route it to an accountable reconciliation queue." } }, { "id": "stage-3", "title": "Optimize crews and equipment", "owner": "Offline field execution", "implementation": "Mobile tasks, map packages, ordered commands and evidence manifests survive connectivity gaps with stable idempotency and versions.", "dataContract": "Observation ↔ evidence hash, accuracy, event/receipt time, source and reviewer", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Equipment telemetry is shared across farms", "recovery": "Scope events to authorized device/time/operation assignments and prevent cross-farm projections at the data boundary." } }, { "id": "stage-4", "title": "Capture geotagged observations", "owner": "Equipment telemetry", "implementation": "InTouch device observations derive utilization and exceptions by event time without replacing operator or maintenance records.", "dataContract": "Analysis ↔ input versions, parameters, agronomist decision and audience policy", "contract": { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Observation falls near a parcel boundary", "recovery": "Retain accuracy and candidate parcels, require field-worker confirmation or review, and never snap silently." } }, { "id": "stage-5", "title": "Analyze yield and issue patterns", "owner": "Spatial agronomy analysis", "implementation": "Joins exact parcel/evidence/weather/input versions, applies access controls and produces coarse shared insights with lineage.", "dataContract": "Parcel ↔ stable ID, geometry version, CRS, farmer consent and season", "contract": { "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "method": "GET", "path": "/reports/forms/{formId}", "summary": "To get form based check in/out details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Offline task was reassigned", "recovery": "Reject stale actor/version commands on sync, retain evidence and route it to an accountable reconciliation queue." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "method": "GET", "path": "/geofence/activity", "summary": "Get all the activities done by devices w.r.t various geofences", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "intouch-get-geofence-gets-all-the-configured-geofence-s", "method": "GET", "path": "/geofence/", "summary": "Gets All The Configured Geofence(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "method": "GET", "path": "/geofence/{id}", "summary": "Get A Single Or Multiple Geofence(s).", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.yaml", "sourceFingerprint": "03d663d784a8ea9af1a3915cad4395ab716b167774dbf54a73c516bd10bc887a", "authMode": "bearer", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s" }, { "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "method": "GET", "path": "/reports/forms/{formId}", "summary": "To get form based check in/out details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "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", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "authMode": "bearer", "href": "/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences" }, { "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "method": "GET", "path": "/reports/movements/{userId}", "summary": "Get users movement details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "slug": "intouch-get-geofences-gets-all-the-configured-geofence-s", "method": "GET", "path": "/geofences", "summary": "Gets All The Configured Geofence(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "authMode": "bearer", "href": "/api-reference/intouch-get-geofences-gets-all-the-configured-geofence-s" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "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).", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/geofence.json", "sourceFingerprint": "fc26724559038e8d114001105966c2bd30e35ac4f8c0a1644d9241eb4bd64425", "authMode": "bearer", "href": "/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "level": "Advanced", "duration": "90 min", "outcome": "A stateful live-delivery journey with recovery and replay.", "href": "/tutorials/delivery-eta" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/agriculture-field-ops-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Govern parcel identities, geometry versions and consent", "Pilot offline inspection for one crop and region", "Add equipment utilization with explicit assignment boundaries", "Build reproducible recurrence analysis for agronomists", "Expand after farmer privacy, language/accessibility, agronomic validation and offline-support readiness" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/agriculture-field-ops-durable-operation" } ``` ## implementation-recipe · Contract slice: Move material safely across a changing mine - Identity: `implementation-recipe:mining-haulage-safety-request-response` - Canonical: https://developer.mappls.com/recipes/mining-haulage-safety-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "mining-haulage-safety-request-response", "title": "Contract slice: Move material safely across a changing mine", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Mining", "scenario": "A blast changes the active pit and closes a ramp midway through a shift. Dispatch must publish the newly approved road and exclusion-zone version, reassign compatible trucks and loaders, guide offline-capable cycles, distinguish telemetry delay from a stopped vehicle, preserve safety interventions, and reconcile production only from accepted load and dump evidence.", "outcome": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses.", "audience": [ "Mine dispatcher", "Pit supervisor" ], "metrics": [ "Tonnes per operating hour", "Cycle-time variance", "Geofence exceptions", "Unplanned equipment idle time" ], "useCase": { "slug": "mining-haulage-safety", "title": "Move material safely across a changing mine", "href": "/use-cases/mining-haulage-safety" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "delivery": "entitlement-dependent", "href": "/docs/offline-automotive" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish the approved pit, road, and exclusion-zone version", "owner": "Mine plan and safety authority", "implementation": "The mine system of record owns surveyed geometry, blast areas, geotechnical restrictions, road classes, equipment compatibility and operating authorization.", "dataContract": "Mine map package ↔ survey/version, region, signature, compatibility and approval", "contract": { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A truck wakes with the previous pit map", "recovery": "Block the changed operating zone, retain the compatible prior slot for recovery, and require a qualified signed update before dispatch." } }, { "id": "stage-2", "title": "Assign compatible equipment and operators", "owner": "Versioned offline map release", "implementation": "Approved pit, road, zone and configuration manifests move through signed dual-slot qualification and rollback before vehicles activate them.", "dataContract": "Assignment ↔ equipment/operator capability, shift, plan version and expected aggregate version", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Telemetry silence looks like an idle vehicle", "recovery": "Separate freshness from motion state, show last verified evidence, and ask dispatch to reconcile rather than charging productive-time loss automatically." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "offline-automotive", "productName": "Offline & Automotive", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" } ], "journeys": [], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/mining-haulage-safety-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Version one pit and equipment compatibility matrix", "Prove offline package update and rollback on representative hardware" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/mining-haulage-safety-request-response" } ``` ## implementation-recipe · Application flow: Move material safely across a changing mine - Identity: `implementation-recipe:mining-haulage-safety-composed-experience` - Canonical: https://developer.mappls.com/recipes/mining-haulage-safety-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "mining-haulage-safety-composed-experience", "title": "Application flow: Move material safely across a changing mine", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Mining", "scenario": "A blast changes the active pit and closes a ramp midway through a shift. Dispatch must publish the newly approved road and exclusion-zone version, reassign compatible trucks and loaders, guide offline-capable cycles, distinguish telemetry delay from a stopped vehicle, preserve safety interventions, and reconcile production only from accepted load and dump evidence.", "outcome": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses.", "audience": [ "Mine dispatcher", "Pit supervisor", "Haul-truck operator", "Geotechnical engineer" ], "metrics": [ "Tonnes per operating hour", "Cycle-time variance", "Geofence exceptions", "Unplanned equipment idle time" ], "useCase": { "slug": "mining-haulage-safety", "title": "Move material safely across a changing mine", "href": "/use-cases/mining-haulage-safety" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "delivery": "entitlement-dependent", "href": "/docs/offline-automotive" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish the approved pit, road, and exclusion-zone version", "owner": "Mine plan and safety authority", "implementation": "The mine system of record owns surveyed geometry, blast areas, geotechnical restrictions, road classes, equipment compatibility and operating authorization.", "dataContract": "Mine map package ↔ survey/version, region, signature, compatibility and approval", "contract": { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A truck wakes with the previous pit map", "recovery": "Block the changed operating zone, retain the compatible prior slot for recovery, and require a qualified signed update before dispatch." } }, { "id": "stage-2", "title": "Assign compatible equipment and operators", "owner": "Versioned offline map release", "implementation": "Approved pit, road, zone and configuration manifests move through signed dual-slot qualification and rollback before vehicles activate them.", "dataContract": "Assignment ↔ equipment/operator capability, shift, plan version and expected aggregate version", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Telemetry silence looks like an idle vehicle", "recovery": "Separate freshness from motion state, show last verified evidence, and ask dispatch to reconcile rather than charging productive-time loss automatically." } }, { "id": "stage-3", "title": "Guide and observe offline-capable haul cycles", "owner": "Dispatch aggregate", "implementation": "Application state owns shift, equipment/operator assignments, load/dump targets, priorities, expected versions and deliberate cancellation.", "dataContract": "Cycle event ↔ source/content identity, event/receipt time, map version and stage", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Duplicate dump evidence inflates tonnes", "recovery": "Deduplicate by source/content and cycle identity, reject conflicting replays, and reconcile against the authoritative scale record." } }, { "id": "stage-4", "title": "Stop and review safety or geofence exceptions", "owner": "Haul-cycle evidence", "implementation": "InTouch observations and offline commands derive travel, queue, load and dump stages by event time while keeping raw source identity and freshness.", "dataContract": "Safety exception ↔ zone/rule version, accuracy, intervention and reviewer decision", "contract": { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A truck wakes with the previous pit map", "recovery": "Block the changed operating zone, retain the compatible prior slot for recovery, and require a qualified signed update before dispatch." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "method": "GET", "path": "/configurations/categories", "summary": "To get the list of client category in an account", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarms", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "offline-automotive", "productName": "Offline & Automotive", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/mining-haulage-safety-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Version one pit and equipment compatibility matrix", "Prove offline package update and rollback on representative hardware", "Run haul cycles in shadow mode with event-time reconciliation", "Pilot safety exception review and authoritative scale matching" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/mining-haulage-safety-composed-experience" } ``` ## implementation-recipe · Operating journey: Move material safely across a changing mine - Identity: `implementation-recipe:mining-haulage-safety-durable-operation` - Canonical: https://developer.mappls.com/recipes/mining-haulage-safety-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "mining-haulage-safety-durable-operation", "title": "Operating journey: Move material safely across a changing mine", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Mining", "scenario": "A blast changes the active pit and closes a ramp midway through a shift. Dispatch must publish the newly approved road and exclusion-zone version, reassign compatible trucks and loaders, guide offline-capable cycles, distinguish telemetry delay from a stopped vehicle, preserve safety interventions, and reconcile production only from accepted load and dump evidence.", "outcome": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses.", "audience": [ "Mine dispatcher", "Pit supervisor", "Haul-truck operator", "Geotechnical engineer", "Safety and production reviewer" ], "metrics": [ "Tonnes per operating hour", "Cycle-time variance", "Geofence exceptions", "Unplanned equipment idle time" ], "useCase": { "slug": "mining-haulage-safety", "title": "Move material safely across a changing mine", "href": "/use-cases/mining-haulage-safety" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "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" ], "capabilities": [ "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "delivery": "direct", "href": "/docs/intouch-telematics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "offline-automotive", "name": "Offline & Automotive", "summary": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "stateModel": "stateful", "platforms": [ "Automotive", "Linux", "Android" ], "capabilities": [ "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "delivery": "entitlement-dependent", "href": "/docs/offline-automotive" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Publish the approved pit, road, and exclusion-zone version", "owner": "Mine plan and safety authority", "implementation": "The mine system of record owns surveyed geometry, blast areas, geotechnical restrictions, road classes, equipment compatibility and operating authorization.", "dataContract": "Mine map package ↔ survey/version, region, signature, compatibility and approval", "contract": { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A truck wakes with the previous pit map", "recovery": "Block the changed operating zone, retain the compatible prior slot for recovery, and require a qualified signed update before dispatch." } }, { "id": "stage-2", "title": "Assign compatible equipment and operators", "owner": "Versioned offline map release", "implementation": "Approved pit, road, zone and configuration manifests move through signed dual-slot qualification and rollback before vehicles activate them.", "dataContract": "Assignment ↔ equipment/operator capability, shift, plan version and expected aggregate version", "contract": { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "method": "GET", "path": "/device/{deviceId}/events", "summary": "Gets the historical location events of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Telemetry silence looks like an idle vehicle", "recovery": "Separate freshness from motion state, show last verified evidence, and ask dispatch to reconcile rather than charging productive-time loss automatically." } }, { "id": "stage-3", "title": "Guide and observe offline-capable haul cycles", "owner": "Dispatch aggregate", "implementation": "Application state owns shift, equipment/operator assignments, load/dump targets, priorities, expected versions and deliberate cancellation.", "dataContract": "Cycle event ↔ source/content identity, event/receipt time, map version and stage", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Duplicate dump evidence inflates tonnes", "recovery": "Deduplicate by source/content and cycle identity, reject conflicting replays, and reconcile against the authoritative scale record." } }, { "id": "stage-4", "title": "Stop and review safety or geofence exceptions", "owner": "Haul-cycle evidence", "implementation": "InTouch observations and offline commands derive travel, queue, load and dump stages by event time while keeping raw source identity and freshness.", "dataContract": "Safety exception ↔ zone/rule version, accuracy, intervention and reviewer decision", "contract": { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "method": "GET", "path": "/device/{deviceId}/events", "summary": "Gets the historical location events of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "A truck wakes with the previous pit map", "recovery": "Block the changed operating zone, retain the compatible prior slot for recovery, and require a qualified signed update before dispatch." } }, { "id": "stage-5", "title": "Reconcile tonnes, cycles, maintenance, and shift closure", "owner": "Safety and production reconciliation", "implementation": "Geofence or route exceptions stop automatic progress and require human review; tonnes and cycles close only against authoritative scale and dispatch evidence.", "dataContract": "Production result ↔ accepted load/dump identities, tonnes, shift and reconciliation status", "contract": { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "method": "GET", "path": "/device/{deviceId}/events", "summary": "Gets the historical location events of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Telemetry silence looks like an idle vehicle", "recovery": "Separate freshness from motion state, show last verified evidence, and ask dispatch to reconcile rather than charging productive-time loss automatically." } } ], "contracts": [ { "slug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarm/alarmLog/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarm", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.yaml", "sourceFingerprint": "9789c0e53eba5ec44918ca8aade24d4b856aaade5c692109943d1e262fb2545a", "authMode": "bearer", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-clients-to-get-all-your-client-details", "method": "GET", "path": "/clients", "summary": "To get all your client details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Client-Management.json", "sourceFingerprint": "61d557dd95d6c5b53e7beff879c160d64a1a449abd0f1a5ed3b76f6e7ff467ce", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "slug": "intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "method": "GET", "path": "/alarms/alarmlogs/", "summary": "Gets The List Of Alarm Config(s)", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s" }, { "slug": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "method": "GET", "path": "/configurations/categories", "summary": "To get the list of client category in an account", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "slug": "intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "method": "GET", "path": "/alarms", "summary": "This API will get all the alarm configurations for a user.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/alarm.json", "sourceFingerprint": "a8316045f3c25586ee418e1a723122baf0844eaf95d407fc01b9ff1e24af8e1c", "authMode": "bearer", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "slug": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "method": "GET", "path": "/configurations/forms", "summary": "To get the form's Id and their details from your account.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Company-Configurations.json", "sourceFingerprint": "e5d6101b29f0c3ebb3c3191472423b61b80757b15266721c0c72961804669f97", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "slug": "intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "method": "GET", "path": "/device/{deviceId}/events", "summary": "Gets the historical location events of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "intouch-get-device-drive-gets-drive-details-of-a-device", "method": "GET", "path": "/device/drive", "summary": "Gets drive details of a device.", "product": "InTouch", "productSlugs": [ "intouch-telematics" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-intouch-rest-apis/custom/Intouch-Telematics-Swagger-25052020.json", "sourceFingerprint": "54637441ab0c8ea447e121ba33afbc464e714a3dbceec49d4b70dabe9778657f", "authMode": "bearer", "href": "/api-reference/intouch-get-device-drive-gets-drive-details-of-a-device" }, { "slug": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "method": "GET", "path": "/reports/forms/{formId}", "summary": "To get form based check in/out details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "intouch-telematics", "productName": "InTouch Telematics", "normalizedOperations": 53, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "offline-automotive", "productName": "Offline & Automotive", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" }, { "slug": "delivery-eta", "title": "Track a delivery with a trustworthy ETA", "level": "Advanced", "duration": "90 min", "outcome": "A stateful live-delivery journey with recovery and replay.", "href": "/tutorials/delivery-eta" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "connected-fleet-trip", "title": "Connected fleet trip", "summary": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "stateModel": "stateful", "aggregate": "trip", "states": 6, "transitions": 7, "href": "/journeys/connected-fleet-trip" }, { "slug": "fleet-geofence-exception", "title": "Fleet geofence exception", "summary": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "stateModel": "stateful", "aggregate": "geofence case", "states": 6, "transitions": 5, "href": "/journeys/fleet-geofence-exception" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "offline-automotive-release", "title": "Offline automotive release", "summary": "Manufacture, activate, install, operate, update, recover, and retire a navigation runtime and map-data release as one compatible system.", "stateModel": "stateful", "aggregate": "device release", "states": 7, "transitions": 7, "href": "/journeys/offline-automotive-release" }, { "slug": "ios-geofence-draft", "title": "iOS geofence draft and publication boundary", "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.", "stateModel": "hybrid", "aggregate": "geofence draft", "states": 6, "transitions": 6, "href": "/journeys/ios-geofence-draft" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "airside-turnaround-desk", "name": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "difficulty": "Advanced", "declaredTests": 22, "href": "/samples/airside-turnaround-desk", "downloadPath": "/downloads/airside-turnaround-desk.zip", "checksumPath": "/downloads/airside-turnaround-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "primaryOperation": "GET /alarm/alarmLog/", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/mining-haulage-safety-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Version one pit and equipment compatibility matrix", "Prove offline package update and rollback on representative hardware", "Run haul cycles in shadow mode with event-time reconciliation", "Pilot safety exception review and authoritative scale matching", "Expand after geotechnical, functional-safety, workforce, cyber, environmental and emergency-response approval" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/mining-haulage-safety-durable-operation" } ``` ## implementation-recipe · Contract slice: Operate the network from tower to doorstep - Identity: `implementation-recipe:telecom-network-care-request-response` - Canonical: https://developer.mappls.com/recipes/telecom-network-care-request-response - State model: stateless ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "telecom-network-care-request-response", "title": "Contract slice: Operate the network from tower to doorstep", "summary": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "duration": "35–50 min", "mode": "request-response", "stateModel": "stateless", "industry": "Telecommunications", "scenario": "A fibre cut triggers alarms across cabinets and cell sites while customers report outages. Operations must correlate evidence to the affected topology, estimate customer impact, create skill/tool/access-aware repair work, route teams around road disruption, capture splice/test proof, and avoid declaring restoration until network telemetry and customer-impact projections reconcile.", "outcome": "Faster restoration with better prioritization and fewer repeat dispatches.", "audience": [ "Network operations engineer", "Alarm correlator" ], "metrics": [ "Mean time to repair", "Customers restored per action", "Truck rolls", "Repeat alarm rate" ], "useCase": { "slug": "telecom-network-care", "title": "Operate the network from tower to doorstep", "href": "/use-cases/telecom-network-care" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Model towers, links, cabinets, and service areas", "owner": "Network inventory/topology", "implementation": "Owns towers, fibre, links, cabinets, service areas, dependencies, maintenance windows and authoritative asset versions.", "dataContract": "Network asset ↔ topology/inventory version, geometry and owner", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms represent one fibre cut", "recovery": "Preserve every alarm, derive one incident using a versioned topology/correlation rule and allow operator correction." } }, { "id": "stage-2", "title": "Correlate alarms with impacted customers", "owner": "Alarm and impact correlation", "implementation": "Appends source alarms, maps them to exact inventory versions and derives incidents/affected customers under a versioned topology rule.", "dataContract": "Alarm ↔ source/event/content identity, event/receipt time, mapped asset", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Inventory geometry/topology is stale", "recovery": "Mark confidence, route to data-steward correction and never rewrite prior incident lineage after the new version." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" } ], "journeys": [], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/telecom-network-care-request-response#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Bound inputs and outputs", "Abortable timeout", "Retry only safe reads", "Typed empty and denied states", "Safe request correlation", "Credential and URL-log redaction" ], "acceptanceCriteria": [ "Valid, empty, invalid-input, authentication-denied, rate-limited, timed-out, and unavailable outcomes are distinguishable.", "The accepted Mappls or provider identity is retained separately from display text and coordinates.", "Credentials remain in the approved runtime and logs retain only safe request evidence.", "The exact source contract, auth generation, host, entitlement, quota, and region are reviewed before live traffic." ], "rollout": [ "Reconcile inventory layers and data ownership", "Replay historical outages through correlation in shadow mode" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/telecom-network-care-request-response" } ``` ## implementation-recipe · Application flow: Operate the network from tower to doorstep - Identity: `implementation-recipe:telecom-network-care-composed-experience` - Canonical: https://developer.mappls.com/recipes/telecom-network-care-composed-experience - State model: hybrid ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "telecom-network-care-composed-experience", "title": "Application flow: Operate the network from tower to doorstep", "summary": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "duration": "90–120 min", "mode": "composed-experience", "stateModel": "hybrid", "industry": "Telecommunications", "scenario": "A fibre cut triggers alarms across cabinets and cell sites while customers report outages. Operations must correlate evidence to the affected topology, estimate customer impact, create skill/tool/access-aware repair work, route teams around road disruption, capture splice/test proof, and avoid declaring restoration until network telemetry and customer-impact projections reconcile.", "outcome": "Faster restoration with better prioritization and fewer repeat dispatches.", "audience": [ "Network operations engineer", "Alarm correlator", "Field dispatcher", "Technician" ], "metrics": [ "Mean time to repair", "Customers restored per action", "Truck rolls", "Repeat alarm rate" ], "useCase": { "slug": "telecom-network-care", "title": "Operate the network from tower to doorstep", "href": "/use-cases/telecom-network-care" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Model towers, links, cabinets, and service areas", "owner": "Network inventory/topology", "implementation": "Owns towers, fibre, links, cabinets, service areas, dependencies, maintenance windows and authoritative asset versions.", "dataContract": "Network asset ↔ topology/inventory version, geometry and owner", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms represent one fibre cut", "recovery": "Preserve every alarm, derive one incident using a versioned topology/correlation rule and allow operator correction." } }, { "id": "stage-2", "title": "Correlate alarms with impacted customers", "owner": "Alarm and impact correlation", "implementation": "Appends source alarms, maps them to exact inventory versions and derives incidents/affected customers under a versioned topology rule.", "dataContract": "Alarm ↔ source/event/content identity, event/receipt time, mapped asset", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Inventory geometry/topology is stale", "recovery": "Mark confidence, route to data-steward correction and never rewrite prior incident lineage after the new version." } }, { "id": "stage-3", "title": "Create skill-aware repair tasks", "owner": "Repair orchestration", "implementation": "Creates Workmate tasks with skill, tools, access, safety and SLA requirements; eligible teams are ranked by fresh network ETA.", "dataContract": "Impact projection ↔ topology rule/version and affected service IDs/counts", "contract": { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician closes before alarms clear", "recovery": "Keep work proof submitted but incident in reconciliation; query authoritative telemetry and escalate mismatches." } }, { "id": "stage-4", "title": "Navigate and capture repair proof", "owner": "Field evidence", "implementation": "Offline-safe guidance, asset identity, images/readings/test results and reviewer decisions produce an immutable repair timeline.", "dataContract": "Repair ↔ task/provider identity, required capability, evidence and restoration checks", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms represent one fibre cut", "recovery": "Preserve every alarm, derive one incident using a versioned topology/correlation rule and allow operator correction." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "method": "GET", "path": "/reports/movements/{userId}", "summary": "Get users movement details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/telecom-network-care-composed-experience#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Application-owned intent", "Stable cross-capability identity", "Partial-failure fallback", "Cancellation and teardown", "Freshness and provenance", "Quota and latency budget" ], "acceptanceCriteria": [ "Every capability has one owner, bounded input, explicit timeout, and useful unavailable state.", "Application intent survives refresh, back navigation, duplicate callbacks, and partial capability failure.", "Provider identities, source fingerprints, request identities, and application decisions remain attributable.", "Accessibility, privacy, quota, observability, support, and rollback evidence cover the complete user flow." ], "rollout": [ "Reconcile inventory layers and data ownership", "Replay historical outages through correlation in shadow mode", "Pilot skill/ETA dispatch and immutable field proof", "Require multi-source restoration reconciliation for one region" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/telecom-network-care-composed-experience" } ``` ## implementation-recipe · Operating journey: Operate the network from tower to doorstep - Identity: `implementation-recipe:telecom-network-care-durable-operation` - Canonical: https://developer.mappls.com/recipes/telecom-network-care-durable-operation - State model: stateful ```json { "schemaVersion": "mappls.implementation-recipe.v1", "slug": "telecom-network-care-durable-operation", "title": "Operating journey: Operate the network from tower to doorstep", "summary": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "duration": "2–3 hr", "mode": "durable-operation", "stateModel": "stateful", "industry": "Telecommunications", "scenario": "A fibre cut triggers alarms across cabinets and cell sites while customers report outages. Operations must correlate evidence to the affected topology, estimate customer impact, create skill/tool/access-aware repair work, route teams around road disruption, capture splice/test proof, and avoid declaring restoration until network telemetry and customer-impact projections reconcile.", "outcome": "Faster restoration with better prioritization and fewer repeat dispatches.", "audience": [ "Network operations engineer", "Alarm correlator", "Field dispatcher", "Technician", "Customer-impact manager" ], "metrics": [ "Mean time to repair", "Customers restored per action", "Truck rolls", "Repeat alarm rate" ], "useCase": { "slug": "telecom-network-care", "title": "Operate the network from tower to doorstep", "href": "/use-cases/telecom-network-care" }, "products": [ { "slug": "gis-analytics", "name": "GIS & Analytics", "summary": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "stateModel": "hybrid", "platforms": [ "REST", "Web", "Widgets", "MCP" ], "capabilities": [ "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "delivery": "direct", "href": "/docs/gis-analytics" }, { "slug": "workmate", "name": "Workmate", "summary": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "stateModel": "stateful", "platforms": [ "REST", "Android", "Web" ], "capabilities": [ "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "delivery": "direct", "href": "/docs/workmate" }, { "slug": "routes-navigation", "name": "Routes & Navigation", "summary": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "stateModel": "hybrid", "platforms": [ "REST", "Android", "iOS", "Automotive", "Linux", "React Native" ], "capabilities": [ "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "delivery": "direct", "href": "/docs/routes-navigation" }, { "slug": "capture-feedback", "name": "Capture & Feedback", "summary": "On-demand location capture, camera evidence, map feedback, and update workflows.", "stateModel": "hybrid", "platforms": [ "Android", "iOS" ], "capabilities": [ "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "delivery": "entitlement-dependent", "href": "/docs/capture-feedback" } ], "workflow": [ { "id": "stage-1", "title": "Model towers, links, cabinets, and service areas", "owner": "Network inventory/topology", "implementation": "Owns towers, fibre, links, cabinets, service areas, dependencies, maintenance windows and authoritative asset versions.", "dataContract": "Network asset ↔ topology/inventory version, geometry and owner", "contract": { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 1 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms represent one fibre cut", "recovery": "Preserve every alarm, derive one incident using a versioned topology/correlation rule and allow operator correction." } }, { "id": "stage-2", "title": "Correlate alarms with impacted customers", "owner": "Alarm and impact correlation", "implementation": "Appends source alarms, maps them to exact inventory versions and derives incidents/affected customers under a versioned topology rule.", "dataContract": "Alarm ↔ source/event/content identity, event/receipt time, mapped asset", "contract": { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 2 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Inventory geometry/topology is stale", "recovery": "Mark confidence, route to data-steward correction and never rewrite prior incident lineage after the new version." } }, { "id": "stage-3", "title": "Create skill-aware repair tasks", "owner": "Repair orchestration", "implementation": "Creates Workmate tasks with skill, tools, access, safety and SLA requirements; eligible teams are ranked by fresh network ETA.", "dataContract": "Impact projection ↔ topology rule/version and affected service IDs/counts", "contract": { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 3 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Technician closes before alarms clear", "recovery": "Keep work proof submitted but incident in reconciliation; query authoritative telemetry and escalate mismatches." } }, { "id": "stage-4", "title": "Navigate and capture repair proof", "owner": "Field evidence", "implementation": "Offline-safe guidance, asset identity, images/readings/test results and reviewer decisions produce an immutable repair timeline.", "dataContract": "Repair ↔ task/provider identity, required capability, evidence and restoration checks", "contract": { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, "contractRole": "stage-operation", "contractBoundary": "This normalized operation matches the stage intent and remains subject to its source, lifecycle, authentication, entitlement, host, and regional gates.", "proof": "Record stage 4 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Many alarms represent one fibre cut", "recovery": "Preserve every alarm, derive one incident using a versioned topology/correlation rule and allow operator correction." } }, { "id": "stage-5", "title": "Analyze chronic failure clusters", "owner": "Restoration reconciliation", "implementation": "Requires network alarm clearance, task proof and impact recovery before closure; chronic clusters derive from versioned evidence.", "dataContract": "Network asset ↔ topology/inventory version, geometry and owner", "contract": { "slug": "workmate-put-tasks-taskid-to-update-the-task-description-status", "method": "PUT", "path": "/tasks/{taskId}", "summary": "To update the task description & status.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "transition", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status" }, "contractRole": "supporting-operation", "contractBoundary": "This is a supporting operation from the selected product stack, not proof of an exact provider contract for this stage. Resolve the stage through its product source or adapter boundary before live implementation.", "proof": "Record stage 5 with the application identity, source fingerprint, request or aggregate identity, timestamp, and observable outcome.", "failure": { "scenario": "Inventory geometry/topology is stale", "recovery": "Mark confidence, route to data-steward correction and never rewrite prior incident lineage after the new version." } } ], "contracts": [ { "slug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "method": "GET", "path": "/tasks", "summary": "To get the list of tasks and their details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details" }, { "slug": "core-location-get-rest-key-resources-profile-geopositions-routing-api", "method": "GET", "path": "/{REST_KEY}/{resources}/{profile}/{geopositions}", "summary": "Routing API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routing.yml", "sourceFingerprint": "efefba560f229b668f0c6025b18c9d37b34e1e4582023b2e9d1149c6f3e34bfa", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api" }, { "slug": "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "method": "GET", "path": "/tasks/{taskId}", "summary": "To get the task details for the given task id.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id" }, { "slug": "core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/driving/{geopositions}", "summary": "Routing API with driving profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingDriving.yml", "sourceFingerprint": "5134fc7e305ab1b69eed37d863eba09a00e66d5b56be03c4d8a873277ee7c1b0", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile" }, { "slug": "workmate-get-reports-movements-userid-get-users-movement-details", "method": "GET", "path": "/reports/movements/{userId}", "summary": "Get users movement details", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "slug": "core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/trucking/{geopositions}", "summary": "Routing API with trucking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingTrucking.yml", "sourceFingerprint": "2685329864843d46d1b427f3248758663730e771232253e94028a54e8c4e510a", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile" }, { "slug": "workmate-post-tasks-to-create-new-task", "method": "POST", "path": "/tasks", "summary": "To create new Task", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "command", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-post-tasks-to-create-new-task" }, { "slug": "core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/biking/{geopositions}", "summary": "Routing API with biking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingBiking.yml", "sourceFingerprint": "4db4c71b1f52c6349ebb4018feb139069eed8fddc1c4ca977135570de36d6885", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile" }, { "slug": "workmate-put-tasks-taskid-to-update-the-task-description-status", "method": "PUT", "path": "/tasks/{taskId}", "summary": "To update the task description & status.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "transition", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Task-Management.json", "sourceFingerprint": "0e978659200a849331e1bf5dca4d90ff915eb72100ef85155b046cd98b007365", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status" }, { "slug": "core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "method": "GET", "path": "/{REST_KEY}/{resources}/walking/{geopositions}", "summary": "Routing API with walking profile", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/routingWalking.yml", "sourceFingerprint": "dd614ed88ba528548b43633bcdf89d01b25ae8d906e32c00ab61fa3fe5b76d63", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile" }, { "slug": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "method": "GET", "path": "/reports/attendances", "summary": "Get users attendance details with travelled distance.", "product": "Workmate", "productSlugs": [ "workmate" ], "stateModel": "stateful", "journeyRole": "observe", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-workmate-apis/custom/Reports.json", "sourceFingerprint": "901e189918998963dadf539e83def7723571ac3dc1533fe9d89590bac178b33f", "authMode": "oauth2-bearer", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "slug": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "method": "GET", "path": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates}", "summary": "Distance Matrix Predictive ETA API", "product": "Core Location", "productSlugs": [ "routes-navigation" ], "stateModel": "stateless", "journeyRole": "request-response", "contractStatus": "legacy-source", "sourceFile": "contenthub/dochub/mapmyindia-rest-api/docs/custom/predictiveETA.yml", "sourceFingerprint": "aad00df644a08aeaa60cbfd3065f11c0a6d86d6cb410c5239d47b6cd3fbcd70e", "authMode": "not-declared", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" } ], "contractCoverage": [ { "productSlug": "gis-analytics", "productName": "GIS & Analytics", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." }, { "productSlug": "workmate", "productName": "Workmate", "normalizedOperations": 13, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "routes-navigation", "productName": "Routes & Navigation", "normalizedOperations": 11, "status": "normalized-contracts", "boundary": "Exact normalized operations are linked below; account contract and entitlement still require validation." }, { "productSlug": "capture-feedback", "productName": "Capture & Feedback", "normalizedOperations": 0, "status": "reference-only", "boundary": "No exact normalized REST operation is present in the captured contract corpus for this product. Use its source guides, SDK/widget/distribution surface, and entitlement process without substituting an adjacent API." } ], "tutorials": [ { "slug": "ios-sdk-production-readiness", "title": "Qualify an iOS Mappls release", "level": "Advanced", "duration": "2 hr", "outcome": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.", "href": "/tutorials/ios-sdk-production-readiness" }, { "slug": "react-native-native-parity", "title": "Qualify React Native native parity", "level": "Advanced", "duration": "100 min", "outcome": "One JavaScript contract backed by independently qualified Android and iOS behavior.", "href": "/tutorials/react-native-native-parity" }, { "slug": "webhook-reliability", "title": "Consume Mappls events exactly once in effect", "level": "Advanced", "duration": "55 min", "outcome": "A production webhook ingestion pipeline.", "href": "/tutorials/webhook-reliability" }, { "slug": "workmate-proof-review", "title": "Build proof review and rework for field jobs", "level": "Advanced", "duration": "90 min", "outcome": "An auditable proof workflow that cannot silently overwrite rejected evidence.", "href": "/tutorials/workmate-proof-review" }, { "slug": "flutter-production-lifecycle", "title": "Production-harden a Flutter location feature", "level": "Advanced", "duration": "90 min", "outcome": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal.", "href": "/tutorials/flutter-production-lifecycle" }, { "slug": "widget-host-production", "title": "Operate widgets as untrusted lifecycle surfaces", "level": "Advanced", "duration": "85 min", "outcome": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback.", "href": "/tutorials/widget-host-production" } ], "journeys": [ { "slug": "field-service-task", "title": "Field-service task lifecycle", "summary": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "stateModel": "stateful", "aggregate": "task", "states": 8, "transitions": 8, "href": "/journeys/field-service-task" }, { "slug": "emergency-incident-response", "title": "Coordinated incident response", "summary": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "stateModel": "stateful", "aggregate": "incident", "states": 7, "transitions": 8, "href": "/journeys/emergency-incident-response" }, { "slug": "navigation-session", "title": "Recoverable navigation session", "summary": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "stateModel": "hybrid", "aggregate": "navigation session", "states": 6, "transitions": 6, "href": "/journeys/navigation-session" }, { "slug": "governed-spatial-analysis", "title": "Governed spatial analysis", "summary": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "stateModel": "hybrid", "aggregate": "analysis run", "states": 7, "transitions": 6, "href": "/journeys/governed-spatial-analysis" }, { "slug": "durable-weekend-itinerary", "title": "Durable multi-stop itinerary", "summary": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "stateModel": "hybrid", "aggregate": "trip itinerary", "states": 6, "transitions": 9, "href": "/journeys/durable-weekend-itinerary" }, { "slug": "ios-direction-planning-handoff", "title": "iOS direction planning and navigation handoff", "summary": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "stateModel": "hybrid", "aggregate": "route planning session", "states": 8, "transitions": 8, "href": "/journeys/ios-direction-planning-handoff" }, { "slug": "ios-feedback-report-review", "title": "iOS feedback report and review", "summary": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "stateModel": "hybrid", "aggregate": "feedback report", "states": 9, "transitions": 9, "href": "/journeys/ios-feedback-report-review" }, { "slug": "location-capture-evidence", "title": "Consent-bound location capture evidence", "summary": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "stateModel": "hybrid", "aggregate": "location capture attempt", "states": 8, "transitions": 9, "href": "/journeys/location-capture-evidence" }, { "slug": "place-contribution-publication", "title": "Governed place contribution and publication", "summary": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "stateModel": "stateful", "aggregate": "place contribution", "states": 7, "transitions": 8, "href": "/journeys/place-contribution-publication" } ], "capstone": { "slug": "grid-restoration-desk", "name": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "difficulty": "Advanced", "declaredTests": 14, "href": "/samples/grid-restoration-desk", "downloadPath": "/downloads/grid-restoration-desk.zip", "checksumPath": "/downloads/grid-restoration-desk.zip.sha256" }, "codeLab": { "primaryOperationSlug": "workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "primaryOperation": "GET /tasks", "languages": [ "cURL", "JavaScript", "Python", "Java", "C#", "Go", "PHP", "Ruby" ], "generatedSamples": 8, "href": "/recipes/telecom-network-care-durable-operation#code-lab", "sandboxScenarios": [ "success", "empty", "validation-error", "auth-error", "rate-limit", "server-error" ] }, "reliabilityContract": [ "Idempotent commands", "Optimistic aggregate versions", "Event and receipt time", "Transactional outbox", "Unknown-outcome reconciliation", "Independent human decisions", "Restart recovery", "Immutable audit evidence" ], "acceptanceCriteria": [ "Every aggregate has an invariant, expected version, stable command identity, and attributable actor.", "Duplicate, late, reordered, invalid, stale, timed-out, and restarted execution preserve one durable truth.", "Unknown provider outcomes reconcile by original identity before replay or compensation.", "Terminal decisions, human review, audit, outbox delivery, privacy, retention, and rollback remain independently evidenced." ], "rollout": [ "Reconcile inventory layers and data ownership", "Replay historical outages through correlation in shadow mode", "Pilot skill/ETA dispatch and immutable field proof", "Require multi-source restoration reconciliation for one region", "Scale after NOC runbooks, topology quality, safety, workforce, customer-communication and failover drills" ], "productionGates": [ "Confirm current packages, hosts, auth generation, quota, region, and terms with the issued account.", "Keep server credentials and privileged exchanges outside browser, mobile, embedded, and model context.", "Preserve provider identity, source fingerprint, event time, receipt time, and business aggregate version.", "Make permission denial, offline operation, timeout, quota, cancellation, and teardown complete product states.", "Require attributable approval for dispatch, access, closure, evidence decisions, and destructive changes.", "Run the release path on representative devices, networks, data volumes, and regional entitlements." ], "evidenceBoundary": "This recipe composes source-derived contracts, application architecture, fixtures, and maintained learning evidence. It does not prove package availability, provider payload shape, account entitlement, regional behavior, production compatibility, or release approval.", "planningProviderCredentialsAccepted": false, "planningProviderPayloadsAccepted": false, "planningProviderNetworkCalls": 0, "writesExposed": false, "sharePath": "/recipes/telecom-network-care-durable-operation" } ``` ## source-launchpad · Mappls API Organization Guide: source launchpad - Identity: `source-launchpad:github` - Canonical: https://developer.mappls.com/launchpads/github - State model: stateless ```json { "slug": "github", "sourceGuideSlug": "github", "title": "Mappls API Organization Guide: source launchpad", "repositoryName": ".github", "kind": "Guide", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Unspecified" ], "productAreas": [ "maps" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "862c91224d2b3e3fd8d3bed84fed9497c507bdfb33c46136c065828715f3345f", "sourceUrl": "https://github.com/mappls-api/.github", "readmeUrl": "https://github.com/mappls-api/.github/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 862c91224d2b3e3fd8d3bed8. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `github` and fingerprint `862c91224d2b3e3fd8d3bed8` recorded in the project", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for .github. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `github` with fingerprint `862c91224d2b3e3fd8d3bed84fed9497c507bdfb33c46136c065828715f3345f`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 862c91224d2b3e3fd8d3bed8. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep guide symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"github\",\n fingerprint: \"862c91224d2b3e3fd8d3bed84fed9497c507bdfb33c46136c065828715f3345f\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"github\"\n fingerprint: str = \"862c91224d2b3e3fd8d3bed84fed9497c507bdfb33c46136c065828715f3345f\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": ".github evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [], "starterSlug": "github", "downloadPath": "/downloads/source-starters/github.zip" } ``` ## source-launchpad · Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web: source launchpad - Identity: `source-launchpad:mapmyindia-angular-sample-websdk-rest` - Canonical: https://developer.mappls.com/launchpads/mapmyindia-angular-sample-websdk-rest - State model: stateless ```json { "slug": "mapmyindia-angular-sample-websdk-rest", "sourceGuideSlug": "mapmyindia-angular-sample-websdk-rest", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web: source launchpad", "repositoryName": "mapmyindia-angular-sample-webSDK-REST", "kind": "Sample", "maturity": "sample", "stateModel": "stateless", "readiness": "sample-learning", "platforms": [ "Web", "REST" ], "productAreas": [ "maps", "search-places", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed sample seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "4280593e3c2f3278656e1952146c78619241768e765947d176479fae11506990", "sourceUrl": "https://github.com/mappls-api/mapmyindia-angular-sample-webSDK-REST", "readmeUrl": "https://github.com/mappls-api/mapmyindia-angular-sample-webSDK-REST/blob/master/README.md", "evidenceBoundary": "This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 4280593e3c2f3278656e1952. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mapmyindia-angular-sample-websdk-rest` and fingerprint `4280593e3c2f3278656e1952` recorded in the project", "A browser application and an allowed development origin", "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “2. Create file name of proxy.conf.json in your project and put given c”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mapmyindia-angular-sample-webSDK-REST. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mapmyindia-angular-sample-websdk-rest` with fingerprint `4280593e3c2f3278656e1952146c78619241768e765947d176479fae11506990`." }, { "title": "Resolve the release contract", "instruction": "This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 4280593e3c2f3278656e1952. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sample symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “2. Create file name of proxy.conf.json in your project and put given c” (JSON). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "JSON", "label": "2. Create file name of proxy.conf.json in your project and put given c", "code": "{\n \"/api/*\": \n {\n \"target\": \"https://outpost.mapmyindia.com\",\n \"secure\": false,\n \"logLevel\": \"debug\"\n }\n}" }, { "language": "JSON", "label": "3. Then add line \"proxyConfig\": \"proxy.conf.json\" in angular.json file", "code": "\"serve\": {\n \"builder\": \"@angular-devkit/build-angular:dev-server\",\n \"options\": {\n \"browserTarget\": \"DemoApp:build\",\n \"proxyConfig\": \"proxy.conf.json\"\n },\n \"configurations\":{\n \"production\": {\n \"browserTarget\": \"DemoApp:build:production\"\n }\n }\n}" }, { "language": "JSON", "label": "4. Then replace the line \"start\":\"\" to \"start\": \"ng serve --port 4200 ", "code": "\"scripts\": {\n \"ng\": \"ng\",\n \"start\": \"ng serve --port 4200 --proxy-config proxy.conf.json\",\n \"build\": \"ng build\",\n \"test\": \"ng test\",\n \"lint\": \"ng lint\",\n \"e2e\": \"ng e2e\"\n }" }, { "language": "JavaScript", "label": "Generating Token using ClientId & ClientSecret", "code": "getToken() {\n let promise = new Promise((resolve, reject) => {\n let apiURL = this.securityURL;\n this.httpClient.post(apiURL, null)\n .toPromise()\n .then(\n res => { // Success\n resolve(res);\n }\n );\n });\n return promise;\n }" }, { "language": "JavaScript", "label": "6. Call OAuth API (AutoSuggest, Nearby, Geocode, TextSearch), write gi", "code": "import { Component, OnInit } from '@angular/core';\n import { DemoService } from './app.service';\n declare var MapmyIndia: any; // Declaring Mapmyindia\n declare var L: any; // Declaring L\n @Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n })\n export class AppComponent implements OnInit {\n title = 'DemoApp';\n public map : any; // Initializing Map Variable\n constructor(private demoService: DemoService) {\n }\n private token: string;\n ngOnInit(): void {\n // Creating Map\n this.map = new MapmyIndia.Map('map',\n {\n center: [28.04, 78.2],\n zoom: 12\n });\n\n this.demoService.getToken().then((data) => {\n this.token = data['access_token'];\n });\n }\n auto() {\n this.demoService.autoSuggest(this.token).then((data) => {\n console.log(data);\n });\n }\n nearby() {\n this.demoService.nearby(this.token).then((data) => {\n console.log(data);\n });\n }\n geocode(){\n this.demoService.geocode(this.token).then((data) => {\n console.log(data);\n });\n }\n textsearch(){\n this.demoService.textsearch(this.token).then((data) => {\n console.log(data);\n });\n }\n }" }, { "language": "HTML", "label": "7. For showing response using button, write given code in app.componen", "code": "
\n

\n Welcome to {{ title }}!\n

\n

//div for map\n
\n

REST API

\n \n \n \n \n
" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mapmyindia-angular-sample-websdk-rest\",\n fingerprint: \"4280593e3c2f3278656e1952146c78619241768e765947d176479fae11506990\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mapmyindia-angular-sample-websdk-rest\"\n fingerprint: str = \"4280593e3c2f3278656e1952146c78619241768e765947d176479fae11506990\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mapmyindia-angular-sample-webSDK-REST evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "first-web-map", "address-autocomplete", "route-preview", "nearby-discovery", "fleet-geofences" ], "starterSlug": "mapmyindia-angular-sample-websdk-rest", "downloadPath": "/downloads/source-starters/mapmyindia-angular-sample-websdk-rest.zip" } ``` ## source-launchpad · MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS: source launchpad - Identity: `source-launchpad:mapmyindia-purejs-sample-websdk-rest` - Canonical: https://developer.mappls.com/launchpads/mapmyindia-purejs-sample-websdk-rest - State model: stateless ```json { "slug": "mapmyindia-purejs-sample-websdk-rest", "sourceGuideSlug": "mapmyindia-purejs-sample-websdk-rest", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS: source launchpad", "repositoryName": "mapmyindia-pureJS-sample-webSDK-REST", "kind": "Sample", "maturity": "sample", "stateModel": "stateless", "readiness": "sample-learning", "platforms": [ "Web", "REST" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed sample seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "7648d47274423632e0d612ff15355d0dd80c6de1227a6605682f1874d104fdde", "sourceUrl": "https://github.com/mappls-api/mapmyindia-pureJS-sample-webSDK-REST", "readmeUrl": "https://github.com/mappls-api/mapmyindia-pureJS-sample-webSDK-REST/blob/master/README.md", "evidenceBoundary": "This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 7648d47274423632e0d612ff. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mapmyindia-purejs-sample-websdk-rest` and fingerprint `7648d47274423632e0d612ff` recorded in the project", "A browser application and an allowed development origin", "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Creating project in Pure Javascript for MapmyIndia REST APIs & Interac”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mapmyindia-pureJS-sample-webSDK-REST. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mapmyindia-purejs-sample-websdk-rest` with fingerprint `7648d47274423632e0d612ff15355d0dd80c6de1227a6605682f1874d104fdde`." }, { "title": "Resolve the release contract", "instruction": "This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 7648d47274423632e0d612ff. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sample symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Creating project in Pure Javascript for MapmyIndia REST APIs & Interac” (HTML). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "HTML", "label": "Creating project in Pure Javascript for MapmyIndia REST APIs & Interac", "code": "\n \n \n \n // Interactive Map JS\n \n // Map Style \n \n \n \n

// div for map\n \n \n \n \n \n \n \n \n \n " } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mapmyindia-purejs-sample-websdk-rest\",\n fingerprint: \"7648d47274423632e0d612ff15355d0dd80c6de1227a6605682f1874d104fdde\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mapmyindia-purejs-sample-websdk-rest\"\n fingerprint: str = \"7648d47274423632e0d612ff15355d0dd80c6de1227a6605682f1874d104fdde\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mapmyindia-pureJS-sample-webSDK-REST evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "first-web-map", "address-autocomplete", "route-preview", "nearby-discovery", "delivery-eta" ], "starterSlug": "mapmyindia-purejs-sample-websdk-rest", "downloadPath": "/downloads/source-starters/mapmyindia-purejs-sample-websdk-rest.zip" } ``` ## source-launchpad · MAPPLS AI / ML APIs: source launchpad - Identity: `source-launchpad:mappls-ai-apis` - Canonical: https://developer.mappls.com/launchpads/mappls-ai-apis - State model: stateless ```json { "slug": "mappls-ai-apis", "sourceGuideSlug": "mappls-ai-apis", "title": "MAPPLS AI / ML APIs: source launchpad", "repositoryName": "mappls-ai-apis", "kind": "REST API", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "REST", "AI/MCP" ], "productAreas": [ "maps", "search-places", "workforce", "gis-analytics", "ai-vision", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "80cfbc9b9c7ce4b4590d05e13717ec579353cf16c1b9315739be1f2b4caacc4e", "sourceUrl": "https://github.com/mappls-api/mappls-ai-apis", "readmeUrl": "https://github.com/mappls-api/mappls-ai-apis/blob/master/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 80cfbc9b9c7ce4b4590d05e1. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-ai-apis` and fingerprint `80cfbc9b9c7ce4b4590d05e1` recorded in the project", "A trusted backend or API client capable of HTTPS requests", "The corresponding product entitlement enabled for the developer application", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-ai-apis. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-ai-apis` with fingerprint `80cfbc9b9c7ce4b4590d05e13717ec579353cf16c1b9315739be1f2b4caacc4e`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 80cfbc9b9c7ce4b4590d05e1. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep rest api symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-ai-apis\",\n fingerprint: \"80cfbc9b9c7ce4b4590d05e13717ec579353cf16c1b9315739be1f2b4caacc4e\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mappls-ai-apis\"\n fingerprint: str = \"80cfbc9b9c7ce4b4590d05e13717ec579353cf16c1b9315739be1f2b4caacc4e\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mappls-ai-apis evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "address-autocomplete", "route-preview", "workmate-task-lifecycle", "fleet-geofences", "gis-site-selection" ], "starterSlug": "mappls-ai-apis", "downloadPath": "/downloads/source-starters/mappls-ai-apis.zip" } ``` ## source-launchpad · Mappls Vector Map Android SDK JetPack Compose: source launchpad - Identity: `source-launchpad:mappls-android-compose-demo` - Canonical: https://developer.mappls.com/launchpads/mappls-android-compose-demo - State model: stateless ```json { "slug": "mappls-android-compose-demo", "sourceGuideSlug": "mappls-android-compose-demo", "title": "Mappls Vector Map Android SDK JetPack Compose: source launchpad", "repositoryName": "mappls-android-compose-demo", "kind": "Sample", "maturity": "sample", "stateModel": "stateless", "readiness": "sample-learning", "platforms": [ "Android" ], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "duration": "25 minutes", "outcome": "Run one reviewed sample seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "37562302b0fcd2d2115c705f2ea3f943594b266599b2e42118ce6e0a091b16a8", "sourceUrl": "https://github.com/mappls-api/mappls-android-compose-demo", "readmeUrl": "https://github.com/mappls-api/mappls-android-compose-demo/blob/main/README.md", "evidenceBoundary": "This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 37562302b0fcd2d2115c705f. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-android-compose-demo` and fingerprint `37562302b0fcd2d2115c705f` recorded in the project", "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Setup your project”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-android-compose-demo. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-android-compose-demo` with fingerprint `37562302b0fcd2d2115c705f2ea3f943594b266599b2e42118ce6e0a091b16a8`." }, { "title": "Resolve the release contract", "instruction": "This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 37562302b0fcd2d2115c705f. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sample symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Setup your project” (Groovy). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Groovy", "label": "Setup your project", "code": "allprojects {\nrepositories {\nmaven {\n url 'https://maven.mappls.com/repository/mappls/'\n}\n}\n}" }, { "language": "Groovy", "label": "Setup your project", "code": "dependencyResolutionManagement {\n// repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\nrepositories {\n google()\n mavenCentral()\n maven {\n url 'https://maven.mappls.com/repository/mappls/'\n }\n}\n}" }, { "language": "Groovy", "label": "Setup your project", "code": "implementation 'com.mappls.sdk:mappls-android-sdk:8.x.x'\nimplementation 'com.mappls.sdk:annotation-plugin:1.x.x'" }, { "language": "XML", "label": "Setup your project", "code": "\n" }, { "language": "Groovy", "label": "Add Java 8 Support to the project", "code": "compileOptions {\nsourceCompatibility 1.8\ntargetCompatibility 1.8\n}" }, { "language": "Kotlin", "label": "Add your API keys to the SDK", "code": "MapplsAccountManager.getInstance().restAPIKey = \"YOUR_RESTAPIKEY\"\nMapplsAccountManager.getInstance().mapSDKKey = \"SET_MAP_KEY\"\nMapplsAccountManager.getInstance().atlasClientId = \"YOUR_ATLASCLIENTID\"\nMapplsAccountManager.getInstance().atlasClientSecret = \"YOUR_ATLASCLIENTSECRET\"\nMappls.getInstance(applicationContext)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-android-compose-demo\",\n fingerprint: \"37562302b0fcd2d2115c705f2ea3f943594b266599b2e42118ce6e0a091b16a8\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "kotlin", "label": "Kotlin release guard", "code": "// Application-owned evidence; add SDK symbols only after release selection.\ndata class SourceContract(val slug: String, val fingerprint: String, val providerCallsEnabled: Boolean = false)\nval source = SourceContract(\"mappls-android-compose-demo\", \"37562302b0fcd2d2115c705f2ea3f943594b266599b2e42118ce6e0a091b16a8\")\n\nsealed interface BoundaryResult {\n data class Ready(val value: T, val sourceFingerprint: String) : BoundaryResult\n data class Blocked(val reason: String, val retryable: Boolean) : BoundaryResult\n}\n\nfun requireSelectedRelease() {\n check(source.providerCallsEnabled) { \"selection_required\" }\n}" } ], "workshop": { "title": "mappls-android-compose-demo evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "android-map", "workmate-proof-review" ], "starterSlug": "mappls-android-compose-demo", "downloadPath": "/downloads/source-starters/mappls-android-compose-demo.zip" } ``` ## source-launchpad · Mappls Android SDK: source launchpad - Identity: `source-launchpad:mappls-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-android-sdk - State model: stateless ```json { "slug": "mappls-android-sdk", "sourceGuideSlug": "mappls-android-sdk", "title": "Mappls Android SDK: source launchpad", "repositoryName": "mappls-android-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Android" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0", "sourceUrl": "https://github.com/mappls-api/mappls-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-android-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 2ccc51932d1b333b3561336c. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-android-sdk` and fingerprint `2ccc51932d1b333b3561336c` recorded in the project", "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-android-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-android-sdk` with fingerprint `2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 2ccc51932d1b333b3561336c. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-android-sdk\",\n fingerprint: \"2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "kotlin", "label": "Kotlin release guard", "code": "// Application-owned evidence; add SDK symbols only after release selection.\ndata class SourceContract(val slug: String, val fingerprint: String, val providerCallsEnabled: Boolean = false)\nval source = SourceContract(\"mappls-android-sdk\", \"2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0\")\n\nsealed interface BoundaryResult {\n data class Ready(val value: T, val sourceFingerprint: String) : BoundaryResult\n data class Blocked(val reason: String, val retryable: Boolean) : BoundaryResult\n}\n\nfun requireSelectedRelease() {\n check(source.providerCallsEnabled) { \"selection_required\" }\n}" } ], "workshop": { "title": "mappls-android-sdk evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "android-map", "workmate-proof-review" ], "starterSlug": "mappls-android-sdk", "downloadPath": "/downloads/source-starters/mappls-android-sdk.zip" } ``` ## source-launchpad · Mappls Annotation Extension for iOS: source launchpad - Identity: `source-launchpad:mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-annotation-extension-ios-distribution - State model: stateless ```json { "slug": "mappls-annotation-extension-ios-distribution", "sourceGuideSlug": "mappls-annotation-extension-ios-distribution", "title": "Mappls Annotation Extension for iOS: source launchpad", "repositoryName": "mappls-annotation-extension-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54", "sourceUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dcb2a91e8716dd659728ce45. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-annotation-extension-ios-distribution` and fingerprint `dcb2a91e8716dd659728ce45` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Circles (MGLCircleStyleAnnotation)”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-annotation-extension-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-annotation-extension-ios-distribution` with fingerprint `dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dcb2a91e8716dd659728ce45. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Circles (MGLCircleStyleAnnotation)” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(centerMapplsPin: \"MMI000\", radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circleAnnotationController.add(circle)\n}" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circleGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"circle-radius\\\": \\\"50\\\",\\\"circle-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"circle-blur\\\": \\\"0\\\",\\\"circle-opacity\\\": \\\"0.7\\\",\\\"circle-stroke-width\\\": \\\"5\\\",\\\"circle-stroke-color\\\": \\\"rgba(0, 255, 0, 1)\\\",\\\"circle-stroke-opacity\\\": \\\"0.6\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [174.70458984375,-39.588757276965445]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n circleAnnotationController.create(fromGeoJSON: circleGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription) \n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else { \n print(\"No result found\") \n }\n }\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n \n let lineCoordinates = [\n CLLocationCoordinate2D(latitude: 59, longitude: 18),\n CLLocationCoordinate2D(latitude: 60, longitude: 20)\n ]\n \n let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))\n line.color = .purple\n lineAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "let lineGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"line-join\\\": \\\"bevel\\\",\\\"line-opacity\\\": \\\"0.7\\\",\\\"line-color\\\":\\\"rgba(0, 255, 0, 1)\\\",\\\"line-width\\\": \\\"10\\\",\\\"line-gap-width\\\": \\\"1\\\",\\\"line-offset\\\": \\\"2\\\",\\\"line-blur\\\": \\\"0\\\"},\\\"geometry\\\": {\\\"type\\\": \\\"LineString\\\",\\\"coordinates\\\": [[168.5302734375,-46.377254205100265],[169.0576171875,-46.36209301204983],[169.65087890625,-46.13417004624325],[170.5078125,-45.782848351976746],[170.68359375,-45.213003555993964],[170.79345703124997,-44.840290651397986],[171.2109375,-44.16644466445859],[171.84814453125,-43.80281871904721],[172.59521484375,-43.309191099856854],[172.83691406249997,-42.81152174509788],[173.38623046875,-42.342305278572816]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n\n lineAnnotationController.create(fromGeoJSON: lineGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-annotation-extension-ios-distribution\",\n fingerprint: \"dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-annotation-extension-ios-distribution\"\n let fingerprint = \"dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-annotation-extension-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-annotation-extension-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-annotation-extension-ios-distribution.zip" } ``` ## source-launchpad · Mappls Annotation Extension for iOS: source launchpad - Identity: `source-launchpad:mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-annotation-extension-ios-distribution-base - State model: stateless ```json { "slug": "mappls-annotation-extension-ios-distribution-base", "sourceGuideSlug": "mappls-annotation-extension-ios-distribution-base", "title": "Mappls Annotation Extension for iOS: source launchpad", "repositoryName": "mappls-annotation-extension-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54", "sourceUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dcb2a91e8716dd659728ce45. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-annotation-extension-ios-distribution-base` and fingerprint `dcb2a91e8716dd659728ce45` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Circles (MGLCircleStyleAnnotation)”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-annotation-extension-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-annotation-extension-ios-distribution-base` with fingerprint `dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dcb2a91e8716dd659728ce45. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Circles (MGLCircleStyleAnnotation)” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circle = MGLCircleStyleAnnotation(centerMapplsPin: \"MMI000\", radius: 3.0, color: .blue)" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)\n circle.opacity = 0.5\n circleAnnotationController.add(circle)\n}" }, { "language": "Swift", "label": "Circles (MGLCircleStyleAnnotation)", "code": "let circleGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"circle-radius\\\": \\\"50\\\",\\\"circle-color\\\": \\\"rgba(0, 0, 255, 1)\\\",\\\"circle-blur\\\": \\\"0\\\",\\\"circle-opacity\\\": \\\"0.7\\\",\\\"circle-stroke-width\\\": \\\"5\\\",\\\"circle-stroke-color\\\": \\\"rgba(0, 255, 0, 1)\\\",\\\"circle-stroke-opacity\\\": \\\"0.6\\\",\\\"is-draggable\\\": true},\\\"geometry\\\": {\\\"type\\\": \\\"Point\\\",\\\"coordinates\\\": [174.70458984375,-39.588757276965445]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)\n circleAnnotationController.create(fromGeoJSON: circleGeoJSON) { (annotations, error) in\n if let error = error { \n print(error.localizedDescription) \n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else { \n print(\"No result found\") \n }\n }\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n \n let lineCoordinates = [\n CLLocationCoordinate2D(latitude: 59, longitude: 18),\n CLLocationCoordinate2D(latitude: 60, longitude: 20)\n ]\n \n let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))\n line.color = .purple\n lineAnnotationController.add(line)\n}" }, { "language": "Swift", "label": "Lines (MGLLineStyleAnnotation)", "code": "let lineGeoJSON = \"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"type\\\": \\\"Feature\\\",\\\"properties\\\": {\\\"line-join\\\": \\\"bevel\\\",\\\"line-opacity\\\": \\\"0.7\\\",\\\"line-color\\\":\\\"rgba(0, 255, 0, 1)\\\",\\\"line-width\\\": \\\"10\\\",\\\"line-gap-width\\\": \\\"1\\\",\\\"line-offset\\\": \\\"2\\\",\\\"line-blur\\\": \\\"0\\\"},\\\"geometry\\\": {\\\"type\\\": \\\"LineString\\\",\\\"coordinates\\\": [[168.5302734375,-46.377254205100265],[169.0576171875,-46.36209301204983],[169.65087890625,-46.13417004624325],[170.5078125,-45.782848351976746],[170.68359375,-45.213003555993964],[170.79345703124997,-44.840290651397986],[171.2109375,-44.16644466445859],[171.84814453125,-43.80281871904721],[172.59521484375,-43.309191099856854],[172.83691406249997,-42.81152174509788],[173.38623046875,-42.342305278572816]]}}]}\"\n\nfunc mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {\n let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)\n\n lineAnnotationController.create(fromGeoJSON: lineGeoJSON) { (annotations, error) in\n if let error = error {\n print(error.localizedDescription)\n } else if let annotations = annotations, annotations.count > 0 {\n // Do custom actions here.\n } else {\n print(\"No result found\")\n }\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-annotation-extension-ios-distribution-base\",\n fingerprint: \"dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-annotation-extension-ios-distribution-base\"\n let fingerprint = \"dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-annotation-extension-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-annotation-extension-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-annotation-extension-ios-distribution-base.zip" } ``` ## source-launchpad · [MapplsAPICore](): source launchpad - Identity: `source-launchpad:mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-api-core-ios-distribution - State model: stateless ```json { "slug": "mappls-api-core-ios-distribution", "sourceGuideSlug": "mappls-api-core-ios-distribution", "title": "[MapplsAPICore](): source launchpad", "repositoryName": "mappls-api-core-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734", "sourceUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 32bdcb00147ba07812b6903e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-api-core-ios-distribution` and fingerprint `32bdcb00147ba07812b6903e` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-api-core-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-api-core-ios-distribution` with fingerprint `32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 32bdcb00147ba07812b6903e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-api-core-ios-distribution\",\n fingerprint: \"32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-api-core-ios-distribution\"\n let fingerprint = \"32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-api-core-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-api-core-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-api-core-ios-distribution.zip" } ``` ## source-launchpad · [MapplsAPIKit (REST API Kit for iOS)](): source launchpad - Identity: `source-launchpad:mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-api-kit-ios-distribution - State model: stateless ```json { "slug": "mappls-api-kit-ios-distribution", "sourceGuideSlug": "mappls-api-kit-ios-distribution", "title": "[MapplsAPIKit (REST API Kit for iOS)](): source launchpad", "repositoryName": "mappls-api-kit-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "gis-analytics", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df", "sourceUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 8067ef763bd59da11448365f. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-api-kit-ios-distribution` and fingerprint `8067ef763bd59da11448365f` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Objective C”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-api-kit-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-api-kit-ios-distribution` with fingerprint `8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 8067ef763bd59da11448365f. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Objective C” (Objectivec). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Objectivec", "label": "Objective C", "code": "MapplsAutoSuggestManager * autoSuggestManager = [MapplsAutoSuggestManager sharedManager];\n// or\nMapplsAutoSuggestManager *autoSuggestManager = [[MapplsAutoSuggestManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsAutoSearchAtlasOptions * autoSuggestOptions = [[MapplsAutoSearchAtlasOptions alloc] initWithQuery:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\nautoSuggestOptions.location = [[CLLocation alloc] initWithLatitude:28.2323234 longitude:72.3434123];\nautoSuggestOptions.zoom = [[NSNumber alloc] initWithInt:5];\n[autoSuggestManager getAutoSuggestionResultsWithOptions:autoSuggestOptions completionHandler:^(MapplsLocationResults * _Nullable locationResults, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (locationResults) {\n MapplsAutoSuggestLocationResults * results = (MapplsAutoSuggestLocationResults *) locationResults;\n if(results && results.suggestions) {\n for (MapplsAtlasSuggestion * suggestion in results.suggestions) {\n NSLog(@\"Auto Suggest %@%@\", suggestion.latitude, suggestion.longitude);\n }\n }\n if(results && results.suggestedSearches) {\n for (MapplsSearchPrediction * suggestion in results.suggestedSearches) {\n NSLog(@\"Auto Suggest %@\", suggestion.identifier);\n }\n }\n } else {\n NSLog(@\"No Results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let autoSuggestManager = MapplsAutoSuggestManager.shared\n//Or\nlet autoSuggestManager = MapplsAutoSuggestManager(restKey:\nMapplsAccountManager.restAPIKey(), clientId:\nMapplsAccountManager.atlasClientId(), clientSecret:\nMapplsAccountManager.atlasClientSecret(), grantType:\nMapplsAccountManager.atlasGrantType())\n\nlet autoSearchAtlasOptions = MapplsAutoSearchAtlasOptions(query: \"mmi000\",\nwithRegion: .india)\nautoSearchAtlasOptions.location = CLLocation(latitude: 28.2323234, longitude: 72.3434123)\nautoSearchAtlasOptions.zoom = 5\nautoSuggestManager.getAutoSuggestionResults(autoSearchAtlasOptions) { (locationResults, error) in\n if let error = error {\n print(\"error: \\(error.localizedDescription)\")\n } else if let locationResults = locationResults as? MapplsAutoSuggestLocationResults {\n if let suggestions = locationResults.suggestions {\n for suggestion in suggestions {\n print(\"suggestion: \\(suggestion.placeName)\")\n }\n }\n if let suggestions = locationResults.suggestedSearches {\n for suggestion in suggestions {\n print(\"suggestedSearches: \\(suggestion.identifier)\")\n }\n }\n } else {\n print(\"No Results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsReverseGeocodeManager * reverseGeocodeManager = [MapplsReverseGeocodeManager sharedManager];\n//Or\nMapplsReverseGeocodeManager * reverseGeocodeManager = [[MapplsReverseGeocodeManager alloc] initWithClientId:MapplsAccountManager.clientId clientSecret:MapplsAccountManager.clientSecret grantType:nil host:nil scheme:nil];\n \nMapplsReverseGeocodeOptions *revOptions = [[MapplsReverseGeocodeOptions alloc] initWithCoordinate:CLLocationCoordinate2DMake(28.553291, 77.258876) withRegion:MapplsRegionTypeIndia];\n \n[reverseGeocodeManager reverseGeocodeWithOptions:revOptions completionHandler:^(NSArray * _Nullable placemarks, NSString * _Nullable attribution, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (placemarks.count > 0) {\n NSLog(@\"Reverse Geocode %@\",\n placemarks[0].formattedAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let reverseGeocodeManager = MapplsReverseGeocodeManager.shared\n//Or\nlet reverseGeocodeManager = MapplsReverseGeocodeManager(clientId: MapplsAccountManager.clientId(), clientSecret: MapplsAccountManager.clientSecret())\n \nlet revOptions = MapplsReverseGeocodeOptions(coordinate: CLLocationCoordinate2D(latitude: 28.553291, longitude: 77.258876), withRegion: .india)\nreverseGeocodeManager.reverseGeocode(revOptions) { (placemarks, attribution, error) in\n if let error = error {\n print(\"%@\", error)\n } else if let placemarks = placemarks, !placemarks.isEmpty {\n print(\"Reverse Geocode: \\(placemarks[0].formattedAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Request Parameters", "code": "let filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [String,String])" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsNearByManager * nearByManager = [MapplsNearByManager sharedManager];\n//Or\nMapplsNearByManager * nearByManager = [[MapplsNearByManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n \nNSString *refLocation = @\"28.550667, 77.268959\";\n \nMapplsNearbyAtlasOptions *nearByOptions = [[MapplsNearbyAtlasOptions alloc] initWithQuery:@\"EV Charging\" location:refLocation withRegion:MapplsRegionTypeIndia];\n \n[nearByManager getNearBySuggestionsWithOptions:nearByOptions completionHandler:^(MapplsNearbyResult * _Nullable result, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (result.suggestions.count > 0) {\n NSLog(@\"Nearby %@\", result.suggestions[0].placeAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-api-kit-ios-distribution\",\n fingerprint: \"8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-api-kit-ios-distribution\"\n let fingerprint = \"8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-api-kit-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-api-kit-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-api-kit-ios-distribution.zip" } ``` ## source-launchpad · [MapplsAPIKit (REST API Kit for iOS)](): source launchpad - Identity: `source-launchpad:mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-api-kit-ios-distribution-base - State model: stateless ```json { "slug": "mappls-api-kit-ios-distribution-base", "sourceGuideSlug": "mappls-api-kit-ios-distribution-base", "title": "[MapplsAPIKit (REST API Kit for iOS)](): source launchpad", "repositoryName": "mappls-api-kit-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927", "sourceUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fef99dda42ad1a82220474a2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-api-kit-ios-distribution-base` and fingerprint `fef99dda42ad1a82220474a2` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Objective C”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-api-kit-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-api-kit-ios-distribution-base` with fingerprint `fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fef99dda42ad1a82220474a2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Objective C” (Objectivec). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Objectivec", "label": "Objective C", "code": "MapplsAutoSuggestManager * autoSuggestManager = [MapplsAutoSuggestManager sharedManager];\n// or\nMapplsAutoSuggestManager *autoSuggestManager = [[MapplsAutoSuggestManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n\nMapplsAutoSearchAtlasOptions * autoSuggestOptions = [[MapplsAutoSearchAtlasOptions alloc] initWithQuery:@\"mmi000\" withRegion:MapplsRegionTypeIndia];\nautoSuggestOptions.location = [[CLLocation alloc] initWithLatitude:28.2323234 longitude:72.3434123];\nautoSuggestOptions.zoom = [[NSNumber alloc] initWithInt:5];\n[autoSuggestManager getAutoSuggestionResultsWithOptions:autoSuggestOptions completionHandler:^(MapplsLocationResults * _Nullable locationResults, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (locationResults) {\n MapplsAutoSuggestLocationResults * results = (MapplsAutoSuggestLocationResults *) locationResults;\n if(results && results.suggestions) {\n for (MapplsAtlasSuggestion * suggestion in results.suggestions) {\n NSLog(@\"Auto Suggest %@%@\", suggestion.latitude, suggestion.longitude);\n }\n }\n if(results && results.suggestedSearches) {\n for (MapplsSearchPrediction * suggestion in results.suggestedSearches) {\n NSLog(@\"Auto Suggest %@\", suggestion.identifier);\n }\n }\n } else {\n NSLog(@\"No Results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let autoSuggestManager = MapplsAutoSuggestManager.shared\n//Or\nlet autoSuggestManager = MapplsAutoSuggestManager(restKey:\nMapplsAccountManager.restAPIKey(), clientId:\nMapplsAccountManager.atlasClientId(), clientSecret:\nMapplsAccountManager.atlasClientSecret(), grantType:\nMapplsAccountManager.atlasGrantType())\n\nlet autoSearchAtlasOptions = MapplsAutoSearchAtlasOptions(query: \"mmi000\",\nwithRegion: .india)\nautoSearchAtlasOptions.location = CLLocation(latitude: 28.2323234, longitude: 72.3434123)\nautoSearchAtlasOptions.zoom = 5\nautoSuggestManager.getAutoSuggestionResults(autoSearchAtlasOptions) { (locationResults, error) in\n if let error = error {\n print(\"error: \\(error.localizedDescription)\")\n } else if let locationResults = locationResults as? MapplsAutoSuggestLocationResults {\n if let suggestions = locationResults.suggestions {\n for suggestion in suggestions {\n print(\"suggestion: \\(suggestion.placeName)\")\n }\n }\n if let suggestions = locationResults.suggestedSearches {\n for suggestion in suggestions {\n print(\"suggestedSearches: \\(suggestion.identifier)\")\n }\n }\n } else {\n print(\"No Results\")\n }\n}" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsReverseGeocodeManager * reverseGeocodeManager = [MapplsReverseGeocodeManager sharedManager];\n//Or\nMapplsReverseGeocodeManager * reverseGeocodeManager = [[MapplsReverseGeocodeManager alloc] initWithClientId:MapplsAccountManager.clientId clientSecret:MapplsAccountManager.clientSecret grantType:nil host:nil scheme:nil];\n \nMapplsReverseGeocodeOptions *revOptions = [[MapplsReverseGeocodeOptions alloc] initWithCoordinate:CLLocationCoordinate2DMake(28.553291, 77.258876) withRegion:MapplsRegionTypeIndia];\n \n[reverseGeocodeManager reverseGeocodeWithOptions:revOptions completionHandler:^(NSArray * _Nullable placemarks, NSString * _Nullable attribution, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (placemarks.count > 0) {\n NSLog(@\"Reverse Geocode %@\",\n placemarks[0].formattedAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" }, { "language": "Swift", "label": "Swift", "code": "let reverseGeocodeManager = MapplsReverseGeocodeManager.shared\n//Or\nlet reverseGeocodeManager = MapplsReverseGeocodeManager(clientId: MapplsAccountManager.clientId(), clientSecret: MapplsAccountManager.clientSecret())\n \nlet revOptions = MapplsReverseGeocodeOptions(coordinate: CLLocationCoordinate2D(latitude: 28.553291, longitude: 77.258876), withRegion: .india)\nreverseGeocodeManager.reverseGeocode(revOptions) { (placemarks, attribution, error) in\n if let error = error {\n print(\"%@\", error)\n } else if let placemarks = placemarks, !placemarks.isEmpty {\n print(\"Reverse Geocode: \\(placemarks[0].formattedAddress)\")\n } else {\n print(\"No results\")\n }\n}" }, { "language": "Swift", "label": "Request Parameters", "code": "let filter = MapplsNearbyKeyValueFilter(filterKey: \"brandId\", filterValues: [String,String])" }, { "language": "Objectivec", "label": "Objective C", "code": "MapplsNearByManager * nearByManager = [MapplsNearByManager sharedManager];\n//Or\nMapplsNearByManager * nearByManager = [[MapplsNearByManager alloc] initWithRestKey:MapplsAccountManager.restAPIKey clientId:MapplsAccountManager.atlasClientId clientSecret:MapplsAccountManager.atlasClientSecret grantType:MapplsAccountManager.atlasGrantType];\n \nNSString *refLocation = @\"28.550667, 77.268959\";\n \nMapplsNearbyAtlasOptions *nearByOptions = [[MapplsNearbyAtlasOptions alloc] initWithQuery:@\"EV Charging\" location:refLocation withRegion:MapplsRegionTypeIndia];\n \n[nearByManager getNearBySuggestionsWithOptions:nearByOptions completionHandler:^(MapplsNearbyResult * _Nullable result, NSError * _Nullable error) {\n if (error) {\n NSLog(@\"%@\", error);\n } else if (result.suggestions.count > 0) {\n NSLog(@\"Nearby %@\", result.suggestions[0].placeAddress);\n } else {\n NSLog(@\"No results\");\n }\n}];" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-api-kit-ios-distribution-base\",\n fingerprint: \"fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-api-kit-ios-distribution-base\"\n let fingerprint = \"fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-api-kit-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-api-kit-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-api-kit-ios-distribution-base.zip" } ``` ## source-launchpad · Mappls App Widgets: source launchpad - Identity: `source-launchpad:mappls-app-widgets` - Canonical: https://developer.mappls.com/launchpads/mappls-app-widgets - State model: stateless ```json { "slug": "mappls-app-widgets", "sourceGuideSlug": "mappls-app-widgets", "title": "Mappls App Widgets: source launchpad", "repositoryName": "mappls-app-widgets", "kind": "Deep link", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Widgets/Deep links" ], "productAreas": [ "search-places", "widgets-deep-links" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177", "sourceUrl": "https://github.com/mappls-api/mappls-app-widgets", "readmeUrl": "https://github.com/mappls-api/mappls-app-widgets/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 1cb282714a115237fb8e116d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `mappls-app-widgets` and fingerprint `1cb282714a115237fb8e116d` recorded in the project", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-app-widgets. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-app-widgets` with fingerprint `1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 1cb282714a115237fb8e116d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep deep link symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-app-widgets\",\n fingerprint: \"1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "javascript", "label": "Browser and bridge lifecycle seam", "code": "// No endpoint, package, callback, or credential is inferred by this example.\nexport const source = Object.freeze({\n slug: \"mappls-app-widgets\",\n fingerprint: \"1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177\",\n providerCallsEnabled: false,\n});\n\nexport function createOwner() {\n let generation = 0;\n return {\n begin() { if (!source.providerCallsEnabled) throw new Error(\"selection_required\"); return ++generation; },\n accepts(candidateGeneration) { return candidateGeneration === generation; },\n dispose() { generation += 1; },\n };\n}" } ], "workshop": { "title": "mappls-app-widgets evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "web-widget-place-picker", "widget-host-production" ], "starterSlug": "mappls-app-widgets", "downloadPath": "/downloads/source-starters/mappls-app-widgets.zip" } ``` ## source-launchpad · MapplsCamera SDK for iOS: source launchpad - Identity: `source-launchpad:mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-camera-ios-distribution - State model: stateless ```json { "slug": "mappls-camera-ios-distribution", "sourceGuideSlug": "mappls-camera-ios-distribution", "title": "MapplsCamera SDK for iOS: source launchpad", "repositoryName": "mappls-camera-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50", "sourceUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 5188dcc0949df5e35f014373. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client.", "prerequisites": [ "The exact source guide `mappls-camera-ios-distribution` and fingerprint `5188dcc0949df5e35f014373` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Swift Package Manager”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-camera-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-camera-ios-distribution` with fingerprint `5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 5188dcc0949df5e35f014373. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Swift Package Manager” (Text). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Text", "label": "Swift Package Manager", "code": "https://github.com/mappls-api/mappls-camera-ios-distribution.git" }, { "language": "Swift", "label": "1. Import the SDK", "code": "import MapplsCamera" }, { "language": "Swift", "label": "2. Initialize and Present", "code": "let cameraVC = MapplsCameraViewController()\ncameraVC.cameraDelegate = self\ncameraVC.modalPresentationStyle = .fullScreen\nself.present(cameraVC, animated: true)" }, { "language": "Swift", "label": "3. Implement the Delegate", "code": "extension YourViewController: MapplsCameraDelegate {\n func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {\n print(\"Captured image at: \\(result.filePath)\")\n print(\"Location: \\(result.latitude), \\(result.longitude)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {\n print(\"Recorded video at: \\(result.filePath)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {\n // Handle real-time location updates\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {\n // Handle nearby places/PINs\n }\n\n\n}" }, { "language": "Swift", "label": "Option 1: Use Sample Library", "code": "import MapplsCamera\nimport MapplsCameraSample\n\n// Use the sample view controller\nlet sampleVC = SampleCameraViewController()\npresent(sampleVC, animated: true)\n\n// Or use configuration presets\nlet cameraVC = CameraConfigurations.photoOnly()\ncameraVC.cameraDelegate = self\npresent(cameraVC, animated: true)" }, { "language": "Swift", "label": "Error Handling", "code": "func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n switch error {\n case .cameraPermissionDenied:\n // Handle no camera access\n case .locationPermissionDenied:\n // Handle no location access\n case .poorAccuracy:\n // GPS accuracy was below minimumAccuracyMetres threshold\n default:\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-camera-ios-distribution\",\n fingerprint: \"5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-camera-ios-distribution\"\n let fingerprint = \"5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-camera-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-camera-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-camera-ios-distribution.zip" } ``` ## source-launchpad · Mappls Camera SDK: source launchpad - Identity: `source-launchpad:mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/launchpads/mappls-camera-sdk-android - State model: stateless ```json { "slug": "mappls-camera-sdk-android", "sourceGuideSlug": "mappls-camera-sdk-android", "title": "Mappls Camera SDK: source launchpad", "repositoryName": "mappls-camera-sdk-android", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Android" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "duration": "25 minutes", "outcome": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306", "sourceUrl": "https://github.com/mappls-api/mappls-camera-sdk-android", "readmeUrl": "https://github.com/mappls-api/mappls-camera-sdk-android/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 7840f9c22c6b19e5eafd7e97. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client.", "prerequisites": [ "The exact source guide `mappls-camera-sdk-android` and fingerprint `7840f9c22c6b19e5eafd7e97` recorded in the project", "An Android project with a supported Gradle and Kotlin or Java toolchain", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Kotlin (build.gradle.kts)”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-camera-sdk-android. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-camera-sdk-android` with fingerprint `7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 7840f9c22c6b19e5eafd7e97. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Kotlin (build.gradle.kts)” (Kotlin). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "implementation(\"com.mappls.sdk:mappls-camera:1.0.0\")" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "implementation 'com.mappls.sdk:mappls-camera:1.0.0'" }, { "language": "Kotlin", "label": "Android — Interface: MapplsCameraCallback", "code": "interface MapplsCameraCallback {\n fun onCaptureCancelled(){}\n fun onImageCaptured(result: MapplsCameraResult)\n fun onVideoCaptured(result: MapplsCameraResult)\n fun onError(errorCode: Int, errorMessage: String)\n\n fun onCancel()\n fun onLocationUpdated(latitude: Double, longitude: Double, accuracyMetres: Float)\n fun permissionResultCallback(cameraGranted: Boolean, audioGranted:Boolean,locationGranted: Boolean){}\n fun onNearbyPINsLoaded(pins: List){}\n fun onCameraZoomChanged(newValue: Float){}\n}" }, { "language": "Kotlin", "label": "Android (MapplsCamera object)", "code": "MapplsCamera.getLastCapturedResult(): MapplsCameraResult?\nMapplsCamera.getLastLocation(): Location?\nMapplsCamera.getLastEloc(): String?\nMapplsCamera.getLastFormattedAddress(): String?" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-camera-sdk-android\",\n fingerprint: \"7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "kotlin", "label": "Kotlin release guard", "code": "// Application-owned evidence; add SDK symbols only after release selection.\ndata class SourceContract(val slug: String, val fingerprint: String, val providerCallsEnabled: Boolean = false)\nval source = SourceContract(\"mappls-camera-sdk-android\", \"7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306\")\n\nsealed interface BoundaryResult {\n data class Ready(val value: T, val sourceFingerprint: String) : BoundaryResult\n data class Blocked(val reason: String, val retryable: Boolean) : BoundaryResult\n}\n\nfun requireSelectedRelease() {\n check(source.providerCallsEnabled) { \"selection_required\" }\n}" } ], "workshop": { "title": "mappls-camera-sdk-android evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "android-map", "workmate-task-lifecycle", "workmate-proof-review" ], "starterSlug": "mappls-camera-sdk-android", "downloadPath": "/downloads/source-starters/mappls-camera-sdk-android.zip" } ``` ## source-launchpad · MapplsCamera SDK for iOS: source launchpad - Identity: `source-launchpad:mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/launchpads/mappls-camera-sdk-ios - State model: stateless ```json { "slug": "mappls-camera-sdk-ios", "sourceGuideSlug": "mappls-camera-sdk-ios", "title": "MapplsCamera SDK for iOS: source launchpad", "repositoryName": "mappls-camera-sdk-ios", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302", "sourceUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios", "readmeUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is be2f3bb17147aef1890e71e5. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client.", "prerequisites": [ "The exact source guide `mappls-camera-sdk-ios` and fingerprint `be2f3bb17147aef1890e71e5` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Swift Package Manager”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-camera-sdk-ios. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-camera-sdk-ios` with fingerprint `be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is be2f3bb17147aef1890e71e5. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Swift Package Manager” (Text). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Text", "label": "Swift Package Manager", "code": "https://github.com/mappls-api/mappls-camera-ios-distribution.git" }, { "language": "Swift", "label": "1. Import the SDK", "code": "import MapplsCamera" }, { "language": "Swift", "label": "2. Initialize and Present", "code": "let cameraVC = MapplsCameraViewController()\ncameraVC.cameraDelegate = self\ncameraVC.modalPresentationStyle = .fullScreen\nself.present(cameraVC, animated: true)" }, { "language": "Swift", "label": "3. Implement the Delegate", "code": "extension YourViewController: MapplsCameraDelegate {\n func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {\n print(\"Captured image at: \\(result.filePath)\")\n print(\"Location: \\(result.latitude), \\(result.longitude)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {\n print(\"Recorded video at: \\(result.filePath)\")\n controller.dismiss(animated: true)\n }\n\n func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {\n controller.dismiss(animated: true)\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {\n // Handle real-time location updates\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n\n func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {\n // Handle nearby places/PINs\n }\n\n\n}" }, { "language": "Swift", "label": "Option 1: Use Sample Library", "code": "import MapplsCamera\nimport MapplsCameraSample\n\n// Use the sample view controller\nlet sampleVC = SampleCameraViewController()\npresent(sampleVC, animated: true)\n\n// Or use configuration presets\nlet cameraVC = CameraConfigurations.photoOnly()\ncameraVC.cameraDelegate = self\npresent(cameraVC, animated: true)" }, { "language": "Swift", "label": "Error Handling", "code": "func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {\n switch error {\n case .cameraPermissionDenied:\n // Handle no camera access\n case .locationPermissionDenied:\n // Handle no location access\n case .poorAccuracy:\n // GPS accuracy was below minimumAccuracyMetres threshold\n default:\n print(\"SDK Error: \\(error.localizedDescription)\")\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-camera-sdk-ios\",\n fingerprint: \"be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-camera-sdk-ios\"\n let fingerprint = \"be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-camera-sdk-ios evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-camera-sdk-ios", "downloadPath": "/downloads/source-starters/mappls-camera-sdk-ios.zip" } ``` ## source-launchpad · MapplsDirectionUI for iOS: source launchpad - Identity: `source-launchpad:mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-direction-ui-ios-distribution - State model: hybrid ```json { "slug": "mappls-direction-ui-ios-distribution", "sourceGuideSlug": "mappls-direction-ui-ios-distribution", "title": "MapplsDirectionUI for iOS: source launchpad", "repositoryName": "mappls-direction-ui-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878", "sourceUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c8594d45a1d168c0c9d4df60. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-direction-ui-ios-distribution` and fingerprint `c8594d45a1d168c0c9d4df60` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “MapplsDirectionsViewController”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-direction-ui-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-direction-ui-ios-distribution` with fingerprint `c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c8594d45a1d168c0c9d4df60. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “MapplsDirectionsViewController” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "let directionVC = MapplsDirectionViewController(for: [MapplsDirectionLocation]())\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "var locationModels = [MapplsDirectionLocation]()\nlet source = MapplsDirectionLocation(location: \"77.2639,28.5354\", displayName: \"Govindpuri\", displayAddress: \"\", locationType: .suggestion)\n \nlet viaPoint = MapplsDirectionLocation(location: \"12269L\", displayName: \"Sitamarhi\", displayAddress: \"\", locationType: .suggestion)\n \nlet destination = MapplsDirectionLocation(location: \"1T182A\", displayName: \"Majorganj\", displayAddress: \"\", locationType: .suggestion)\n \nself.locationModels.append(source)\nself.locationModels.append(viaPoint)\nself.locationModels.append(destination)\nlet directionVC = MapplsDirectionViewController(for: self.locationModels)\ndirectionVC.profileIdentifier = .driving\ndirectionVC.attributationOptions = [.congestionLevel]\ndirectionVC.resourceIdentifier = .routeETA\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "MapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]init];\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];\n\nOR\n\nMapplsDirectionLocation* source = [[MapplsDirectionLocation alloc] initWithLocation:@\"78.00,28.00\" displayName:@\"haridwar\" displayAddress:@\"\" locationType:0];\nMapplsDirectionLocation* destination = [[MapplsDirectionLocation alloc] initWithLocation:@\"1T182A\" displayName:@\"Majorganj\" displayAddress:@\"\" locationType:1];\n\nNSArray* locations = [[NSArray alloc] initWithObjects:current,destination, nil];\n\nMapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]initFor:locations style:nil];\n\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowDrivingModeSelector = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowRouteReportSummary = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowTollCostEstimation = false" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-direction-ui-ios-distribution\",\n fingerprint: \"c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-direction-ui-ios-distribution\"\n let fingerprint = \"c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-direction-ui-ios-distribution evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-direction-ui-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-direction-ui-ios-distribution.zip" } ``` ## source-launchpad · MapplsDirectionUI for iOS: source launchpad - Identity: `source-launchpad:mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-direction-ui-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-direction-ui-ios-distribution-base", "sourceGuideSlug": "mappls-direction-ui-ios-distribution-base", "title": "MapplsDirectionUI for iOS: source launchpad", "repositoryName": "mappls-direction-ui-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878", "sourceUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c8594d45a1d168c0c9d4df60. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-direction-ui-ios-distribution-base` and fingerprint `c8594d45a1d168c0c9d4df60` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “MapplsDirectionsViewController”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-direction-ui-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-direction-ui-ios-distribution-base` with fingerprint `c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c8594d45a1d168c0c9d4df60. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “MapplsDirectionsViewController” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "let directionVC = MapplsDirectionViewController(for: [MapplsDirectionLocation]())\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "var locationModels = [MapplsDirectionLocation]()\nlet source = MapplsDirectionLocation(location: \"77.2639,28.5354\", displayName: \"Govindpuri\", displayAddress: \"\", locationType: .suggestion)\n \nlet viaPoint = MapplsDirectionLocation(location: \"12269L\", displayName: \"Sitamarhi\", displayAddress: \"\", locationType: .suggestion)\n \nlet destination = MapplsDirectionLocation(location: \"1T182A\", displayName: \"Majorganj\", displayAddress: \"\", locationType: .suggestion)\n \nself.locationModels.append(source)\nself.locationModels.append(viaPoint)\nself.locationModels.append(destination)\nlet directionVC = MapplsDirectionViewController(for: self.locationModels)\ndirectionVC.profileIdentifier = .driving\ndirectionVC.attributationOptions = [.congestionLevel]\ndirectionVC.resourceIdentifier = .routeETA\nself.navigationController?.pushViewController(directionVC, animated: false)" }, { "language": "Swift", "label": "MapplsDirectionsViewController", "code": "MapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]init];\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];\n\nOR\n\nMapplsDirectionLocation* source = [[MapplsDirectionLocation alloc] initWithLocation:@\"78.00,28.00\" displayName:@\"haridwar\" displayAddress:@\"\" locationType:0];\nMapplsDirectionLocation* destination = [[MapplsDirectionLocation alloc] initWithLocation:@\"1T182A\" displayName:@\"Majorganj\" displayAddress:@\"\" locationType:1];\n\nNSArray* locations = [[NSArray alloc] initWithObjects:current,destination, nil];\n\nMapplsDirectionViewController * directionVC = [[MapplsDirectionViewController alloc]initFor:locations style:nil];\n\ndirectionVC.delegate = self;\ndirectionVC.modalPresentationStyle = UIModalPresentationFullScreen;\n[self presentViewController:directionVC animated:false completion:nil];" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowDrivingModeSelector = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowRouteReportSummary = false" }, { "language": "Swift", "label": "Configuration", "code": "MapplsDirectionUIConfiguration.shared.shouldShowTollCostEstimation = false" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-direction-ui-ios-distribution-base\",\n fingerprint: \"c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-direction-ui-ios-distribution-base\"\n let fingerprint = \"c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-direction-ui-ios-distribution-base evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-direction-ui-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-direction-ui-ios-distribution-base.zip" } ``` ## source-launchpad · MapplsDrivingRangePlugin for iOS: source launchpad - Identity: `source-launchpad:mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-drivingrange-plugin-ios-distribution - State model: stateless ```json { "slug": "mappls-drivingrange-plugin-ios-distribution", "sourceGuideSlug": "mappls-drivingrange-plugin-ios-distribution", "title": "MapplsDrivingRangePlugin for iOS: source launchpad", "repositoryName": "mappls-drivingrange-plugin-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3", "sourceUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ab30151929b38a436eb0bfee. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-drivingrange-plugin-ios-distribution` and fingerprint `ab30151929b38a436eb0bfee` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “MapplsDrivingRangePlugin”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-drivingrange-plugin-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-drivingrange-plugin-ios-distribution` with fingerprint `ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ab30151929b38a436eb0bfee. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “MapplsDrivingRangePlugin” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "MapplsDrivingRangePlugin", "code": "var drivingRangePlugin = MapplsDrivingRange(mapView: self.mapView)\n\nself.drivingRangePlugin.delegate = self // optional" }, { "language": "Swift", "label": "Get And Plot Driving Range", "code": "let location = CLLocation(latitude: 28.551060, longitude: 77.268989)\n \nlet contours = [MapplsDrivingRangeContours(value: 2)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .distance, contours: contours)\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "Clear Driving Range", "code": "drivingRangePlugin.clearDrivingRangeFromMap()" }, { "language": "Swift", "label": "Update Driving Range", "code": "let location = CLLocation(latitude: 28.612972, longitude: 77.233529)\n \nlet contours = [MapplsDrivingRangeContour(value: 15)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .time, contours: contours)\n \nlet speedInfo = MapplsDrivingRangeOptimalSpeed()\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo, speedTypeInfo: speedInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "code": "optional func drivingRange(_ plugin: MapplsDrivingRange, didFailToGetAndPlotDrivingRange error: Error)" }, { "language": "Text", "label": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "code": "@objc optional func drivingRangeDidSuccessToGetAndPlotDrivingRange(_ plugin: MapplsDrivingRange)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-drivingrange-plugin-ios-distribution\",\n fingerprint: \"ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-drivingrange-plugin-ios-distribution\"\n let fingerprint = \"ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-drivingrange-plugin-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-drivingrange-plugin-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-drivingrange-plugin-ios-distribution.zip" } ``` ## source-launchpad · MapplsDrivingRangePlugin for iOS: source launchpad - Identity: `source-launchpad:mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-drivingrange-plugin-ios-distribution-base - State model: stateless ```json { "slug": "mappls-drivingrange-plugin-ios-distribution-base", "sourceGuideSlug": "mappls-drivingrange-plugin-ios-distribution-base", "title": "MapplsDrivingRangePlugin for iOS: source launchpad", "repositoryName": "mappls-drivingrange-plugin-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9", "sourceUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is d45431cb565d97f838db4aef. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-drivingrange-plugin-ios-distribution-base` and fingerprint `d45431cb565d97f838db4aef` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “MapplsDrivingRangePlugin”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-drivingrange-plugin-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-drivingrange-plugin-ios-distribution-base` with fingerprint `d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is d45431cb565d97f838db4aef. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “MapplsDrivingRangePlugin” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "MapplsDrivingRangePlugin", "code": "var drivingRangePlugin = MapplsDrivingRange(mapView: self.mapView)\n\nself.drivingRangePlugin.delegate = self // optional" }, { "language": "Swift", "label": "Get And Plot Driving Range", "code": "let location = CLLocation(latitude: 28.551060, longitude: 77.268989)\n \nlet contours = [MapplsDrivingRangeContours(value: 2)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .distance, contours: contours)\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "Clear Driving Range", "code": "drivingRangePlugin.clearDrivingRangeFromMap()" }, { "language": "Swift", "label": "Update Driving Range", "code": "let location = CLLocation(latitude: 28.612972, longitude: 77.233529)\n \nlet contours = [MapplsDrivingRangeContour(value: 15)]\nlet rangeInfo = MapplsDrivingRangeRangeTypeInfo(rangeType: .time, contours: contours)\n \nlet speedInfo = MapplsDrivingRangeOptimalSpeed()\n \nlet drivingRangeOptions = MapplsDrivingRangeOptions(location: location, rangeTypeInfo: rangeInfo, speedTypeInfo: speedInfo)\n \nself.drivingRangePlugin.getAndPlotDrivingRange(options: drivingRangeOptions)" }, { "language": "Swift", "label": "drivingRange(:didFailToGetAndPlotDrivingRange:))", "code": "optional func drivingRange(_ plugin: MapplsDrivingRange, didFailToGetAndPlotDrivingRange error: Error)" }, { "language": "Text", "label": "drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "code": "@objc optional func drivingRangeDidSuccessToGetAndPlotDrivingRange(_ plugin: MapplsDrivingRange)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-drivingrange-plugin-ios-distribution-base\",\n fingerprint: \"d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-drivingrange-plugin-ios-distribution-base\"\n let fingerprint = \"d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-drivingrange-plugin-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-drivingrange-plugin-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-drivingrange-plugin-ios-distribution-base.zip" } ``` ## source-launchpad · MapplsFeedbackKit for iOS: source launchpad - Identity: `source-launchpad:mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-kit-ios-distribution - State model: hybrid ```json { "slug": "mappls-feedback-kit-ios-distribution", "sourceGuideSlug": "mappls-feedback-kit-ios-distribution", "title": "MapplsFeedbackKit for iOS: source launchpad", "repositoryName": "mappls-feedback-kit-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db", "sourceUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 505b2357a59292ab056a8375. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-feedback-kit-ios-distribution` and fingerprint `505b2357a59292ab056a8375` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Get Report Categories”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-feedback-kit-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-feedback-kit-ios-distribution` with fingerprint `505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 505b2357a59292ab056a8375. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Get Report Categories” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Get Report Categories", "code": "MapplsFeedBackKitManager.shared.getReportCategories { (reportCategories, error) in\n if let error = error {\n print(error.localizedDescription)\n self.dismiss(animated: true, completion: nil)\n } else {\n let categories = reportCategories ?? [ParentCategories]()\n if categories.count > 0 {\n self.allReportCategories = categories\n print(self.allReportCategories.first?.id)\n self.currentStep = 1\n } else {\n print(\"No report categories found\")\n self.dismiss(animated: true, completion: nil)\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "let saveOptions = MapplsSaveUserDataOptions(location: \"MMI000\", parentCategory: parentCategory.id ?? 0, childCategory: childCategory.id ?? 0, description: \"This is descriptions\", subChildCategory: self.selectedSubChildCategories?.id, accuracy: 3)\n\nMapplsSaveUserDataAPIManager.shared.saveUserData(saveOptions, { (isSucess, error) in\n\n if let error = error {\n print(error.localizedDescription)\n } else if isSucess {\n print(\"feedback submited successfully\")\n self.dismiss(animated: true, completion: nil)\n } else {\n print(\"No results\")\n }\n})" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackSubmit), name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackFailed), name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchSuccess), name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchFailed), name: .reportCategoriesFetchFailedNotification, object: nil)" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.removeObserver(self, name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchFailedNotification, object: nil)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-feedback-kit-ios-distribution\",\n fingerprint: \"505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-feedback-kit-ios-distribution\"\n let fingerprint = \"505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-feedback-kit-ios-distribution evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-feedback-kit-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-feedback-kit-ios-distribution.zip" } ``` ## source-launchpad · MapplsFeedbackKit for iOS: source launchpad - Identity: `source-launchpad:mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-kit-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-feedback-kit-ios-distribution-base", "sourceGuideSlug": "mappls-feedback-kit-ios-distribution-base", "title": "MapplsFeedbackKit for iOS: source launchpad", "repositoryName": "mappls-feedback-kit-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db", "sourceUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 505b2357a59292ab056a8375. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-feedback-kit-ios-distribution-base` and fingerprint `505b2357a59292ab056a8375` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Get Report Categories”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-feedback-kit-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-feedback-kit-ios-distribution-base` with fingerprint `505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 505b2357a59292ab056a8375. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Get Report Categories” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Get Report Categories", "code": "MapplsFeedBackKitManager.shared.getReportCategories { (reportCategories, error) in\n if let error = error {\n print(error.localizedDescription)\n self.dismiss(animated: true, completion: nil)\n } else {\n let categories = reportCategories ?? [ParentCategories]()\n if categories.count > 0 {\n self.allReportCategories = categories\n print(self.allReportCategories.first?.id)\n self.currentStep = 1\n } else {\n print(\"No report categories found\")\n self.dismiss(animated: true, completion: nil)\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "let saveOptions = MapplsSaveUserDataOptions(location: \"MMI000\", parentCategory: parentCategory.id ?? 0, childCategory: childCategory.id ?? 0, description: \"This is descriptions\", subChildCategory: self.selectedSubChildCategories?.id, accuracy: 3)\n\nMapplsSaveUserDataAPIManager.shared.saveUserData(saveOptions, { (isSucess, error) in\n\n if let error = error {\n print(error.localizedDescription)\n } else if isSucess {\n print(\"feedback submited successfully\")\n self.dismiss(animated: true, completion: nil)\n } else {\n print(\"No results\")\n }\n})" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackSubmit), name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleFeedbackFailed), name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchSuccess), name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.addObserver(self, selector: #selector(handleReportCategoriesFetchFailed), name: .reportCategoriesFetchFailedNotification, object: nil)" }, { "language": "Swift", "label": "Callbacks", "code": "NotificationCenter.default.removeObserver(self, name: .feedbackSubmitSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .feedbackSubmitFailedNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchSuccessNotification, object: nil)\nNotificationCenter.default.removeObserver(self, name: .reportCategoriesFetchFailedNotification, object: nil)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-feedback-kit-ios-distribution-base\",\n fingerprint: \"505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-feedback-kit-ios-distribution-base\"\n let fingerprint = \"505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-feedback-kit-ios-distribution-base evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-feedback-kit-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-feedback-kit-ios-distribution-base.zip" } ``` ## source-launchpad · MapplsFeedbackUIKit for iOS: source launchpad - Identity: `source-launchpad:mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-uikit-ios-distribution - State model: hybrid ```json { "slug": "mappls-feedback-uikit-ios-distribution", "sourceGuideSlug": "mappls-feedback-uikit-ios-distribution", "title": "MapplsFeedbackUIKit for iOS: source launchpad", "repositoryName": "mappls-feedback-uikit-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688", "sourceUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ce9bd0f45c46db6da97d67b3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-feedback-uikit-ios-distribution` and fingerprint `ce9bd0f45c46db6da97d67b3` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Present Navigation Controller”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-feedback-uikit-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-feedback-uikit-ios-distribution` with fingerprint `ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ce9bd0f45c46db6da97d67b3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Present Navigation Controller” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Present Navigation Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .night)\n\nself.present(navVC, animated: true, completion: nil)" }, { "language": "Swift", "label": "Push Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .auto)\n navVC.modalPresentationStyle = .fullScreen\nself.navigationController?.pushViewController(navVC, animated: true)" }, { "language": "Swift", "label": "Theme", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude), theme: MapplsFeedbackTheme.auto)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-feedback-uikit-ios-distribution\",\n fingerprint: \"ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-feedback-uikit-ios-distribution\"\n let fingerprint = \"ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-feedback-uikit-ios-distribution evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-feedback-uikit-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-feedback-uikit-ios-distribution.zip" } ``` ## source-launchpad · MapplsFeedbackUIKit for iOS: source launchpad - Identity: `source-launchpad:mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-uikit-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-feedback-uikit-ios-distribution-base", "sourceGuideSlug": "mappls-feedback-uikit-ios-distribution-base", "title": "MapplsFeedbackUIKit for iOS: source launchpad", "repositoryName": "mappls-feedback-uikit-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688", "sourceUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ce9bd0f45c46db6da97d67b3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-feedback-uikit-ios-distribution-base` and fingerprint `ce9bd0f45c46db6da97d67b3` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Present Navigation Controller”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-feedback-uikit-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-feedback-uikit-ios-distribution-base` with fingerprint `ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ce9bd0f45c46db6da97d67b3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Present Navigation Controller” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Present Navigation Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .night)\n\nself.present(navVC, animated: true, completion: nil)" }, { "language": "Swift", "label": "Push Controller", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getController(location: \"78.120,28.2300\",appVersion: Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String, osVersionoptional: UIDevice.current.systemVersion, deviceName: UIDevice.current.name, theme: .auto)\n navVC.modalPresentationStyle = .fullScreen\nself.navigationController?.pushViewController(navVC, animated: true)" }, { "language": "Swift", "label": "Theme", "code": "let navVC = MapplsFeedbackUIKitManager.shared.getViewController(location: CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude), theme: MapplsFeedbackTheme.auto)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-feedback-uikit-ios-distribution-base\",\n fingerprint: \"ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-feedback-uikit-ios-distribution-base\"\n let fingerprint = \"ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-feedback-uikit-ios-distribution-base evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-feedback-uikit-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-feedback-uikit-ios-distribution-base.zip" } ``` ## source-launchpad · Mappls Flutter SDK: source launchpad - Identity: `source-launchpad:mappls-flutter-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-flutter-sdk - State model: stateless ```json { "slug": "mappls-flutter-sdk", "sourceGuideSlug": "mappls-flutter-sdk", "title": "Mappls Flutter SDK: source launchpad", "repositoryName": "mappls-flutter-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Flutter" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d", "sourceUrl": "https://github.com/mappls-api/mappls-flutter-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-flutter-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 512ead785542761a9bff4f58. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-flutter-sdk` and fingerprint `512ead785542761a9bff4f58` recorded in the project", "A Flutter project with Android and iOS platform configuration", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-flutter-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-flutter-sdk` with fingerprint `512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 512ead785542761a9bff4f58. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-flutter-sdk\",\n fingerprint: \"512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "dart", "label": "Dart controller boundary", "code": "// The Flutter widget owns a generation; native/provider objects never enter app state.\nconst sourceSlug = \"mappls-flutter-sdk\";\nconst sourceFingerprint = \"512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d\";\nconst providerCallsEnabled = false;\n\nsealed class BoundaryResult {}\nfinal class Ready extends BoundaryResult { Ready(this.value); final T value; }\nfinal class Blocked extends BoundaryResult { Blocked(this.reason); final String reason; }\n\nclass IntegrationController {\n int _generation = 0;\n int begin() { if (!providerCallsEnabled) throw StateError('selection_required'); return ++_generation; }\n bool accepts(int generation) => generation == _generation;\n void dispose() { _generation++; }\n}" } ], "workshop": { "title": "mappls-flutter-sdk evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "flutter-map", "flutter-production-lifecycle" ], "starterSlug": "mappls-flutter-sdk", "downloadPath": "/downloads/source-starters/mappls-flutter-sdk.zip" } ``` ## source-launchpad · MapplsGeoanalytics Plugin for iOS: source launchpad - Identity: `source-launchpad:mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-geoanalytics-ios-distribution - State model: stateless ```json { "slug": "mappls-geoanalytics-ios-distribution", "sourceGuideSlug": "mappls-geoanalytics-ios-distribution", "title": "MapplsGeoanalytics Plugin for iOS: source launchpad", "repositoryName": "mappls-geoanalytics-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a", "sourceUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is b68a2b4329dc3c4db762969b. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-geoanalytics-ios-distribution` and fingerprint `b68a2b4329dc3c4db762969b` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Initialization MapplsGeoanalyticsPlugin”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-geoanalytics-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-geoanalytics-ios-distribution` with fingerprint `b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is b68a2b4329dc3c4db762969b. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Initialization MapplsGeoanalyticsPlugin” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Initialization MapplsGeoanalyticsPlugin", "code": "var geoanalyticsPlugin : MapplsGeoanalyticsPlugin = MapplsGeoanalyticsPlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 1 - Get GeoAnalytics layers", "code": "let apperenceState = GeoanalyticsLayerAppearance()\napperenceState.fillColor = \"42a5f4\"\napperenceState.fillOpacity = \"0.5\"\napperenceState.labelColor = \"000000\"\napperenceState.labelSize = \"10\"\napperenceState.strokeColor = \"000000\"\napperenceState.strokeWidth = \"0\"\n \nlet geoboundArray = [MapplsGeoanalyticsGeobound(geobound: \"HARYANA\", appearance: apperenceState), MapplsGeoanalyticsGeobound(geobound: \"UTTAR PRADESH\", appearance: apperenceState),MapplsGeoanalyticsGeobound(geobound: \"KERALA\", appearance: apperenceState)]\n \nlet layerRequestState = MapplsGeoanalyticsLayerRequest(geoboundType: \"stt_nme\", geobound: geoboundArray, propertyName: [\"stt_nme\",\"stt_id\",\"t_p\"], layerType: .state)\n\nlayerRequestState.attribute = \"t_p\";\nlayerRequestState.query = \">0\";\nlayerRequestState.transparent = true;" }, { "language": "Swift", "label": "Step 2 - Adding GeoAnalytics layer on Map", "code": "self.geoanalyticsPlugin.showGeoanalyticsLayer(layerRequestState)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.removeGeoanalyticsLayer(layerRequestState))" }, { "language": "Swift", "label": "Other Methods Available:", "code": "func didGetFeatureInfoResponse(_ featureInfoResponse:GeoanalyticsGetFeatureInfoResponse) {\n print(featureInfoResponse.features)\n}" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.shouldShowPopupForGeoanalyticsLayer = true" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-geoanalytics-ios-distribution\",\n fingerprint: \"b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-geoanalytics-ios-distribution\"\n let fingerprint = \"b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-geoanalytics-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-geoanalytics-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-geoanalytics-ios-distribution.zip" } ``` ## source-launchpad · MapplsGeoanalytics Plugin for iOS: source launchpad - Identity: `source-launchpad:mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-geoanalytics-ios-distribution-base - State model: stateless ```json { "slug": "mappls-geoanalytics-ios-distribution-base", "sourceGuideSlug": "mappls-geoanalytics-ios-distribution-base", "title": "MapplsGeoanalytics Plugin for iOS: source launchpad", "repositoryName": "mappls-geoanalytics-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a", "sourceUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is b68a2b4329dc3c4db762969b. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-geoanalytics-ios-distribution-base` and fingerprint `b68a2b4329dc3c4db762969b` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Initialization MapplsGeoanalyticsPlugin”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-geoanalytics-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-geoanalytics-ios-distribution-base` with fingerprint `b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is b68a2b4329dc3c4db762969b. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Initialization MapplsGeoanalyticsPlugin” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Initialization MapplsGeoanalyticsPlugin", "code": "var geoanalyticsPlugin : MapplsGeoanalyticsPlugin = MapplsGeoanalyticsPlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 1 - Get GeoAnalytics layers", "code": "let apperenceState = GeoanalyticsLayerAppearance()\napperenceState.fillColor = \"42a5f4\"\napperenceState.fillOpacity = \"0.5\"\napperenceState.labelColor = \"000000\"\napperenceState.labelSize = \"10\"\napperenceState.strokeColor = \"000000\"\napperenceState.strokeWidth = \"0\"\n \nlet geoboundArray = [MapplsGeoanalyticsGeobound(geobound: \"HARYANA\", appearance: apperenceState), MapplsGeoanalyticsGeobound(geobound: \"UTTAR PRADESH\", appearance: apperenceState),MapplsGeoanalyticsGeobound(geobound: \"KERALA\", appearance: apperenceState)]\n \nlet layerRequestState = MapplsGeoanalyticsLayerRequest(geoboundType: \"stt_nme\", geobound: geoboundArray, propertyName: [\"stt_nme\",\"stt_id\",\"t_p\"], layerType: .state)\n\nlayerRequestState.attribute = \"t_p\";\nlayerRequestState.query = \">0\";\nlayerRequestState.transparent = true;" }, { "language": "Swift", "label": "Step 2 - Adding GeoAnalytics layer on Map", "code": "self.geoanalyticsPlugin.showGeoanalyticsLayer(layerRequestState)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.removeGeoanalyticsLayer(layerRequestState))" }, { "language": "Swift", "label": "Other Methods Available:", "code": "func didGetFeatureInfoResponse(_ featureInfoResponse:GeoanalyticsGetFeatureInfoResponse) {\n print(featureInfoResponse.features)\n}" }, { "language": "Swift", "label": "Other Methods Available:", "code": "geoanalyticsPlugin.shouldShowPopupForGeoanalyticsLayer = true" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-geoanalytics-ios-distribution-base\",\n fingerprint: \"b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-geoanalytics-ios-distribution-base\"\n let fingerprint = \"b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-geoanalytics-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-geoanalytics-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-geoanalytics-ios-distribution-base.zip" } ``` ## source-launchpad · MapplsGeofenceUI Plugin for iOS: source launchpad - Identity: `source-launchpad:mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-geofence-ui-ios-distribution - State model: hybrid ```json { "slug": "mappls-geofence-ui-ios-distribution", "sourceGuideSlug": "mappls-geofence-ui-ios-distribution", "title": "MapplsGeofenceUI Plugin for iOS: source launchpad", "repositoryName": "mappls-geofence-ui-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc", "sourceUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dc9ee3cb13b907b481c65810. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-geofence-ui-ios-distribution` and fingerprint `dc9ee3cb13b907b481c65810` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Step 3 :- Initialization of GeofenceViewUI”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-geofence-ui-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-geofence-ui-ios-distribution` with fingerprint `dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dc9ee3cb13b907b481c65810. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Step 3 :- Initialization of GeofenceViewUI” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "import MapplsMap\nimport MapplsGeofenceUI\nvar geofenceView: MapplsGeofenceView!\n override func viewDidLoad() {\n super.viewDidLoad()\n // If you're on a background thread and want to execute code on the main thread, you need to call async()\n DispatchQueue.main.async {\nlet geofenceInstance: MapplsGeofenceView = {\ngeofenceView = MapplsGeofenceView.init(geofenceframe: self.view.bounds)\ngeofenceView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n return geofenceView\n}()\ngeofenceInstance.delegate = self\nself.view.addSubview(geofenceInstance)\n}\n}" }, { "language": "Text", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "geofenceInstance.delegate = self" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.setMode(mode: .circle)" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultSliderForCircle = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultModePanel = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDefaultImage = UIImage(named: \"\")" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-geofence-ui-ios-distribution\",\n fingerprint: \"dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-geofence-ui-ios-distribution\"\n let fingerprint = \"dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-geofence-ui-ios-distribution evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-geofence-ui-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-geofence-ui-ios-distribution.zip" } ``` ## source-launchpad · MapplsGeofenceUI Plugin for iOS: source launchpad - Identity: `source-launchpad:mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-geofence-ui-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-geofence-ui-ios-distribution-base", "sourceGuideSlug": "mappls-geofence-ui-ios-distribution-base", "title": "MapplsGeofenceUI Plugin for iOS: source launchpad", "repositoryName": "mappls-geofence-ui-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc", "sourceUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dc9ee3cb13b907b481c65810. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-geofence-ui-ios-distribution-base` and fingerprint `dc9ee3cb13b907b481c65810` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Step 3 :- Initialization of GeofenceViewUI”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-geofence-ui-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-geofence-ui-ios-distribution-base` with fingerprint `dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dc9ee3cb13b907b481c65810. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Step 3 :- Initialization of GeofenceViewUI” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "import MapplsMap\nimport MapplsGeofenceUI\nvar geofenceView: MapplsGeofenceView!\n override func viewDidLoad() {\n super.viewDidLoad()\n // If you're on a background thread and want to execute code on the main thread, you need to call async()\n DispatchQueue.main.async {\nlet geofenceInstance: MapplsGeofenceView = {\ngeofenceView = MapplsGeofenceView.init(geofenceframe: self.view.bounds)\ngeofenceView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n return geofenceView\n}()\ngeofenceInstance.delegate = self\nself.view.addSubview(geofenceInstance)\n}\n}" }, { "language": "Text", "label": "Step 3 :- Initialization of GeofenceViewUI", "code": "geofenceInstance.delegate = self" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.setMode(mode: .circle)" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultSliderForCircle = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.isShowDefaultModePanel = false" }, { "language": "Swift", "label": "Customizing the Geofence using various properties:", "code": "geofenceView.deleteBtnDefaultImage = UIImage(named: \"\")" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-geofence-ui-ios-distribution-base\",\n fingerprint: \"dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-geofence-ui-ios-distribution-base\"\n let fingerprint = \"dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-geofence-ui-ios-distribution-base evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-geofence-ui-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-geofence-ui-ios-distribution-base.zip" } ``` ## source-launchpad · Mappls Insight Embeddable Visualizations: source launchpad - Identity: `source-launchpad:mappls-insight-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-insight-sdk - State model: stateless ```json { "slug": "mappls-insight-sdk", "sourceGuideSlug": "mappls-insight-sdk", "title": "Mappls Insight Embeddable Visualizations: source launchpad", "repositoryName": "mappls-insight-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Web" ], "productAreas": [ "gis-analytics", "offline-automotive", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898", "sourceUrl": "https://github.com/mappls-api/mappls-insight-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-insight-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 0ae2cda7c0a988f9a2be664e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-insight-sdk` and fingerprint `0ae2cda7c0a988f9a2be664e` recorded in the project", "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Sample code for Insight Dashboard”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-insight-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-insight-sdk` with fingerprint `0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 0ae2cda7c0a988f9a2be664e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Sample code for Insight Dashboard” (HTML). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "HTML", "label": "Sample code for Insight Dashboard", "code": "\n\n\n\n\n

Insight Iframes

\n

You can use the iframe to embed your created dashboards:

\n\n \n\n\n\n" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-insight-sdk\",\n fingerprint: \"0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "javascript", "label": "Browser and bridge lifecycle seam", "code": "// No endpoint, package, callback, or credential is inferred by this example.\nexport const source = Object.freeze({\n slug: \"mappls-insight-sdk\",\n fingerprint: \"0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898\",\n providerCallsEnabled: false,\n});\n\nexport function createOwner() {\n let generation = 0;\n return {\n begin() { if (!source.providerCallsEnabled) throw new Error(\"selection_required\"); return ++generation; },\n accepts(candidateGeneration) { return candidateGeneration === generation; },\n dispose() { generation += 1; },\n };\n}" } ], "workshop": { "title": "mappls-insight-sdk evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "gis-site-selection", "geojson-operations-layer" ], "starterSlug": "mappls-insight-sdk", "downloadPath": "/downloads/source-starters/mappls-insight-sdk.zip" } ``` ## source-launchpad · Mappls Intouch Android SDK: source launchpad - Identity: `source-launchpad:mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-android-sdk - State model: stateful ```json { "slug": "mappls-intouch-android-sdk", "sourceGuideSlug": "mappls-intouch-android-sdk", "title": "Mappls Intouch Android SDK: source launchpad", "repositoryName": "mappls-intouch-android-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateful", "readiness": "source-ready", "platforms": [ "Android" ], "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4", "sourceUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 47e2aea8b4e7549e12b44dfe. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-intouch-android-sdk` and fingerprint `47e2aea8b4e7549e12b44dfe` recorded in the project", "An Android project with a supported Gradle and Kotlin or Java toolchain", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-intouch-android-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-intouch-android-sdk` with fingerprint `47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 47e2aea8b4e7549e12b44dfe. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-intouch-android-sdk\",\n fingerprint: \"47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "kotlin", "label": "Kotlin release guard", "code": "// Application-owned evidence; add SDK symbols only after release selection.\ndata class SourceContract(val slug: String, val fingerprint: String, val providerCallsEnabled: Boolean = false)\nval source = SourceContract(\"mappls-intouch-android-sdk\", \"47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4\")\n\nsealed interface BoundaryResult {\n data class Ready(val value: T, val sourceFingerprint: String) : BoundaryResult\n data class Blocked(val reason: String, val retryable: Boolean) : BoundaryResult\n}\n\nfun requireSelectedRelease() {\n check(source.providerCallsEnabled) { \"selection_required\" }\n}" } ], "workshop": { "title": "mappls-intouch-android-sdk evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "workmate-task-lifecycle", "workmate-proof-review" ], "starterSlug": "mappls-intouch-android-sdk", "downloadPath": "/downloads/source-starters/mappls-intouch-android-sdk.zip" } ``` ## source-launchpad · Mappls Intouch IOS Distribution: source launchpad - Identity: `source-launchpad:mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-ios-distribution - State model: stateful ```json { "slug": "mappls-intouch-ios-distribution", "sourceGuideSlug": "mappls-intouch-ios-distribution", "title": "Mappls Intouch IOS Distribution: source launchpad", "repositoryName": "mappls-intouch-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateful", "readiness": "selection-required", "platforms": [ "iOS" ], "productAreas": [ "tracking-telematics" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c", "sourceUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution", "readmeUrl": null, "evidenceBoundary": "No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 9b4522931dc0fa13f91cd719. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-intouch-ios-distribution` and fingerprint `9b4522931dc0fa13f91cd719` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-intouch-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-intouch-ios-distribution` with fingerprint `9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c`." }, { "title": "Resolve the release contract", "instruction": "No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 9b4522931dc0fa13f91cd719. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-intouch-ios-distribution\",\n fingerprint: \"9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-intouch-ios-distribution\"\n let fingerprint = \"9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-intouch-ios-distribution evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-intouch-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-intouch-ios-distribution.zip" } ``` ## source-launchpad · Mappls Intouch IOS Distribution Base: source launchpad - Identity: `source-launchpad:mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-ios-distribution-base - State model: stateful ```json { "slug": "mappls-intouch-ios-distribution-base", "sourceGuideSlug": "mappls-intouch-ios-distribution-base", "title": "Mappls Intouch IOS Distribution Base: source launchpad", "repositoryName": "mappls-intouch-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateful", "readiness": "selection-required", "platforms": [ "iOS" ], "productAreas": [ "tracking-telematics" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", "sourceUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution-base", "readmeUrl": null, "evidenceBoundary": "No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 01ba4719c80b6fe911b091a7. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-intouch-ios-distribution-base` and fingerprint `01ba4719c80b6fe911b091a7` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-intouch-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-intouch-ios-distribution-base` with fingerprint `01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b`." }, { "title": "Resolve the release contract", "instruction": "No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 01ba4719c80b6fe911b091a7. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-intouch-ios-distribution-base\",\n fingerprint: \"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-intouch-ios-distribution-base\"\n let fingerprint = \"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-intouch-ios-distribution-base evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-intouch-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-intouch-ios-distribution-base.zip" } ``` ## source-launchpad · [Mappls Intouch SDK](): source launchpad - Identity: `source-launchpad:mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-ios-sdk - State model: stateful ```json { "slug": "mappls-intouch-ios-sdk", "sourceGuideSlug": "mappls-intouch-ios-sdk", "title": "[Mappls Intouch SDK](): source launchpad", "repositoryName": "mappls-intouch-ios-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateful", "readiness": "source-ready", "platforms": [ "iOS" ], "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "capture-feedback" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0", "sourceUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is d11c093839d4dfcabfdba4e9. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-intouch-ios-sdk` and fingerprint `d11c093839d4dfcabfdba4e9` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-intouch-ios-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-intouch-ios-sdk` with fingerprint `d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is d11c093839d4dfcabfdba4e9. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-intouch-ios-sdk\",\n fingerprint: \"d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-intouch-ios-sdk\"\n let fingerprint = \"d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-intouch-ios-sdk evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-intouch-ios-sdk", "downloadPath": "/downloads/source-starters/mappls-intouch-ios-sdk.zip" } ``` ## source-launchpad · Mappls Intouch REST Apis: source launchpad - Identity: `source-launchpad:mappls-intouch-rest-apis` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-rest-apis - State model: stateful ```json { "slug": "mappls-intouch-rest-apis", "sourceGuideSlug": "mappls-intouch-rest-apis", "title": "Mappls Intouch REST Apis: source launchpad", "repositoryName": "mappls-intouch-rest-apis", "kind": "REST API", "maturity": "current", "stateModel": "stateful", "readiness": "source-ready", "platforms": [ "REST" ], "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "06df37d758e9eed1e65f69df10a6cf82963da86e6d1417f56a2ffa7c7d8408c4", "sourceUrl": "https://github.com/mappls-api/mappls-intouch-rest-apis", "readmeUrl": "https://github.com/mappls-api/mappls-intouch-rest-apis/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 06df37d758e9eed1e65f69df. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-intouch-rest-apis` and fingerprint `06df37d758e9eed1e65f69df` recorded in the project", "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-intouch-rest-apis. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-intouch-rest-apis` with fingerprint `06df37d758e9eed1e65f69df10a6cf82963da86e6d1417f56a2ffa7c7d8408c4`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 06df37d758e9eed1e65f69df. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep rest api symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-intouch-rest-apis\",\n fingerprint: \"06df37d758e9eed1e65f69df10a6cf82963da86e6d1417f56a2ffa7c7d8408c4\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mappls-intouch-rest-apis\"\n fingerprint: str = \"06df37d758e9eed1e65f69df10a6cf82963da86e6d1417f56a2ffa7c7d8408c4\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mappls-intouch-rest-apis evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "route-preview", "delivery-eta", "fleet-geofences", "webhook-reliability", "oauth-server-integration" ], "starterSlug": "mappls-intouch-rest-apis", "downloadPath": "/downloads/source-starters/mappls-intouch-rest-apis.zip" } ``` ## source-launchpad · Mappls iOS SDK: source launchpad - Identity: `source-launchpad:mappls-ios-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-ios-sdk - State model: stateless ```json { "slug": "mappls-ios-sdk", "sourceGuideSlug": "mappls-ios-sdk", "title": "Mappls iOS SDK: source launchpad", "repositoryName": "mappls-ios-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce", "sourceUrl": "https://github.com/mappls-api/mappls-ios-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-ios-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 3e3adfeaccf78bbea89a8cbb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-ios-sdk` and fingerprint `3e3adfeaccf78bbea89a8cbb` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-ios-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-ios-sdk` with fingerprint `3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 3e3adfeaccf78bbea89a8cbb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-ios-sdk\",\n fingerprint: \"3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-ios-sdk\"\n let fingerprint = \"3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-ios-sdk evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-ios-sdk", "downloadPath": "/downloads/source-starters/mappls-ios-sdk.zip" } ``` ## source-launchpad · Mappls LMS IOS Distribution: source launchpad - Identity: `source-launchpad:mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-lms-ios-distribution - State model: stateless ```json { "slug": "mappls-lms-ios-distribution", "sourceGuideSlug": "mappls-lms-ios-distribution", "title": "Mappls LMS IOS Distribution: source launchpad", "repositoryName": "mappls-lms-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "other" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9", "sourceUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution/blob/main/Package.swift", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is a9995a27ea65a15fcd371bcb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-lms-ios-distribution` and fingerprint `a9995a27ea65a15fcd371bcb` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-lms-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-lms-ios-distribution` with fingerprint `a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is a9995a27ea65a15fcd371bcb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-lms-ios-distribution\",\n fingerprint: \"a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-lms-ios-distribution\"\n let fingerprint = \"a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-lms-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [], "starterSlug": "mappls-lms-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-lms-ios-distribution.zip" } ``` ## source-launchpad · Mappls LMS IOS Distribution Base: source launchpad - Identity: `source-launchpad:mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-lms-ios-distribution-base - State model: stateless ```json { "slug": "mappls-lms-ios-distribution-base", "sourceGuideSlug": "mappls-lms-ios-distribution-base", "title": "Mappls LMS IOS Distribution Base: source launchpad", "repositoryName": "mappls-lms-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "other" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9", "sourceUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base/blob/main/Package.swift", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c5f9894dd4d6f5a5c44eba24. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-lms-ios-distribution-base` and fingerprint `c5f9894dd4d6f5a5c44eba24` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-lms-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-lms-ios-distribution-base` with fingerprint `c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c5f9894dd4d6f5a5c44eba24. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-lms-ios-distribution-base\",\n fingerprint: \"c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-lms-ios-distribution-base\"\n let fingerprint = \"c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-lms-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [], "starterSlug": "mappls-lms-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-lms-ios-distribution-base.zip" } ``` ## source-launchpad · Mappls Location Capture SDK: source launchpad - Identity: `source-launchpad:mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-location-capture-android-sdk - State model: hybrid ```json { "slug": "mappls-location-capture-android-sdk", "sourceGuideSlug": "mappls-location-capture-android-sdk", "title": "Mappls Location Capture SDK: source launchpad", "repositoryName": "mappls-location-capture-android-sdk", "kind": "SDK", "maturity": "current", "stateModel": "hybrid", "readiness": "source-ready", "platforms": [ "Android" ], "productAreas": [ "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "capture-feedback" ], "duration": "35 minutes", "outcome": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7", "sourceUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is b698bbb4e4a361b24ec4a5d2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `mappls-location-capture-android-sdk` and fingerprint `b698bbb4e4a361b24ec4a5d2` recorded in the project", "An Android project with a supported Gradle and Kotlin or Java toolchain", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Kotlin (settings.gradle.kts)”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-location-capture-android-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-location-capture-android-sdk` with fingerprint `b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is b698bbb4e4a361b24ec4a5d2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Kotlin (settings.gradle.kts)” (Kotlin). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Kotlin", "label": "Kotlin (settings.gradle.kts)", "code": "pluginManagement {\n repositories {\n maven(url = \"https://maven.mappls.com/repository/mappls/\")\n }\n }\n dependencyResolutionManagement {\n repositories {\n google()\n mavenCentral()\n maven(url = \"https://maven.mappls.com/repository/mappls/\")\n }\n }" }, { "language": "Groovy", "label": "Groovy (settings.gradle)", "code": "pluginManagement {\n repositories {\n maven {\n url 'https://maven.mappls.com/repository/mappls/'\n }\n }\n }\n dependencyResolutionManagement { \n repositories { \n google() \n mavenCentral() \n maven { \n url 'https://maven.mappls.com/repository/mappls/' \n } \n } \n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "buildscript {\n dependencies {\n classpath(\"com.mappls.services:mappls-services:1.0.0\")\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n }" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "buildscript {\n dependencies {\n classpath 'com.mappls.services:mappls-services:1.0.0'\n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n }" }, { "language": "Kotlin", "label": "Kotlin (build.gradle.kts)", "code": "plugins {\n id(\"com.android.application\")\n // Add the Mappls services Gradle plugin \n id(\"com.mappls.services.android\")\n }" }, { "language": "Groovy", "label": "Groovy (build.gradle)", "code": "plugins {\n id 'com.android.application'\n // Add the Mappls services Gradle plugin\n id 'com.mappls.services.android'\n }" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-location-capture-android-sdk\",\n fingerprint: \"b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "kotlin", "label": "Kotlin release guard", "code": "// Application-owned evidence; add SDK symbols only after release selection.\ndata class SourceContract(val slug: String, val fingerprint: String, val providerCallsEnabled: Boolean = false)\nval source = SourceContract(\"mappls-location-capture-android-sdk\", \"b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7\")\n\nsealed interface BoundaryResult {\n data class Ready(val value: T, val sourceFingerprint: String) : BoundaryResult\n data class Blocked(val reason: String, val retryable: Boolean) : BoundaryResult\n}\n\nfun requireSelectedRelease() {\n check(source.providerCallsEnabled) { \"selection_required\" }\n}" } ], "workshop": { "title": "mappls-location-capture-android-sdk evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "workmate-task-lifecycle", "workmate-proof-review" ], "starterSlug": "mappls-location-capture-android-sdk", "downloadPath": "/downloads/source-starters/mappls-location-capture-android-sdk.zip" } ``` ## source-launchpad · Mappls Location Capture IOS SDK: source launchpad - Identity: `source-launchpad:mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-location-capture-ios-sdk - State model: hybrid ```json { "slug": "mappls-location-capture-ios-sdk", "sourceGuideSlug": "mappls-location-capture-ios-sdk", "title": "Mappls Location Capture IOS SDK: source launchpad", "repositoryName": "mappls-location-capture-ios-sdk", "kind": "SDK", "maturity": "current", "stateModel": "hybrid", "readiness": "selection-required", "platforms": [ "iOS" ], "productAreas": [ "capture-feedback" ], "duration": "35 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", "sourceUrl": "https://github.com/mappls-api/mappls-location-capture-ios-sdk", "readmeUrl": null, "evidenceBoundary": "No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 01ba4719c80b6fe911b091a7. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `mappls-location-capture-ios-sdk` and fingerprint `01ba4719c80b6fe911b091a7` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-location-capture-ios-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-location-capture-ios-sdk` with fingerprint `01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b`." }, { "title": "Resolve the release contract", "instruction": "No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 01ba4719c80b6fe911b091a7. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-location-capture-ios-sdk\",\n fingerprint: \"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-location-capture-ios-sdk\"\n let fingerprint = \"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-location-capture-ios-sdk evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness" ], "starterSlug": "mappls-location-capture-ios-sdk", "downloadPath": "/downloads/source-starters/mappls-location-capture-ios-sdk.zip" } ``` ## source-launchpad · Mappls Location Capture SDK (iOS): source launchpad - Identity: `source-launchpad:mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-location-capture-sdk-ios-distribution - State model: hybrid ```json { "slug": "mappls-location-capture-sdk-ios-distribution", "sourceGuideSlug": "mappls-location-capture-sdk-ios-distribution", "title": "Mappls Location Capture SDK (iOS): source launchpad", "repositoryName": "mappls-location-capture-sdk-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9", "sourceUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is aa62d5d6bb832bc41af55ce8. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-location-capture-sdk-ios-distribution` and fingerprint `aa62d5d6bb832bc41af55ce8` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Using Swift Package Manager (SPM)”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-location-capture-sdk-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-location-capture-sdk-ios-distribution` with fingerprint `aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is aa62d5d6bb832bc41af55ce8. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Using Swift Package Manager (SPM)” (Text). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Text", "label": "Using Swift Package Manager (SPM)", "code": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution.git" }, { "language": "XML", "label": "Permissions (Required)", "code": "NSLocationWhenInUseUsageDescription\nLocation is required to capture your current position." }, { "language": "Swift", "label": "Initialization (Required)", "code": "LocationServiceProviderManager.shared.initialize() { result in\n switch result {\n case .success:\n print(\"SDK Initialized successfully\")\n case .failure(let error):\n print(\"Initialization failed:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "SDK Configuration (Optional)", "code": "try LocationServiceProviderManager.shared.configure(\n retryMode: .single, // .single or .subscribe\n timeout: 60, // seconds\n accuracy: 15, // meters\n distance: 0, // meters\n maxPacketSize: 5 // applicable for subscribe mode\n)" }, { "language": "Swift", "label": "1. Single-Shot Location Fetch", "code": "LocationServiceProviderManager.shared.getOneTimeLocation { result in\n switch result {\n case .success(let event):\n print(\"\"\"\n Location:\n lat=\\(event.latitude),\n lng=\\(event.longitude),\n accuracy=\\(event.horizontalAccuracy),\n acceptable=\\(event.isAccpectable),\n mock=\\(event.isMockLocation)\n \"\"\")\n case .failure(let error):\n print(\"Error:\", error.localizedDescription)\n }\n}" }, { "language": "Swift", "label": "2. Subscribed Location Fetch (Limited)", "code": "try LocationServiceProviderManager.shared.configure(\n retryMode: .subscribe,\n maxPacketSize: 5\n)\n\nLocationServiceProviderManager.shared.subscribeLocationUpdate { result in\n switch result {\n case .success(let event):\n print(\"Location update:\", event)\n case .failure(let error):\n print(\"Stopped:\", error.localizedDescription)\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-location-capture-sdk-ios-distribution\",\n fingerprint: \"aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-location-capture-sdk-ios-distribution\"\n let fingerprint = \"aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-location-capture-sdk-ios-distribution evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-location-capture-sdk-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-location-capture-sdk-ios-distribution.zip" } ``` ## source-launchpad · [Mappls Map SDK](): source launchpad - Identity: `source-launchpad:mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-map-ios-distribution - State model: stateless ```json { "slug": "mappls-map-ios-distribution", "sourceGuideSlug": "mappls-map-ios-distribution", "title": "[Mappls Map SDK](): source launchpad", "repositoryName": "mappls-map-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b", "sourceUrl": "https://github.com/mappls-api/mappls-map-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-map-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fd3d74d52bd9f7cd6db39df1. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-map-ios-distribution` and fingerprint `fd3d74d52bd9f7cd6db39df1` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Dependencies”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-map-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-map-ios-distribution` with fingerprint `fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fd3d74d52bd9f7cd6db39df1. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Dependencies” (Text). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-map-ios-distribution\",\n fingerprint: \"fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-map-ios-distribution\"\n let fingerprint = \"fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-map-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-map-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-map-ios-distribution.zip" } ``` ## source-launchpad · [Mappls Map SDK](): source launchpad - Identity: `source-launchpad:mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-map-ios-distribution-base - State model: stateless ```json { "slug": "mappls-map-ios-distribution-base", "sourceGuideSlug": "mappls-map-ios-distribution-base", "title": "[Mappls Map SDK](): source launchpad", "repositoryName": "mappls-map-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b", "sourceUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c44a5c147bbf3ed89e854974. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-map-ios-distribution-base` and fingerprint `c44a5c147bbf3ed89e854974` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Dependencies”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-map-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-map-ios-distribution-base` with fingerprint `c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c44a5c147bbf3ed89e854974. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Dependencies” (Text). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-map-ios-distribution-base\",\n fingerprint: \"c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-map-ios-distribution-base\"\n let fingerprint = \"c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-map-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-map-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-map-ios-distribution-base.zip" } ``` ## source-launchpad · [Mappls Map SDK](): source launchpad - Identity: `source-launchpad:mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-map-move-ios-distribution-base - State model: stateless ```json { "slug": "mappls-map-move-ios-distribution-base", "sourceGuideSlug": "mappls-map-move-ios-distribution-base", "title": "[Mappls Map SDK](): source launchpad", "repositoryName": "mappls-map-move-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e", "sourceUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is df6752e592f6282a73260c2e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-map-move-ios-distribution-base` and fingerprint `df6752e592f6282a73260c2e` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Dependencies”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-map-move-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-map-move-ios-distribution-base` with fingerprint `df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is df6752e592f6282a73260c2e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Dependencies” (Text). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Text", "label": "Dependencies", "code": "NSLocationAlwaysAndWhenInUseUsageDescription\n Your location is required\n NSLocationAlwaysUsageDescription\n Your location is required\n NSLocationWhenInUseUsageDescription\n Your location is required" }, { "language": "Swift", "label": "MapplsMap", "code": "MapplsMapAuthenticator.sharedManager().initializeSDKSession { isSucess, error in\n if let error = error {\n // Map cannot be initilize\n print(\"error: \\(error.localizedDescription)\")\n } else {\n // Map is authorized sucessfully.\n }\n}" }, { "language": "Swift", "label": "MapplsMap", "code": "[[MapplsMapAuthenticator sharedManager] initializeSDKSession:^(BOOL isSuccess, NSError * _Nullable error) {\n if (isSuccess) {\n // Map is authorized sucessfully. \n } else {\n // Map cannot be initilize\n }\n}];" }, { "language": "Objectivec", "label": "Objective C", "code": "#import\n@interface ViewController () \n@end\n@implementation ViewController" }, { "language": "Swift", "label": "Swift", "code": "import MapplsMap\nclass ViewController: UIViewController, MapplsMapViewDelegate {\n override func viewDidLoad() {\n super.viewDidLoad()\n let mapView = MapplsMapView(frame: view.bounds)\n mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n view.addSubview(mapView)\n }\n});" }, { "language": "Text", "label": "Swift", "code": "NSAppTransportSecurity\n\n NSAllowsArbitraryLoads\n \n" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-map-move-ios-distribution-base\",\n fingerprint: \"df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-map-move-ios-distribution-base\"\n let fingerprint = \"df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-map-move-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-map-move-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-map-move-ios-distribution-base.zip" } ``` ## source-launchpad · [Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad - Identity: `source-launchpad:mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-finder-ios-distribution - State model: stateless ```json { "slug": "mappls-nearby-finder-ios-distribution", "sourceGuideSlug": "mappls-nearby-finder-ios-distribution", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad", "repositoryName": "mappls-nearby-finder-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc", "sourceUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c98e46c291897e99300024c3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client.", "prerequisites": [ "The exact source guide `mappls-nearby-finder-ios-distribution` and fingerprint `c98e46c291897e99300024c3` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Installation”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-nearby-finder-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-nearby-finder-ios-distribution` with fingerprint `c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c98e46c291897e99300024c3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Installation” (Ruby). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Ruby", "label": "Installation", "code": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git" }, { "language": "Swift", "label": "Usage", "code": "let locations = CLLocation(latitude: 28.00, longitude: 77.98)\nlet nearbyFinderSearchOptions = MapplsNearbyFinderOptions(recordType: \"\", refLocation: locations)\nlet nearbyFinderSearchManager = MapplsNearbyRecordFinderManager.shared\nnearbyFinderSearchManager.getSearchResults(nearbyFinderSearchOptions) { (response, error) in\n if let error = error {\n print(\"Error\")\n } else if let response = response, let records = response.records {\n print(\"Resonse: \\(records)\")\n } else {\n self.showAlertController(message: \"No Results\")\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderSortBy = UserDefaultsManager.nearbyFinderSortBy {\n let sortByType = MMISearchByType(nearbyFinderSortBy)\n if sortByType == .importance {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortby(sortBy: .importance)\n } else {\n if let nearbyFinderOrderBy = UserDefaultsManager.nearbyFinderOrderBy {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortByDistanceWithOrder(orderBy: MMISortByOrderType(rawValue: nearbyFinderOrderBy))\n }\n }\n }" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderFilterMapplsPin = UserDefaultsManager.nearbyFinderFilterMapplsPin {\n nearbyFinderSearchOptions.filters = [MapplsNearbyRecordFinderKeyValueFilter(filterKey: \"cop\", filterValues: [nearbyFinderFilterMapplsPin])]\n }" }, { "language": "Swift", "label": "Swift", "code": "let alongTheRouteOption = MapplsNearbyFinderAlongTheRouteOptions(path: routeGeometry, recordType: \"WFHORWFO\")\nalongTheRouteOption.geometryType = .polyline6\nlet _ = MapplsNearbyFinderAlongTheRouteManager.shared.getAlongTheRoute(alongTheRouteOption) { (response, error) in\n if let error = error {\n // Error to be handled. \n } else if response == nil {\n // error\n } else if let response = response {\n // Your Logic ...\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-nearby-finder-ios-distribution\",\n fingerprint: \"c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-nearby-finder-ios-distribution\"\n let fingerprint = \"c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-nearby-finder-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-nearby-finder-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-nearby-finder-ios-distribution.zip" } ``` ## source-launchpad · [Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad - Identity: `source-launchpad:mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-finder-ios-distribution-base - State model: stateless ```json { "slug": "mappls-nearby-finder-ios-distribution-base", "sourceGuideSlug": "mappls-nearby-finder-ios-distribution-base", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad", "repositoryName": "mappls-nearby-finder-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc", "sourceUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c98e46c291897e99300024c3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client.", "prerequisites": [ "The exact source guide `mappls-nearby-finder-ios-distribution-base` and fingerprint `c98e46c291897e99300024c3` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "A Mappls project key restricted to the intended app, domain, or backend", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Installation”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-nearby-finder-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-nearby-finder-ios-distribution-base` with fingerprint `c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c98e46c291897e99300024c3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Installation” (Ruby). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Ruby", "label": "Installation", "code": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution.git" }, { "language": "Swift", "label": "Usage", "code": "let locations = CLLocation(latitude: 28.00, longitude: 77.98)\nlet nearbyFinderSearchOptions = MapplsNearbyFinderOptions(recordType: \"\", refLocation: locations)\nlet nearbyFinderSearchManager = MapplsNearbyRecordFinderManager.shared\nnearbyFinderSearchManager.getSearchResults(nearbyFinderSearchOptions) { (response, error) in\n if let error = error {\n print(\"Error\")\n } else if let response = response, let records = response.records {\n print(\"Resonse: \\(records)\")\n } else {\n self.showAlertController(message: \"No Results\")\n }\n}" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderSortBy = UserDefaultsManager.nearbyFinderSortBy {\n let sortByType = MMISearchByType(nearbyFinderSortBy)\n if sortByType == .importance {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortby(sortBy: .importance)\n } else {\n if let nearbyFinderOrderBy = UserDefaultsManager.nearbyFinderOrderBy {\n nearbyFinderSearchOptions.sortBy = RecordFinderSortByDistanceWithOrder(orderBy: MMISortByOrderType(rawValue: nearbyFinderOrderBy))\n }\n }\n }" }, { "language": "Swift", "label": "Optional Parameters", "code": "if let nearbyFinderFilterMapplsPin = UserDefaultsManager.nearbyFinderFilterMapplsPin {\n nearbyFinderSearchOptions.filters = [MapplsNearbyRecordFinderKeyValueFilter(filterKey: \"cop\", filterValues: [nearbyFinderFilterMapplsPin])]\n }" }, { "language": "Swift", "label": "Swift", "code": "let alongTheRouteOption = MapplsNearbyFinderAlongTheRouteOptions(path: routeGeometry, recordType: \"WFHORWFO\")\nalongTheRouteOption.geometryType = .polyline6\nlet _ = MapplsNearbyFinderAlongTheRouteManager.shared.getAlongTheRoute(alongTheRouteOption) { (response, error) in\n if let error = error {\n // Error to be handled. \n } else if response == nil {\n // error\n } else if let response = response {\n // Your Logic ...\n }\n}" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-nearby-finder-ios-distribution-base\",\n fingerprint: \"c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-nearby-finder-ios-distribution-base\"\n let fingerprint = \"c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-nearby-finder-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-nearby-finder-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-nearby-finder-ios-distribution-base.zip" } ``` ## source-launchpad · Mappls Nearby Search Widget for iOS: source launchpad - Identity: `source-launchpad:mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-ui-ios-distribution - State model: stateless ```json { "slug": "mappls-nearby-ui-ios-distribution", "sourceGuideSlug": "mappls-nearby-ui-ios-distribution", "title": "Mappls Nearby Search Widget for iOS: source launchpad", "repositoryName": "mappls-nearby-ui-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f", "sourceUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 139be695050e0183761cf105. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-nearby-ui-ios-distribution` and fingerprint `139be695050e0183761cf105` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “MapplsNearbyCategoriesViewController”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-nearby-ui-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-nearby-ui-ios-distribution` with fingerprint `139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 139be695050e0183761cf105. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “MapplsNearbyCategoriesViewController” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "MapplsNearbyCategoriesViewController", "code": "let nearbyUI = MapplsNearbyCategoriesViewController()\nself.navigationController?.pushViewController(nearbyUI, animated: false)" }, { "language": "Swift", "label": "Properties of MapplsNearbyCategoriesViewController", "code": "var nearbyCategories = [MapplsNearbyCategories]()\n\n let selectedImage = UIImage(named: \"placePickerMarker\")?.withRenderingMode(.alwaysTemplate)\n let categoriesImage = UIImage(named: \"Coffee\")\n\n let coffeeCategory = MapplsNearbyCategories(title: \"Coffee\", selectedBackgroundColor: selectedColor, unselectedBackgroundColor: .white, selectedImage: selectedImage ?? UIImage(), unselectedImage: selectedImage ?? UIImage(), unselectedTextColor: .black, selectedTextColor: .white, isSelected: true, categoryKeywords: [\"FODCOF\"], mapNearbyCategoryIcon: categoriesImage)\n\n nearbyCategories.append(coffeeCategory)\n\n nearbyUI.nearbyCategories = nearbyCategories" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method which will be called when the user click next button in `MapplsNearbyCategoriesViewController` class\n /// - Parameters:\n /// - refLocation: It is location selected from place picker or your current location or location provided by used as refLocation.\n /// - selectedCategories: It is the array of `MapplsNearbyCategories` items selected from the categories\n /// - error: This will show an error message in case of any failure in `MapplsNearbyCategoriesViewController` class on next button clicked.\n \n func didNextButtonClicked(refLocation: String?, selectedCategories: [MapplsNearbyCategories]?, error: String? )" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby icon is taped on the map. It will return a nearby response for the taped icon.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbyIcon(place: MapplsAtlasSuggestion)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby result in ListView is tapped. It will return a nearby response for the tapped item.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbySuggestionFromTable(place: MapplsAtlasSuggestion)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-nearby-ui-ios-distribution\",\n fingerprint: \"139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-nearby-ui-ios-distribution\"\n let fingerprint = \"139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-nearby-ui-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-nearby-ui-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-nearby-ui-ios-distribution.zip" } ``` ## source-launchpad · Mappls Nearby Search Widget for iOS: source launchpad - Identity: `source-launchpad:mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-ui-ios-distribution-base - State model: stateless ```json { "slug": "mappls-nearby-ui-ios-distribution-base", "sourceGuideSlug": "mappls-nearby-ui-ios-distribution-base", "title": "Mappls Nearby Search Widget for iOS: source launchpad", "repositoryName": "mappls-nearby-ui-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347", "sourceUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 97c2b14769200eece962afc2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-nearby-ui-ios-distribution-base` and fingerprint `97c2b14769200eece962afc2` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “MapplsNearbyCategoriesViewController”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-nearby-ui-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-nearby-ui-ios-distribution-base` with fingerprint `97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 97c2b14769200eece962afc2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “MapplsNearbyCategoriesViewController” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "MapplsNearbyCategoriesViewController", "code": "let nearbyUI = MapplsNearbyCategoriesViewController()\nself.navigationController?.pushViewController(nearbyUI, animated: false)" }, { "language": "Swift", "label": "Properties of MapplsNearbyCategoriesViewController", "code": "var nearbyCategories = [MapplsNearbyCategories]()\n\n let selectedImage = UIImage(named: \"placePickerMarker\")?.withRenderingMode(.alwaysTemplate)\n let categoriesImage = UIImage(named: \"Coffee\")\n\n let coffeeCategory = MapplsNearbyCategories(title: \"Coffee\", selectedBackgroundColor: selectedColor, unselectedBackgroundColor: .white, selectedImage: selectedImage ?? UIImage(), unselectedImage: selectedImage ?? UIImage(), unselectedTextColor: .black, selectedTextColor: .white, isSelected: true, categoryKeywords: [\"FODCOF\"], mapNearbyCategoryIcon: categoriesImage)\n\n nearbyCategories.append(coffeeCategory)\n\n nearbyUI.nearbyCategories = nearbyCategories" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method which will be called when the user click next button in `MapplsNearbyCategoriesViewController` class\n /// - Parameters:\n /// - refLocation: It is location selected from place picker or your current location or location provided by used as refLocation.\n /// - selectedCategories: It is the array of `MapplsNearbyCategories` items selected from the categories\n /// - error: This will show an error message in case of any failure in `MapplsNearbyCategoriesViewController` class on next button clicked.\n \n func didNextButtonClicked(refLocation: String?, selectedCategories: [MapplsNearbyCategories]?, error: String? )" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby icon is taped on the map. It will return a nearby response for the taped icon.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbyIcon(place: MapplsAtlasSuggestion)" }, { "language": "Swift", "label": "Call Back Handler", "code": "/// A delegate method will be called when the nearby result in ListView is tapped. It will return a nearby response for the tapped item.\n /// - Parameter place: A concrete subclass of `MapplsSuggestion` to represent suggestedLocations object in results of requests.\n \n func didSelectNearbySuggestionFromTable(place: MapplsAtlasSuggestion)" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-nearby-ui-ios-distribution-base\",\n fingerprint: \"97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-nearby-ui-ios-distribution-base\"\n let fingerprint = \"97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-nearby-ui-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-nearby-ui-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-nearby-ui-ios-distribution-base.zip" } ``` ## source-launchpad · MapplsRasterCatalogue Plugin for iOS: source launchpad - Identity: `source-launchpad:mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-raster-catalogue-ios-distribution - State model: stateless ```json { "slug": "mappls-raster-catalogue-ios-distribution", "sourceGuideSlug": "mappls-raster-catalogue-ios-distribution", "title": "MapplsRasterCatalogue Plugin for iOS: source launchpad", "repositoryName": "mappls-raster-catalogue-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a", "sourceUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 4bc01e5166d2793f3a0ca310. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-raster-catalogue-ios-distribution` and fingerprint `4bc01e5166d2793f3a0ca310` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Initialization MapplsRasterCatalogue Plugin”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-raster-catalogue-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-raster-catalogue-ios-distribution` with fingerprint `4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 4bc01e5166d2793f3a0ca310. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Initialization MapplsRasterCatalogue Plugin” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Initialization MapplsRasterCatalogue Plugin", "code": "var rasterCataloguePlugin : MapplsRasterCataloguePlugin = MapplsRasterCataloguePlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 2 - Adding RasterCatalogue layer on Map", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\nself.rasterCataloguePlugin.addRasterCatalogueLayer(request)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\ngeoanalyticsPlugin.removeRasterCatalogueLayer(layerRequestState))" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-raster-catalogue-ios-distribution\",\n fingerprint: \"4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-raster-catalogue-ios-distribution\"\n let fingerprint = \"4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-raster-catalogue-ios-distribution evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-raster-catalogue-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-raster-catalogue-ios-distribution.zip" } ``` ## source-launchpad · MapplsRasterCatalogue Plugin for iOS: source launchpad - Identity: `source-launchpad:mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-raster-catalogue-ios-distribution-base - State model: stateless ```json { "slug": "mappls-raster-catalogue-ios-distribution-base", "sourceGuideSlug": "mappls-raster-catalogue-ios-distribution-base", "title": "MapplsRasterCatalogue Plugin for iOS: source launchpad", "repositoryName": "mappls-raster-catalogue-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "stateless", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a", "sourceUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 4bc01e5166d2793f3a0ca310. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-raster-catalogue-ios-distribution-base` and fingerprint `4bc01e5166d2793f3a0ca310` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Initialization MapplsRasterCatalogue Plugin”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-raster-catalogue-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-raster-catalogue-ios-distribution-base` with fingerprint `4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 4bc01e5166d2793f3a0ca310. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Initialization MapplsRasterCatalogue Plugin” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Initialization MapplsRasterCatalogue Plugin", "code": "var rasterCataloguePlugin : MapplsRasterCataloguePlugin = MapplsRasterCataloguePlugin(mapView: mapView)" }, { "language": "Swift", "label": "Step 2 - Adding RasterCatalogue layer on Map", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\nself.rasterCataloguePlugin.addRasterCatalogueLayer(request)" }, { "language": "Swift", "label": "Other Methods Available:", "code": "let request = MapplsRasterCatalogueLayerOptions(layerType: .airport5To8KM)\ngeoanalyticsPlugin.removeRasterCatalogueLayer(layerRequestState))" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-raster-catalogue-ios-distribution-base\",\n fingerprint: \"4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-raster-catalogue-ios-distribution-base\"\n let fingerprint = \"4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-raster-catalogue-ios-distribution-base evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-raster-catalogue-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-raster-catalogue-ios-distribution-base.zip" } ``` ## source-launchpad · Mappls Intouch React Native SDK: source launchpad - Identity: `source-launchpad:mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-react-native-intouch-sdk - State model: stateful ```json { "slug": "mappls-react-native-intouch-sdk", "sourceGuideSlug": "mappls-react-native-intouch-sdk", "title": "Mappls Intouch React Native SDK: source launchpad", "repositoryName": "mappls-react-native-intouch-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateful", "readiness": "source-ready", "platforms": [ "React Native" ], "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69", "sourceUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is cb0703543c8025cdd17cc535. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `mappls-react-native-intouch-sdk` and fingerprint `cb0703543c8025cdd17cc535` recorded in the project", "A React Native project with both native build environments", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-react-native-intouch-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-react-native-intouch-sdk` with fingerprint `cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is cb0703543c8025cdd17cc535. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-react-native-intouch-sdk\",\n fingerprint: \"cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mappls-react-native-intouch-sdk\"\n fingerprint: str = \"cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mappls-react-native-intouch-sdk evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "react-native-native-parity" ], "starterSlug": "mappls-react-native-intouch-sdk", "downloadPath": "/downloads/source-starters/mappls-react-native-intouch-sdk.zip" } ``` ## source-launchpad · Mappls React Native SDK: source launchpad - Identity: `source-launchpad:mappls-react-native-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-react-native-sdk - State model: stateless ```json { "slug": "mappls-react-native-sdk", "sourceGuideSlug": "mappls-react-native-sdk", "title": "Mappls React Native SDK: source launchpad", "repositoryName": "mappls-react-native-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "React Native" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4", "sourceUrl": "https://github.com/mappls-api/mappls-react-native-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-react-native-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 2bf827b9457541a5e1624942. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-react-native-sdk` and fingerprint `2bf827b9457541a5e1624942` recorded in the project", "A React Native project with both native build environments", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-react-native-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-react-native-sdk` with fingerprint `2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 2bf827b9457541a5e1624942. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-react-native-sdk\",\n fingerprint: \"2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mappls-react-native-sdk\"\n fingerprint: str = \"2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mappls-react-native-sdk evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "react-native-map", "react-native-native-parity" ], "starterSlug": "mappls-react-native-sdk", "downloadPath": "/downloads/source-starters/mappls-react-native-sdk.zip" } ``` ## source-launchpad · Mappls Map APIs (REST) !: source launchpad - Identity: `source-launchpad:mappls-rest-apis` - Canonical: https://developer.mappls.com/launchpads/mappls-rest-apis - State model: stateless ```json { "slug": "mappls-rest-apis", "sourceGuideSlug": "mappls-rest-apis", "title": "Mappls Map APIs (REST) !: source launchpad", "repositoryName": "mappls-rest-apis", "kind": "REST API", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "REST" ], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "a27fe1435b9cd778f7d5352dc2152e74727c72b640a26515e83969d0f4e455b5", "sourceUrl": "https://github.com/mappls-api/mappls-rest-apis", "readmeUrl": "https://github.com/mappls-api/mappls-rest-apis/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is a27fe1435b9cd778f7d5352d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-rest-apis` and fingerprint `a27fe1435b9cd778f7d5352d` recorded in the project", "A trusted backend or API client capable of HTTPS requests", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-rest-apis. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-rest-apis` with fingerprint `a27fe1435b9cd778f7d5352dc2152e74727c72b640a26515e83969d0f4e455b5`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is a27fe1435b9cd778f7d5352d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep rest api symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-rest-apis\",\n fingerprint: \"a27fe1435b9cd778f7d5352dc2152e74727c72b640a26515e83969d0f4e455b5\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"mappls-rest-apis\"\n fingerprint: str = \"a27fe1435b9cd778f7d5352dc2152e74727c72b640a26515e83969d0f4e455b5\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "mappls-rest-apis evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "address-autocomplete", "route-preview", "delivery-eta", "fleet-geofences", "gis-site-selection" ], "starterSlug": "mappls-rest-apis", "downloadPath": "/downloads/source-starters/mappls-rest-apis.zip" } ``` ## source-launchpad · MapplsUIWidgets - UI Components SDK for iOS: source launchpad - Identity: `source-launchpad:mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-ui-widget-ios-distribution - State model: hybrid ```json { "slug": "mappls-ui-widget-ios-distribution", "sourceGuideSlug": "mappls-ui-widget-ios-distribution", "title": "MapplsUIWidgets - UI Components SDK for iOS: source launchpad", "repositoryName": "mappls-ui-widget-ios-distribution", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349", "sourceUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution", "readmeUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fa23204b72658dbd8f725bcd. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-ui-widget-ios-distribution` and fingerprint `fa23204b72658dbd8f725bcd` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Add a full-screen control”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-ui-widget-ios-distribution. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-ui-widget-ios-distribution` with fingerprint `fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fa23204b72658dbd8f725bcd. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Add a full-screen control” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Add a full-screen control", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n override func viewDidLoad() {\n makeButton()\n }\n\n // Present the Autocomplete view controller when the button is pressed.\n @objc func autocompleteClicked(_ sender: UIButton) {\n let autocompleteController = MapplsAutocompleteViewController(theme: .auto)\n autocompleteController.delegate = self\n\n // Specify a filter.\n let filter = MapplsAutocompleteFilter()\n autocompleteController.autocompleteFilter = filter\n\n // Display the autocomplete view controller.\n present(autocompleteController, animated: true, completion: nil)\n }\n\n // Add a button to the view.\n func makeButton() {\n let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35))\n btnLaunchAc.backgroundColor = .blue\n btnLaunchAc.setTitle(\"Launch autocomplete\", for: .normal)\n btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside)\n self.view.addSubview(btnLaunchAc)\n }\n\n}\n\nextension ViewController: MapplsAutocompleteViewControllerDelegate {\n\n // Handle the user's selection.\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n dismiss(animated: true, completion: nil)\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n \n func didRequestForAutoSearchOptions(options: MapplsAutoSearchAtlasOptions) -> MapplsAutoSearchAtlasOptions {\n return options\n }\n \n func didRequestForTextSearchOptions(options: MapplsTextSearchAtlasOptions) -> MapplsTextSearchAtlasOptions {\n return options\n }\n\n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // User canceled the operation.\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n dismiss(animated: true, completion: nil)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIWrapper: UIViewControllerRepresentable {\n ...\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Environment(\\.presentationMode) var presentationMode\n\n func makeUIViewController(context: UIViewControllerRepresentableContext) -> MapplsAutocompleteViewController {\n let autocompleteViewController = MapplsAutocompleteViewController() \n autocompleteViewController.delegate = context.coordinator\n return autocompleteViewController\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func updateUIViewController(_ uiViewController: MapplsAutocompleteViewController, context: UIViewControllerRepresentableContext) {\n\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Binding var placeSuggestion: MapplsAtlasSuggestion?" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIView: View {\n @Binding var placeSuggestion: MapplsAtlasSuggestion?\n \n var body: some View {\n MapplsAutocompleteViewControllerSwiftUIWrapper(placeSuggestion: $placeSuggestion)\n .navigationBarHidden(true)\n }\n }" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-ui-widget-ios-distribution\",\n fingerprint: \"fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-ui-widget-ios-distribution\"\n let fingerprint = \"fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-ui-widget-ios-distribution evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-ui-widget-ios-distribution", "downloadPath": "/downloads/source-starters/mappls-ui-widget-ios-distribution.zip" } ``` ## source-launchpad · MapplsUIWidgets - UI Components SDK for iOS: source launchpad - Identity: `source-launchpad:mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-ui-widget-ios-distribution-base - State model: hybrid ```json { "slug": "mappls-ui-widget-ios-distribution-base", "sourceGuideSlug": "mappls-ui-widget-ios-distribution-base", "title": "MapplsUIWidgets - UI Components SDK for iOS: source launchpad", "repositoryName": "mappls-ui-widget-ios-distribution-base", "kind": "Distribution", "maturity": "distribution", "stateModel": "hybrid", "readiness": "binary-review", "platforms": [ "iOS" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "35 minutes", "outcome": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22", "sourceUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base", "readmeUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base/blob/main/README.md", "evidenceBoundary": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is e117a13d81e7182e759a4d72. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-ui-widget-ios-distribution-base` and fingerprint `e117a13d81e7182e759a4d72` recorded in the project", "An iOS project with Xcode and the package manager required by the source release", "The corresponding product entitlement enabled for the developer application", "An approved package version, checksum, dependency matrix, entitlement, and owning product guide", "A reviewed, credential-free source example starting with “Add a full-screen control”", "An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-ui-widget-ios-distribution-base. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-ui-widget-ios-distribution-base` with fingerprint `e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22`." }, { "title": "Resolve the release contract", "instruction": "This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is e117a13d81e7182e759a4d72. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep distribution symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Add a full-screen control” (Swift). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove the complete state boundary", "instruction": "Run intent, launch, candidate, validation, application commit or review, cancellation, late callback, restart, and deterministic disposal as separate states.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "Swift", "label": "Add a full-screen control", "code": "import UIKit\nimport MapplsUIWidgets\n\nclass ViewController: UIViewController {\n\n override func viewDidLoad() {\n makeButton()\n }\n\n // Present the Autocomplete view controller when the button is pressed.\n @objc func autocompleteClicked(_ sender: UIButton) {\n let autocompleteController = MapplsAutocompleteViewController(theme: .auto)\n autocompleteController.delegate = self\n\n // Specify a filter.\n let filter = MapplsAutocompleteFilter()\n autocompleteController.autocompleteFilter = filter\n\n // Display the autocomplete view controller.\n present(autocompleteController, animated: true, completion: nil)\n }\n\n // Add a button to the view.\n func makeButton() {\n let btnLaunchAc = UIButton(frame: CGRect(x: 5, y: 150, width: 300, height: 35))\n btnLaunchAc.backgroundColor = .blue\n btnLaunchAc.setTitle(\"Launch autocomplete\", for: .normal)\n btnLaunchAc.addTarget(self, action: #selector(autocompleteClicked), for: .touchUpInside)\n self.view.addSubview(btnLaunchAc)\n }\n\n}\n\nextension ViewController: MapplsAutocompleteViewControllerDelegate {\n\n // Handle the user's selection.\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withPlace place: MapplsAtlasSuggestion, resultType type: MapplsAutosuggestResultType) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n dismiss(animated: true, completion: nil)\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withFavouritePlace place: MapplsUIWidgetAutosuggestFavouritePlace) {\n print(\"Place name: \\(place.placeName)\")\n print(\"Place mapplsPin: \\(place.mapplsPin)\")\n }\n\n func didAutocomplete(viewController: MapplsAutocompleteViewController, withSuggestion suggestion: MapplsSearchPrediction) {\n \n }\n \n func didRequestForAutoSearchOptions(options: MapplsAutoSearchAtlasOptions) -> MapplsAutoSearchAtlasOptions {\n return options\n }\n \n func didRequestForTextSearchOptions(options: MapplsTextSearchAtlasOptions) -> MapplsTextSearchAtlasOptions {\n return options\n }\n\n func didFailAutocomplete(viewController: MapplsAutocompleteViewController, withError error: NSError) {\n // TODO: handle the error.\n print(\"Error: \", error.localizedDescription)\n }\n\n // User canceled the operation.\n func wasCancelled(viewController: MapplsAutocompleteViewController) {\n dismiss(animated: true, completion: nil)\n }\n\n // Turn the network activity indicator on and off again.\n func didRequestAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = true\n }\n\n func didUpdateAutocompletePredictions(viewController: MapplsAutocompleteViewController) {\n UIApplication.shared.isNetworkActivityIndicatorVisible = false\n }\n\n}" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIWrapper: UIViewControllerRepresentable {\n ...\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Environment(\\.presentationMode) var presentationMode\n\n func makeUIViewController(context: UIViewControllerRepresentableContext) -> MapplsAutocompleteViewController {\n let autocompleteViewController = MapplsAutocompleteViewController() \n autocompleteViewController.delegate = context.coordinator\n return autocompleteViewController\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "func updateUIViewController(_ uiViewController: MapplsAutocompleteViewController, context: UIViewControllerRepresentableContext) {\n\n }" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "@Binding var placeSuggestion: MapplsAtlasSuggestion?" }, { "language": "Swift", "label": "SwiftUI Full Screen Control", "code": "struct MapplsAutocompleteViewControllerSwiftUIView: View {\n @Binding var placeSuggestion: MapplsAtlasSuggestion?\n \n var body: some View {\n MapplsAutocompleteViewControllerSwiftUIWrapper(placeSuggestion: $placeSuggestion)\n .navigationBarHidden(true)\n }\n }" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-ui-widget-ios-distribution-base\",\n fingerprint: \"e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22\",\n stateModel: \"hybrid\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "swift", "label": "Swift lifecycle seam", "code": "// Keep provider controllers, delegates, credentials, and opaque results outside durable state.\nstruct SourceContract: Sendable {\n let slug = \"mappls-ui-widget-ios-distribution-base\"\n let fingerprint = \"e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22\"\n let providerCallsEnabled = false\n}\n\nenum BoundaryResult: Sendable {\n case ready(Value, sourceFingerprint: String)\n case blocked(reason: String, retryable: Bool)\n}\n\n@MainActor final class IntegrationOwner {\n private(set) var generation = 0\n func begin() throws { guard SourceContract().providerCallsEnabled else { throw IntegrationError.selectionRequired }; generation += 1 }\n func dispose() { generation += 1 } // Late callbacks belong to an older generation.\n}\nenum IntegrationError: Error { case selectionRequired }" } ], "workshop": { "title": "mappls-ui-widget-ios-distribution-base evidence-to-production workshop", "duration": "2 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering intent, generation, candidate, commit, cancellation, late callback, restart, and disposal.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Intent, generation, candidate, commit/review, restart, and disposal remain application-owned", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "ios-map", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs" ], "starterSlug": "mappls-ui-widget-ios-distribution-base", "downloadPath": "/downloads/source-starters/mappls-ui-widget-ios-distribution-base.zip" } ``` ## source-launchpad · Sign up for Mappls: source launchpad - Identity: `source-launchpad:mappls-web-maps` - Canonical: https://developer.mappls.com/launchpads/mappls-web-maps - State model: stateless ```json { "slug": "mappls-web-maps", "sourceGuideSlug": "mappls-web-maps", "title": "Sign up for Mappls: source launchpad", "repositoryName": "mappls-web-maps", "kind": "Guide", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Web" ], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed guide seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "6d102a2fe3c3301e12220a398532907422a24f3ed273877c12f50c754786581c", "sourceUrl": "https://github.com/mappls-api/mappls-web-maps", "readmeUrl": "https://github.com/mappls-api/mappls-web-maps/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 6d102a2fe3c3301e12220a39. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive.", "prerequisites": [ "The exact source guide `mappls-web-maps` and fingerprint `6d102a2fe3c3301e12220a39` recorded in the project", "A browser application and an allowed development origin", "The corresponding product entitlement enabled for the developer application", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Installation”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-web-maps. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-web-maps` with fingerprint `6d102a2fe3c3301e12220a398532907422a24f3ed273877c12f50c754786581c`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 6d102a2fe3c3301e12220a39. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep guide symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Installation” (JavaScript). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "JavaScript", "label": "Installation", "code": "npm i mappls-web-maps" }, { "language": "JavaScript", "label": "Import Package", "code": "import { mappls, mappls_plugin } from 'mappls-web-maps';" }, { "language": "JavaScript", "label": "Import Package", "code": "import { mappls, mappls_plugin } from 'mappls-web-maps'" }, { "language": "JavaScript", "label": "Loading a Map", "code": "import { Component, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { mappls, mappls_plugin } from 'mappls-web-maps';\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [CommonModule],\n template: `\n
\n
\n`,\n})\nexport class AppComponent implements OnInit {\n mapobject:any\n mapplsClassObject:any= new mappls()\n mapplsPluginObject:any= new mappls_plugin()\n title = 'Map_angular';\n\n\n ngOnInit() {\n const loadObject = {\n map: true,\n layer: 'raster', // Optional Default Vector\n version: '3.0', // Optional, other version 3.5 also available with CSP headers\n libraries: ['airspacelayers'], // Optional for Polydraw and airspaceLayers\n plugins: ['direction'], // Optional for any plugins\n //auth:'legacy' /*Use only when you have legacy mappls token*/ \n\n };\n\n this.mapplsClassObject.initialize(\n '---------------Token------------------',\n loadObject,\n () => {\n this.mapobject = this.mapplsClassObject.Map({\n id: 'map',\n properties: {\n center: [28.61, 77.23],\n zoomControl: true,\n location: true,\n },\n });\n }\n \n );\n }\n}" }, { "language": "JavaScript", "label": "Loading a Map", "code": "import { mappls, mappls_plugin } from \"mappls-web-maps\";\nimport { useEffect, useRef, useState } from \"react\";\n\nconst mapplsClassObject = new mappls();\nconst mapplsPluginObject = new mappls_plugin();\n\n\nconst App = () => {\n const mapRef = useRef(null);\n const [isMapLoaded, setIsMapLoaded] = useState(false);\n\n const loadObject = { \n map: true, \n layer: 'raster', // Optional Default Vector\n version: '3.0', // // Optional, other version 3.5 also available with CSP headers\n libraries: ['polydraw'], //Optional for Polydraw and airspaceLayers\n plugins:['direction'] // Optional for All the plugins\n};\n\n useEffect(() => {\n mapplsClassObject.initialize(\"--------Token-------\", loadObject, () => {\n const newMap = mapplsClassObject.Map({\n id: \"map\",\n properties: {\n center: [28.633, 77.2194],\n zoom: 4,\n },\n });\n\n newMap.on(\"load\", () => {\n setIsMapLoaded(true);\n });\n mapRef.current = newMap;\n });\n return () => {\n if (mapRef.current) {\n mapRef.current.remove();\n }\n };\n }, []);\n\n return (\n \n {isMapLoaded}\n \n );\n};\n\nexport default App;" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-web-maps\",\n fingerprint: \"6d102a2fe3c3301e12220a398532907422a24f3ed273877c12f50c754786581c\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "javascript", "label": "Browser and bridge lifecycle seam", "code": "// No endpoint, package, callback, or credential is inferred by this example.\nexport const source = Object.freeze({\n slug: \"mappls-web-maps\",\n fingerprint: \"6d102a2fe3c3301e12220a398532907422a24f3ed273877c12f50c754786581c\",\n providerCallsEnabled: false,\n});\n\nexport function createOwner() {\n let generation = 0;\n return {\n begin() { if (!source.providerCallsEnabled) throw new Error(\"selection_required\"); return ++generation; },\n accepts(candidateGeneration) { return candidateGeneration === generation; },\n dispose() { generation += 1; },\n };\n}" } ], "workshop": { "title": "mappls-web-maps evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "first-web-map", "address-autocomplete", "route-preview", "nearby-discovery", "delivery-eta" ], "starterSlug": "mappls-web-maps", "downloadPath": "/downloads/source-starters/mappls-web-maps.zip" } ``` ## source-launchpad · Mappls Web Maps JS: source launchpad - Identity: `source-launchpad:mappls-web-maps-js` - Canonical: https://developer.mappls.com/launchpads/mappls-web-maps-js - State model: stateless ```json { "slug": "mappls-web-maps-js", "sourceGuideSlug": "mappls-web-maps-js", "title": "Mappls Web Maps JS: source launchpad", "repositoryName": "mappls-web-maps-js", "kind": "Guide", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Web" ], "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Run one reviewed guide seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "sourceFingerprint": "5b7bd5c66a780e8315d64bec5d8e54f375c1ff1f24b536e9bfda9691031ad5a6", "sourceUrl": "https://github.com/mappls-api/mappls-web-maps-js", "readmeUrl": "https://github.com/mappls-api/mappls-web-maps-js/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 5b7bd5c66a780e8315d64bec. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-web-maps-js` and fingerprint `5b7bd5c66a780e8315d64bec` recorded in the project", "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A reviewed, credential-free source example starting with “Adding the Map Script to your web page”", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-web-maps-js. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-web-maps-js` with fingerprint `5b7bd5c66a780e8315d64bec5d8e54f375c1ff1f24b536e9bfda9691031ad5a6`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 5b7bd5c66a780e8315d64bec. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep guide symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "Start from the sanitized source example “Adding the Map Script to your web page” (HTML). Review it against the selected release and move credential placement, validation, timeout, and error mapping into the adapter before running it.", "proof": "One bounded result or UI state is produced from the active source revision and normalized outside provider-owned types." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [ { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "" }, { "language": "HTML", "label": "Adding the Map Script to your web page", "code": "
;" }, { "language": "JavaScript", "label": "Adding the Map Script to your web page", "code": "map = new mappls.Map('map', {center:{lat:28.612964,lng:77.229463} });" }, { "language": "JavaScript", "label": "Marker Implementation", "code": "var marker = new mappls.Marker({\n map: map,\n position: {\"lat\": 28.519467,\"lng\":77.223150}\n\t});" }, { "language": "JavaScript", "label": "Add Geojson layer", "code": "new mappls.addGeoJson({map:map,data:geoData,fitbounds:true,cType:0});" }, { "language": "JavaScript", "label": "Geojson Quick Reference", "code": "new mappls.remove({map:map,layer:jsonData});" } ], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-web-maps-js\",\n fingerprint: \"5b7bd5c66a780e8315d64bec5d8e54f375c1ff1f24b536e9bfda9691031ad5a6\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "javascript", "label": "Browser and bridge lifecycle seam", "code": "// No endpoint, package, callback, or credential is inferred by this example.\nexport const source = Object.freeze({\n slug: \"mappls-web-maps-js\",\n fingerprint: \"5b7bd5c66a780e8315d64bec5d8e54f375c1ff1f24b536e9bfda9691031ad5a6\",\n providerCallsEnabled: false,\n});\n\nexport function createOwner() {\n let generation = 0;\n return {\n begin() { if (!source.providerCallsEnabled) throw new Error(\"selection_required\"); return ++generation; },\n accepts(candidateGeneration) { return candidateGeneration === generation; },\n dispose() { generation += 1; },\n };\n}" } ], "workshop": { "title": "mappls-web-maps-js evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "first-web-map", "address-autocomplete", "route-preview", "nearby-discovery", "delivery-eta" ], "starterSlug": "mappls-web-maps-js", "downloadPath": "/downloads/source-starters/mappls-web-maps-js.zip" } ``` ## source-launchpad · Mappls Web Plugins: source launchpad - Identity: `source-launchpad:mappls-web-plugins` - Canonical: https://developer.mappls.com/launchpads/mappls-web-plugins - State model: stateless ```json { "slug": "mappls-web-plugins", "sourceGuideSlug": "mappls-web-plugins", "title": "Mappls Web Plugins: source launchpad", "repositoryName": "mappls-web-plugins", "kind": "Widget", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Web", "Widgets/Deep links" ], "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "0500ead3cc1dcb4e9f2fcd0882c0d7e550dc18f3bdf539528aec575bcacfd35b", "sourceUrl": "https://github.com/mappls-api/mappls-web-plugins", "readmeUrl": "https://github.com/mappls-api/mappls-web-plugins/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 0500ead3cc1dcb4e9f2fcd08. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material.", "prerequisites": [ "The exact source guide `mappls-web-plugins` and fingerprint `0500ead3cc1dcb4e9f2fcd08` recorded in the project", "A browser application and an allowed development origin", "OAuth client credentials issued for the intended Mappls project", "A Mappls project key restricted to the intended app, domain, or backend", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-web-plugins. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-web-plugins` with fingerprint `0500ead3cc1dcb4e9f2fcd0882c0d7e550dc18f3bdf539528aec575bcacfd35b`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 0500ead3cc1dcb4e9f2fcd08. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep widget symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-web-plugins\",\n fingerprint: \"0500ead3cc1dcb4e9f2fcd0882c0d7e550dc18f3bdf539528aec575bcacfd35b\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "javascript", "label": "Browser and bridge lifecycle seam", "code": "// No endpoint, package, callback, or credential is inferred by this example.\nexport const source = Object.freeze({\n slug: \"mappls-web-plugins\",\n fingerprint: \"0500ead3cc1dcb4e9f2fcd0882c0d7e550dc18f3bdf539528aec575bcacfd35b\",\n providerCallsEnabled: false,\n});\n\nexport function createOwner() {\n let generation = 0;\n return {\n begin() { if (!source.providerCallsEnabled) throw new Error(\"selection_required\"); return ++generation; },\n accepts(candidateGeneration) { return candidateGeneration === generation; },\n dispose() { generation += 1; },\n };\n}" } ], "workshop": { "title": "mappls-web-plugins evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "first-web-map", "address-autocomplete", "route-preview", "nearby-discovery", "delivery-eta" ], "starterSlug": "mappls-web-plugins", "downloadPath": "/downloads/source-starters/mappls-web-plugins.zip" } ``` ## source-launchpad · Workmate SDK - Android: source launchpad - Identity: `source-launchpad:mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-workmate-android-sdk - State model: stateful ```json { "slug": "mappls-workmate-android-sdk", "sourceGuideSlug": "mappls-workmate-android-sdk", "title": "Workmate SDK - Android: source launchpad", "repositoryName": "mappls-workmate-android-sdk", "kind": "SDK", "maturity": "current", "stateModel": "stateful", "readiness": "source-ready", "platforms": [ "Android" ], "productAreas": [ "tracking-telematics", "workforce", "identity-platform" ], "duration": "50 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8", "sourceUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk", "readmeUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is e04a9f1e646d0348e9df1cdb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `mappls-workmate-android-sdk` and fingerprint `e04a9f1e646d0348e9df1cdb` recorded in the project", "An Android project with a supported Gradle and Kotlin or Java toolchain", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for mappls-workmate-android-sdk. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `mappls-workmate-android-sdk` with fingerprint `e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is e04a9f1e646d0348e9df1cdb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sdk symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove the complete state boundary", "instruction": "Run creation, observation, transition, retry, unknown-outcome reconciliation, restart recovery, concurrency conflict, event/outbox delivery, privacy, and retirement against the linked journey model.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"mappls-workmate-android-sdk\",\n fingerprint: \"e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8\",\n stateModel: \"stateful\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Persist command identity before a state-changing adapter call.\nexport type DurableCommand = { aggregateId: string; idempotencyKey: string; expectedVersion: number };\nexport function validateCommand(command: DurableCommand) {\n if (!command.aggregateId || !command.idempotencyKey || command.expectedVersion < 0) throw new Error(\"command_invalid\");\n}" }, { "language": "kotlin", "label": "Kotlin release guard", "code": "// Application-owned evidence; add SDK symbols only after release selection.\ndata class SourceContract(val slug: String, val fingerprint: String, val providerCallsEnabled: Boolean = false)\nval source = SourceContract(\"mappls-workmate-android-sdk\", \"e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8\")\n\nsealed interface BoundaryResult {\n data class Ready(val value: T, val sourceFingerprint: String) : BoundaryResult\n data class Blocked(val reason: String, val retryable: Boolean) : BoundaryResult\n}\n\nfun requireSelectedRelease() {\n check(source.providerCallsEnabled) { \"selection_required\" }\n}" } ], "workshop": { "title": "mappls-workmate-android-sdk evidence-to-production workshop", "duration": "3 hours", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering creation, idempotency, observation, transition, unknown outcome, reconciliation, restart, audit, privacy, and retirement.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." }, { "signal": "A state-changing response is lost", "likelyCause": "The provider may have committed while the application lacks acknowledgement.", "recovery": "Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "Idempotency, optimistic concurrency, audit, outbox, event ordering, reconciliation, privacy, and retirement are release gates", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "workmate-task-lifecycle", "workmate-proof-review" ], "starterSlug": "mappls-workmate-android-sdk", "downloadPath": "/downloads/source-starters/mappls-workmate-android-sdk.zip" } ``` ## source-launchpad · Skydnn AI APIs: source launchpad - Identity: `source-launchpad:skydnn-aiapi-docs` - Canonical: https://developer.mappls.com/launchpads/skydnn-aiapi-docs - State model: stateless ```json { "slug": "skydnn-aiapi-docs", "sourceGuideSlug": "skydnn-aiapi-docs", "title": "Skydnn AI APIs: source launchpad", "repositoryName": "skydnn-aiapi-docs", "kind": "REST API", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "REST", "AI/MCP" ], "productAreas": [ "maps", "gis-analytics", "ai-vision", "capture-feedback" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "f407d95bd8b3db716f04033d319e93c5c5eea34e6be96a46d659eaf0b2b476df", "sourceUrl": "https://github.com/mappls-api/skydnn-aiapi-docs", "readmeUrl": "https://github.com/mappls-api/skydnn-aiapi-docs/blob/main/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is f407d95bd8b3db716f04033d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `skydnn-aiapi-docs` and fingerprint `f407d95bd8b3db716f04033d` recorded in the project", "A trusted backend or API client capable of HTTPS requests", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for skydnn-aiapi-docs. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `skydnn-aiapi-docs` with fingerprint `f407d95bd8b3db716f04033d319e93c5c5eea34e6be96a46d659eaf0b2b476df`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is f407d95bd8b3db716f04033d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep rest api symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"skydnn-aiapi-docs\",\n fingerprint: \"f407d95bd8b3db716f04033d319e93c5c5eea34e6be96a46d659eaf0b2b476df\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"skydnn-aiapi-docs\"\n fingerprint: str = \"f407d95bd8b3db716f04033d319e93c5c5eea34e6be96a46d659eaf0b2b476df\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "skydnn-aiapi-docs evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [ "route-preview", "fleet-geofences", "gis-site-selection", "webhook-reliability", "reverse-geocode-check-in" ], "starterSlug": "skydnn-aiapi-docs", "downloadPath": "/downloads/source-starters/skydnn-aiapi-docs.zip" } ``` ## source-launchpad · V1.2.0 Logs: source launchpad - Identity: `source-launchpad:v1-2-0-logs` - Canonical: https://developer.mappls.com/launchpads/v1-2-0-logs - State model: stateless ```json { "slug": "v1-2-0-logs", "sourceGuideSlug": "v1-2-0-logs", "title": "V1.2.0 Logs: source launchpad", "repositoryName": "v1.2.0-logs", "kind": "Sample", "maturity": "current", "stateModel": "stateless", "readiness": "source-ready", "platforms": [ "Unspecified" ], "productAreas": [ "other" ], "duration": "25 minutes", "outcome": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "sourceFingerprint": "29445321439b02ac0adff1a2102932ed5cf1a8d3eaa427b7999ad2481aa5cb87", "sourceUrl": "https://github.com/mappls-api/v1.2.0-logs", "readmeUrl": "https://github.com/mappls-api/v1.2.0-logs/blob/master/README.md", "evidenceBoundary": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 29445321439b02ac0adff1a2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic.", "credentialBoundary": "This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved.", "prerequisites": [ "The exact source guide `v1-2-0-logs` and fingerprint `29445321439b02ac0adff1a2` recorded in the project", "A clean project or adapter module with no inherited Mappls credential or opaque provider state", "A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example", "A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior" ], "steps": [ { "title": "Lock the exact source", "instruction": "Open the repository and README evidence for v1.2.0-logs. Record branch, source fingerprint, maturity, platforms, and the responsible product owner before choosing a package or endpoint.", "proof": "The project manifest names only `v1-2-0-logs` with fingerprint `29445321439b02ac0adff1a2102932ed5cf1a8d3eaa427b7999ad2481aa5cb87`." }, { "title": "Resolve the release contract", "instruction": "The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 29445321439b02ac0adff1a2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Reconcile public evidence with the issued account and any local correspondence; repository name similarity is not binary or API compatibility proof.", "proof": "A decision record names the exact version/host, dependency or schema generation, region, entitlement, auth class, and rollback owner—or remains visibly selection-required." }, { "title": "Create the application seam", "instruction": "Keep sample symbols inside one adapter. The application owns bounded inputs, normalized outputs, correlation identity, cancellation, and resource cleanup.", "proof": "Fixture tests execute without a provider credential, network call, native controller, opaque SDK object, or production payload." }, { "title": "Exercise the first documented surface", "instruction": "The source contains no copyable fenced example. Stop before provider syntax, obtain the owning contract, then attach its fingerprint and approved sample to this launchpad rather than guessing.", "proof": "The selection record is complete and no package coordinate, endpoint, callback, or response shape was invented." }, { "title": "Prove failure and teardown", "instruction": "Exercise invalid input, missing/denied access, timeout, empty response, unavailable provider, cancellation, duplicate invocation, and deterministic cleanup.", "proof": "Every terminal and recovery path has a typed result, safe correlation evidence, and no credential or private provider body in diagnostics." }, { "title": "Qualify the release path", "instruction": "Repeat the clean build, archive, deploy, or service-start path for the target platform. Verify accessibility, privacy, observability, quota behavior, version rollback, and support evidence before promoting traffic.", "proof": "An independent reviewer can reproduce success and hostile paths from the source manifest and release evidence without relying on an already-configured workstation." } ], "commands": [ "npm test", "node src/inspect.mjs" ], "samples": [], "adapterSamples": [ { "language": "typescript", "label": "Exact-source application boundary", "code": "// Generated from the repository evidence manifest—not provider syntax.\nexport const sourceContract = Object.freeze({\n slug: \"v1-2-0-logs\",\n fingerprint: \"29445321439b02ac0adff1a2102932ed5cf1a8d3eaa427b7999ad2481aa5cb87\",\n stateModel: \"stateless\",\n providerCallsEnabled: false,\n});\n\nexport type BoundaryResult =\n | { kind: \"ok\"; value: T; sourceFingerprint: string }\n | { kind: \"selection_required\" | \"denied\" | \"empty\" | \"unavailable\"; retryable: boolean };\n\nexport async function executeBoundary(operation: () => Promise): Promise> {\n if (!sourceContract.providerCallsEnabled) return { kind: \"selection_required\", retryable: false };\n try {\n const value = await operation();\n return { kind: \"ok\", value, sourceFingerprint: sourceContract.fingerprint };\n } catch {\n return { kind: \"unavailable\", retryable: true }; // Never persist a credential or private body.\n }\n}\n\n// Stateless work still owns cancellation, timeout, bounded output, and deterministic teardown.\nexport const boundaryLimits = Object.freeze({ timeoutMs: 8_000, maxResultBytes: 64 * 1024 });" }, { "language": "python", "label": "Python trusted-adapter seam", "code": "\"\"\"Offline boundary: exact source identity without invented provider syntax.\"\"\"\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True)\nclass SourceContract:\n slug: str = \"v1-2-0-logs\"\n fingerprint: str = \"29445321439b02ac0adff1a2102932ed5cf1a8d3eaa427b7999ad2481aa5cb87\"\n provider_calls_enabled: bool = False\n\ndef require_selected_release(source: SourceContract) -> None:\n if not source.provider_calls_enabled:\n raise RuntimeError(\"selection_required\")\n\ndef safe_failure(code: str, retryable: bool) -> dict[str, object]:\n \"\"\"Return a typed error without credential values or private provider bodies.\"\"\"\n return {\"kind\": code, \"retryable\": retryable, \"sourceFingerprint\": SourceContract().fingerprint}" } ], "workshop": { "title": "v1.2.0-logs evidence-to-production workshop", "duration": "90 minutes", "stages": [ { "level": "Beginner", "title": "Prove the source before the integration", "outcome": "A reproducible credential-free evidence record and explicit selection decision.", "tasks": [ "Run the offline manifest test from a clean checkout.", "Compare source slug and SHA-256 fingerprint with the launchpad.", "Record product, region, account, entitlement, authentication generation, and release owner—or keep selection blocked." ], "proof": [ "Manifest tests pass with zero network calls.", "No package, endpoint, callback, or response is guessed." ] }, { "level": "Intermediate", "title": "Build a narrow application adapter", "outcome": "A fixture-tested seam that contains provider-specific types and normalizes all outcomes.", "tasks": [ "Start with the generated TypeScript and platform-language boundaries.", "Add only symbols approved for the selected source revision.", "Validate bounded input and output; add cancellation, timeouts, typed failures, and deterministic cleanup." ], "proof": [ "Application tests run without a provider credential.", "Denied, empty, unavailable, stale, duplicate, and cancelled paths are automated." ] }, { "level": "Advanced", "title": "Qualify lifecycle and release behavior", "outcome": "A production review covering timeout, cancellation, empty, denied, unavailable, and teardown.", "tasks": [ "Exercise every lifecycle and hostile path under the declared state model.", "Verify credential restriction, rotation, redaction, quota, privacy, accessibility, and support evidence.", "Repeat the clean release build and rollback from a workstation with no hidden local state." ], "proof": [ "Every transition has an owner, stable identity, observable evidence, and recovery action.", "An independent reviewer can reproduce qualification and rollback." ] } ], "acceptance": [ "Exact source and release authority remain attached to every example.", "Generated boundaries are clearly distinguished from provider syntax.", "No credential value, private payload, opaque provider object, or workstation path is persisted.", "A fixture pass is never presented as live entitlement, compatibility, availability, or production success." ] }, "verification": [ "The offline harness validates exact source identity and fingerprint with zero provider calls.", "Every copied source example remains sanitized and visibly tied to its repository revision.", "Selection-required evidence cannot be promoted to a live-ready package or endpoint.", "Success, failure, cancellation, stale result, cleanup, and release proof match the declared state model." ], "failures": [ { "signal": "The repository exists but the selected package, endpoint, or product cannot be confirmed", "likelyCause": "A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority.", "recovery": "Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax." }, { "signal": "Authentication or entitlement is rejected", "likelyCause": "The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line.", "recovery": "Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit." }, { "signal": "The first interaction times out, returns empty, or becomes unavailable", "likelyCause": "Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved.", "recovery": "Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence." }, { "signal": "A callback, result, or event arrives after cancellation or replacement", "likelyCause": "Screen, request, controller, subscription, or aggregate generation ownership is missing.", "recovery": "Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ], "productionChecks": [ "Exact source, fingerprint, version or contract generation, and approving owner are recorded", "Credential class, placement, restriction, rotation, revocation, and log redaction are proven", "A clean release build or deploy path reproduces without workstation-only state", "Inputs, outputs, timeouts, retries, quotas, and provider error bodies are bounded", "Offline, denied, empty, unavailable, cancelled, duplicate, stale, and teardown behavior is automated", "Accessibility and a useful non-provider fallback exist for every user-facing surface", "No durable provider lifecycle is inferred from a request, view, authentication session, or callback", "Rollback and support evidence are reviewed independently before production promotion" ], "nextTutorialSlugs": [], "starterSlug": "v1-2-0-logs", "downloadPath": "/downloads/source-starters/v1-2-0-logs.zip" } ``` ## documentation-coverage · Mappls API Organization Guide - Identity: `documentation-coverage:source:github` - Canonical: https://developer.mappls.com/reference/github - State model: stateless ```json { "id": "github", "lens": "source", "title": "Mappls API Organization Guide", "subtitle": "Guide · current · unmatched correspondence", "href": "/reference/github", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "3 headings", "href": "/reference/github" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/github#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls API Organization Guide: source launchpad", "href": "/launchpads/github" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": ".github integration harness", "href": "/launchpads/github" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 20, "evidence": [ { "label": ".github evidence-to-production workshop", "href": "/launchpads/github#workshop" }, { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 8, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Map Story", "href": "/samples/map-story" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "label": "Offline Release Control", "href": "/samples/offline-release-control" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ ".github", "Mappls API Organization Guide", "maps", "Unspecified", "maps" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Flutter MapmyIndia GL - Identity: `documentation-coverage:source:flutter-mapmyindia-gl` - Canonical: https://developer.mappls.com/reference/flutter-mapmyindia-gl - State model: stateless ```json { "id": "flutter-mapmyindia-gl", "lens": "source", "title": "Flutter MapmyIndia GL", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/flutter-mapmyindia-gl", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "23 headings", "href": "/reference/flutter-mapmyindia-gl" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/flutter-mapmyindia-gl", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Source Dart: Add Annotations using Geojson", "href": "/reference/flutter-mapmyindia-gl" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/sdks/flutter-mapmyindia-gl" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "label": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Flutter map plugin lineage", "href": "/migrate/flutter-map-lineage" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "flutter-mapmyindia-gl", "Flutter MapmyIndia GL", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "Flutter", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "offline-automotive", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web - Identity: `documentation-coverage:source:mapmyindia-angular-sample-websdk-rest` - Canonical: https://developer.mappls.com/reference/mapmyindia-angular-sample-websdk-rest - State model: stateless ```json { "id": "mapmyindia-angular-sample-websdk-rest", "lens": "source", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "subtitle": "Sample · sample · exact correspondence", "href": "/reference/mapmyindia-angular-sample-websdk-rest", "stateModel": "stateless", "maturity": "sample", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "18 headings", "href": "/reference/mapmyindia-angular-sample-websdk-rest" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-angular-sample-webSDK-REST", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Source JSON: 2. Create file name of proxy.conf.json in your project and put given c", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JSON: 3. Then add line \"proxyConfig\": \"proxy.conf.json\" in angular.json file", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JSON: 4. Then replace the line \"start\":\"\" to \"start\": \"ng serve --port 4200 ", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JavaScript: 5. Create service page and put the given code:-", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JavaScript: Generating Token using ClientId & ClientSecret", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JavaScript: OAuth Autosuggest using token", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JavaScript: OAuth Nearby using token", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Source JavaScript: OAuth Geocode API using token", "href": "/reference/mapmyindia-angular-sample-websdk-rest" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web: source launchpad", "href": "/launchpads/mapmyindia-angular-sample-websdk-rest" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mapmyindia-angular-sample-webSDK-REST integration harness", "href": "/launchpads/mapmyindia-angular-sample-websdk-rest" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "mapmyindia-angular-sample-webSDK-REST evidence-to-production workshop", "href": "/launchpads/mapmyindia-angular-sample-websdk-rest#workshop" }, { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Build a server-side geocoding boundary", "href": "/tutorials/rest-geocode-service" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-angular-sample-webSDK-REST", "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "maps", "search-places", "identity-platform", "Web", "REST", "maps", "search-places", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Transaction Definitions - Identity: `documentation-coverage:source:mapmyindia-api-addendums` - Canonical: https://developer.mappls.com/reference/mapmyindia-api-addendums - State model: stateless ```json { "id": "mapmyindia-api-addendums", "lens": "source", "title": "Transaction Definitions", "subtitle": "Guide · legacy · exact correspondence", "href": "/reference/mapmyindia-api-addendums", "stateModel": "stateless", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "1 headings", "href": "/reference/mapmyindia-api-addendums" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-api-addendums", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 36, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Core REST: MapmyIndia generation to Mappls contracts", "href": "/migrate/core-rest-generation" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-api-addendums", "Transaction Definitions", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "Unspecified", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 2, "coveredChecks": 2, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia Geo-Analytics APIs ! - Identity: `documentation-coverage:source:mapmyindia-geoanalytics-api-web` - Canonical: https://developer.mappls.com/reference/mapmyindia-geoanalytics-api-web - State model: stateless ```json { "id": "mapmyindia-geoanalytics-api-web", "lens": "source", "title": "MapmyIndia Geo-Analytics APIs !", "subtitle": "REST API · legacy · exact correspondence", "href": "/reference/mapmyindia-geoanalytics-api-web", "stateModel": "stateless", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "9 headings", "href": "/reference/mapmyindia-geoanalytics-api-web" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-geoanalytics-api-web", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box", "href": "/api-reference/geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 7, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "label": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 13, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Web maps and plugins: legacy scripts to a governed browser boundary", "href": "/migrate/web-maps-and-plugins" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-geoanalytics-api-web", "MapmyIndia Geo-Analytics APIs !", "maps", "gis-analytics", "Web", "maps", "gis-analytics" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia Interactive Map JS API ! - Identity: `documentation-coverage:source:mapmyindia-interactive-map-js-api` - Canonical: https://developer.mappls.com/reference/mapmyindia-interactive-map-js-api - State model: stateless ```json { "id": "mapmyindia-interactive-map-js-api", "lens": "source", "title": "MapmyIndia Interactive Map JS API !", "subtitle": "SDK · legacy · exact correspondence", "href": "/reference/mapmyindia-interactive-map-js-api", "stateModel": "stateless", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "20 headings", "href": "/reference/mapmyindia-interactive-map-js-api" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-interactive-map-js-api", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapmyIndia Interactive Map JS API !", "href": "/sdks/mapmyindia-interactive-map-js-api" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 17, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Web maps and plugins: legacy scripts to a governed browser boundary", "href": "/migrate/web-maps-and-plugins" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-interactive-map-js-api", "MapmyIndia Interactive Map JS API !", "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "Web", "REST", "maps", "search-places", "routes-navigation", "gis-analytics", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Intouch Android SDK - Identity: `documentation-coverage:source:mapmyindia-intouch-android-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-android-sdk - State model: stateful ```json { "id": "mapmyindia-intouch-android-sdk", "lens": "source", "title": "Mapmyindia Intouch Android SDK", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-intouch-android-sdk", "stateModel": "stateful", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "29 headings", "href": "/reference/mapmyindia-intouch-android-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-android-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Source Java: Step 2. Add InTouch SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Java: Step 2. Add InTouch SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Java: Add Java 8 Support to the project", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Java: Add Java 8 Support to the project", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Kotlin: Kotlin", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Kotlin: Kotlin", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Java: Java", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Source Kotlin: Kotlin", "href": "/reference/mapmyindia-intouch-android-sdk" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mapmyindia Intouch Android SDK", "href": "/sdks/mapmyindia-intouch-android-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 19, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "InTouch Android SDK lineage", "href": "/migrate/intouch-android" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-intouch-android-sdk", "Mapmyindia Intouch Android SDK", "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "identity-platform", "Android", "intouch-telematics", "workmate", "gis-analytics", "app-widgets-deep-links", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia Intouch iOS SDK - Identity: `documentation-coverage:source:mapmyindia-intouch-ios-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-ios-sdk - State model: stateful ```json { "id": "mapmyindia-intouch-ios-sdk", "lens": "source", "title": "MapmyIndia Intouch iOS SDK", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-intouch-ios-sdk", "stateModel": "stateful", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "12 headings", "href": "/reference/mapmyindia-intouch-ios-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-ios-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 8, "evidence": [ { "label": "Source Text: Setup a Project", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Add following compulsory lines to your applications for Upload app on ", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Add following compulsory lines to your applications for Upload app on ", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Add your Publisher key in client Id and Client Secret and add deviceNa", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Create device", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Call the below method to track your app user's phone live location. Ma", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Call the below method to Stop Track your app user's phone live locatio", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Source Text: Call the below method to Stop Track your app user's phone live locatio", "href": "/reference/mapmyindia-intouch-ios-sdk" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapmyIndia Intouch iOS SDK", "href": "/sdks/mapmyindia-intouch-ios-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 3, "evidence": [ { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "InTouch iOS SDK lineage", "href": "/migrate/intouch-ios" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-intouch-ios-sdk", "MapmyIndia Intouch iOS SDK", "maps", "tracking-telematics", "workforce", "gis-analytics", "identity-platform", "iOS", "maps", "intouch-telematics", "workmate", "gis-analytics", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Intouch React Native SDK - Identity: `documentation-coverage:source:mapmyindia-intouch-react-native-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-react-native-sdk - State model: stateful ```json { "id": "mapmyindia-intouch-react-native-sdk", "lens": "source", "title": "Mapmyindia Intouch React Native SDK", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-intouch-react-native-sdk", "stateModel": "stateful", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "27 headings", "href": "/reference/mapmyindia-intouch-react-native-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-react-native-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Source Groovy: Android", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source Groovy: Android", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source JavaScript: Step 1: Import Intouch SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source JavaScript: Step 2. Check if Intouch SDK is already initialized", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source JavaScript: Step 3: Initialize Intouch SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source JavaScript: Step 4: Check if Intouch SDK is already running", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source JavaScript: Step 5. Start tracking", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Source JavaScript: Step 6. Stop tracking", "href": "/reference/mapmyindia-intouch-react-native-sdk" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mapmyindia Intouch React Native SDK", "href": "/sdks/mapmyindia-intouch-react-native-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 1, "evidence": [ { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 14, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "InTouch React Native bridge lineage", "href": "/migrate/intouch-react-native" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-intouch-react-native-sdk", "Mapmyindia Intouch React Native SDK", "tracking-telematics", "workforce", "gis-analytics", "identity-platform", "React Native", "intouch-telematics", "workmate", "gis-analytics", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Intouch REST Apis - Identity: `documentation-coverage:source:mapmyindia-intouch-rest-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-rest-apis - State model: stateful ```json { "id": "mapmyindia-intouch-rest-apis", "lens": "source", "title": "Mapmyindia Intouch REST Apis", "subtitle": "REST API · deprecated · exact correspondence", "href": "/reference/mapmyindia-intouch-rest-apis", "stateModel": "stateful", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "1 headings", "href": "/reference/mapmyindia-intouch-rest-apis" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-rest-apis", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 53, "evidence": [ { "label": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0" }, { "label": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "label": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0" }, { "label": "intouch-post-alarm-this-api-will-create-an-alarm", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm" }, { "label": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0" }, { "label": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "label": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0" }, { "label": "intouch-delete-alarm-id-deletes-an-alarm-config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 5, "evidence": [ { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 9, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "InTouch REST contract generation", "href": "/migrate/intouch-rest-generation" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-intouch-rest-apis", "Mapmyindia Intouch REST Apis", "tracking-telematics", "REST", "intouch-telematics" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Intouch Web Plugins - Identity: `documentation-coverage:source:mapmyindia-intouch-web-plugins` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-web-plugins - State model: stateful ```json { "id": "mapmyindia-intouch-web-plugins", "lens": "source", "title": "Mapmyindia Intouch Web Plugins", "subtitle": "Widget · legacy · unmatched correspondence", "href": "/reference/mapmyindia-intouch-web-plugins", "stateModel": "stateful", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "5 headings", "href": "/reference/mapmyindia-intouch-web-plugins" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 8, "evidence": [ { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" }, { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "label": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "label": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" }, { "label": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" }, { "label": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 17, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Web maps and plugins: legacy scripts to a governed browser boundary", "href": "/migrate/web-maps-and-plugins" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-intouch-web-plugins", "Mapmyindia Intouch Web Plugins", "tracking-telematics", "widgets-deep-links", "capture-feedback", "Web", "Widgets/Deep links", "intouch-telematics", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 4, "coveredChecks": 4, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia Map SDK for Cordova/Ionic - Beta 1 - Identity: `documentation-coverage:source:mapmyindia-map-cordova-ionic-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-map-cordova-ionic-beta - State model: stateless ```json { "id": "mapmyindia-map-cordova-ionic-beta", "lens": "source", "title": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "subtitle": "Guide · deprecated · exact correspondence", "href": "/reference/mapmyindia-map-cordova-ionic-beta", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "23 headings", "href": "/reference/mapmyindia-map-cordova-ionic-beta" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-map-cordova-ionic-beta", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Source JavaScript: Installation", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: Installation", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: General Usage", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: 1. MapLoad", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: 3. Scale", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: 3. Scale", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: 3. Scale", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Source JavaScript: 3. Scale", "href": "/reference/mapmyindia-map-cordova-ionic-beta" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Ship a Mappls map in Cordova and Ionic", "href": "/tutorials/cordova-map" }, { "label": "Qualify a Cordova location release", "href": "/tutorials/cordova-release-hardening" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 19, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Cordova and Ionic: stabilize, then migrate by journey", "href": "/migrate/cordova-ionic-exit" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-map-cordova-ionic-beta", "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "maps", "search-places", "gis-analytics", "widgets-deep-links", "Cordova/Ionic", "maps", "search-places", "gis-analytics", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 2, "coveredChecks": 2, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Maps SDK for React Native beta - Identity: `documentation-coverage:source:mapmyindia-map-react-native-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-map-react-native-beta - State model: stateless ```json { "id": "mapmyindia-map-react-native-beta", "lens": "source", "title": "Mapmyindia Maps SDK for React Native beta", "subtitle": "Guide · deprecated · exact correspondence", "href": "/reference/mapmyindia-map-react-native-beta", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "13 headings", "href": "/reference/mapmyindia-map-react-native-beta" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-map-react-native-beta", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Source Text: Installation", "href": "/reference/mapmyindia-map-react-native-beta" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "React Native maps and REST wrappers", "href": "/migrate/react-native-maps" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-map-react-native-beta", "Mapmyindia Maps SDK for React Native beta", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform", "React Native", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 2, "coveredChecks": 2, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia Vector Map Android SDK - Identity: `documentation-coverage:source:mapmyindia-maps-vectorsdk-android` - Canonical: https://developer.mappls.com/reference/mapmyindia-maps-vectorsdk-android - State model: stateless ```json { "id": "mapmyindia-maps-vectorsdk-android", "lens": "source", "title": "MapmyIndia Vector Map Android SDK", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-maps-vectorsdk-android", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mapmyindia-maps-vectorsdk-android" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-maps-vectorSDK-android", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapmyIndia Vector Map Android SDK", "href": "/sdks/mapmyindia-maps-vectorsdk-android" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Android vector map SDK lineage", "href": "/migrate/android-map-lineage" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-maps-vectorSDK-android", "MapmyIndia Vector Map Android SDK", "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "Android", "maps", "search-places", "routes-navigation", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Maps VectorSDK IOS - Identity: `documentation-coverage:source:mapmyindia-maps-vectorsdk-ios` - Canonical: https://developer.mappls.com/reference/mapmyindia-maps-vectorsdk-ios - State model: stateless ```json { "id": "mapmyindia-maps-vectorsdk-ios", "lens": "source", "title": "Mapmyindia Maps VectorSDK IOS", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-maps-vectorsdk-ios", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "5 headings", "href": "/reference/mapmyindia-maps-vectorsdk-ios" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "contenthub/bm21/mapmyindia-maps-vectorSDK-iOS", "href": "/sources/reconciliation" }, { "label": "contenthub/dochub/mapmyindia-maps-vectorSDK-iOS", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/sdks/mapmyindia-maps-vectorsdk-ios" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 3, "evidence": [ { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS map and API package lineage", "href": "/migrate/ios-map-packages" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-maps-vectorSDK-iOS", "Mapmyindia Maps VectorSDK IOS", "maps", "search-places", "routes-navigation", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls mGIS APIs - Identity: `documentation-coverage:source:mapmyindia-mgis-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-mgis-apis - State model: stateful ```json { "id": "mapmyindia-mgis-apis", "lens": "source", "title": "Mappls mGIS APIs", "subtitle": "REST API · legacy · unmatched correspondence", "href": "/reference/mapmyindia-mgis-apis", "stateModel": "stateful", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "43 headings", "href": "/reference/mapmyindia-mgis-apis" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Source Text: Search And Navigation APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "label": "Source Text: Data Operations APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "label": "Source Text: Export Feature API", "href": "/reference/mapmyindia-mgis-apis" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 53, "evidence": [ { "label": "mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset", "href": "/api-reference/mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset" }, { "label": "mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "href": "/api-reference/mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry" }, { "label": "mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset", "href": "/api-reference/mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset" }, { "label": "mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "href": "/api-reference/mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry" }, { "label": "mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "href": "/api-reference/mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input" }, { "label": "mgis-get-dqv-geometricfunction-performs-geometric-operations", "href": "/api-reference/mgis-get-dqv-geometricfunction-performs-geometric-operations" }, { "label": "mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "href": "/api-reference/mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer" }, { "label": "mgis-get-dqv-getdataset-fetches-the-entire-dataset", "href": "/api-reference/mgis-get-dqv-getdataset-fetches-the-entire-dataset" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 14, "evidence": [ { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Build a server-side geocoding boundary", "href": "/tutorials/rest-geocode-service" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mGIS and GeoAnalytics workspace generation", "href": "/migrate/mgis-workspace-generation" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-mgis-apis", "Mappls mGIS APIs", "maps", "search-places", "routes-navigation", "gis-analytics", "ai-vision", "capture-feedback", "REST", "maps", "search-places", "routes-navigation", "gis-analytics", "ai-location", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia MGIS Libraries - Identity: `documentation-coverage:source:mapmyindia-mgis-libraries` - Canonical: https://developer.mappls.com/reference/mapmyindia-mgis-libraries - State model: stateful ```json { "id": "mapmyindia-mgis-libraries", "lens": "source", "title": "Mapmyindia MGIS Libraries", "subtitle": "Guide · legacy · unmatched correspondence", "href": "/reference/mapmyindia-mgis-libraries", "stateModel": "stateful", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "9 headings", "href": "/reference/mapmyindia-mgis-libraries" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Source HTML: Demo #", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Demo #", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Map View-2D and 3D", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Map View-2D and 3D", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Map View-2D and 3D", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Map View-2D and 3D", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Workview", "href": "/reference/mapmyindia-mgis-libraries" }, { "label": "Source JavaScript: Workview", "href": "/reference/mapmyindia-mgis-libraries" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 29, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mGIS and GeoAnalytics workspace generation", "href": "/migrate/mgis-workspace-generation" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-mgis-libraries", "Mapmyindia MGIS Libraries", "maps", "gis-analytics", "widgets-deep-links", "capture-feedback", "Unspecified", "maps", "gis-analytics", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 4, "coveredChecks": 4, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Nearby Covid Places - Identity: `documentation-coverage:source:mapmyindia-nearby-covid-places` - Canonical: https://developer.mappls.com/reference/mapmyindia-nearby-covid-places - State model: stateless ```json { "id": "mapmyindia-nearby-covid-places", "lens": "source", "title": "Mapmyindia Nearby Covid Places", "subtitle": "Widget · deprecated · exact correspondence", "href": "/reference/mapmyindia-nearby-covid-places", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "20 headings", "href": "/reference/mapmyindia-nearby-covid-places" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-nearby-covid-places", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 9, "evidence": [ { "label": "Source HTML: 3 Step process to integrate Nearby COVID Places widget in any Web App", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source HTML: 3 Step process to integrate Nearby COVID Places widget in any Web App", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source JavaScript: 3 Step process to integrate Nearby COVID Places widget in any Web App", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source HTML: Sample Code", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source CSS: Sample CSS", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source JavaScript: Sample CSS", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source HTML: Script URL", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Source HTML: Sample Code", "href": "/reference/mapmyindia-nearby-covid-places" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 8, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "label": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "label": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Web maps and plugins: legacy scripts to a governed browser boundary", "href": "/migrate/web-maps-and-plugins" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-nearby-covid-places", "Mapmyindia Nearby Covid Places", "maps", "search-places", "widgets-deep-links", "capture-feedback", "Web", "maps", "search-places", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 2, "coveredChecks": 2, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Places N Directions Web SDK - Identity: `documentation-coverage:source:mapmyindia-places-n-directions-web-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-places-n-directions-web-sdk - State model: stateless ```json { "id": "mapmyindia-places-n-directions-web-sdk", "lens": "source", "title": "Mapmyindia Places N Directions Web SDK", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-places-n-directions-web-sdk", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "1 headings", "href": "/reference/mapmyindia-places-n-directions-web-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-places-n-directions-web-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mapmyindia Places N Directions Web SDK", "href": "/sdks/mapmyindia-places-n-directions-web-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Web maps and plugins: legacy scripts to a governed browser boundary", "href": "/migrate/web-maps-and-plugins" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-places-n-directions-web-sdk", "Mapmyindia Places N Directions Web SDK", "other", "Web" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS - Identity: `documentation-coverage:source:mapmyindia-purejs-sample-websdk-rest` - Canonical: https://developer.mappls.com/reference/mapmyindia-purejs-sample-websdk-rest - State model: stateless ```json { "id": "mapmyindia-purejs-sample-websdk-rest", "lens": "source", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "subtitle": "Sample · sample · exact correspondence", "href": "/reference/mapmyindia-purejs-sample-websdk-rest", "stateModel": "stateless", "maturity": "sample", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "11 headings", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-pureJS-sample-webSDK-REST", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 11, "evidence": [ { "label": "Source HTML: Creating project in Pure Javascript for MapmyIndia REST APIs & Interac", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Jsonp function", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Generating Token", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Call AutoSuggest API", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Call Geocoding API", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Call Reverse Geocoding API", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Call Many to Many Distance Matrix API", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Source JavaScript: Call Distance Matrix API", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS: source launchpad", "href": "/launchpads/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mapmyindia-pureJS-sample-webSDK-REST integration harness", "href": "/launchpads/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 17, "evidence": [ { "label": "mapmyindia-pureJS-sample-webSDK-REST evidence-to-production workshop", "href": "/launchpads/mapmyindia-purejs-sample-websdk-rest#workshop" }, { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-pureJS-sample-webSDK-REST", "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "maps", "search-places", "routes-navigation", "tracking-telematics", "identity-platform", "Web", "REST", "maps", "search-places", "routes-navigation", "intouch-telematics", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia REST API - Identity: `documentation-coverage:source:mapmyindia-rest-api` - Canonical: https://developer.mappls.com/reference/mapmyindia-rest-api - State model: stateless ```json { "id": "mapmyindia-rest-api", "lens": "source", "title": "Mapmyindia REST API", "subtitle": "REST API · deprecated · exact correspondence", "href": "/reference/mapmyindia-rest-api", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "13 headings", "href": "/reference/mapmyindia-rest-api" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-rest-api", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 21, "evidence": [ { "label": "core-location-get-api-places-woodpecker-address-standardization-api", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "label": "core-location-get-api-places-search-json-autosuggest-api", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "label": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "label": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "label": "core-location-get-rest-key-elevation-elevation-api", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "label": "core-location-get-api-places-geocode-geocode-api", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "label": "core-location-get-api-places-nearby-json-nearby-api", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "label": "core-location-post-api-places-along-route-poi-along-the-route-api", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 14, "evidence": [ { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Build a server-side geocoding boundary", "href": "/tutorials/rest-geocode-service" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Core REST: MapmyIndia generation to Mappls contracts", "href": "/migrate/core-rest-generation" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-rest-api", "Mapmyindia REST API", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "REST", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapmyIndia REST APIs for Cordova/Ionic - Beta 1 - Identity: `documentation-coverage:source:mapmyindia-restapi-cordova-ionic-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-restapi-cordova-ionic-beta - State model: stateless ```json { "id": "mapmyindia-restapi-cordova-ionic-beta", "lens": "source", "title": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "23 headings", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-restapi-cordova-ionic-beta", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Source JavaScript: git", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source JavaScript: Only if you are running cordova project in browser not for ionicframew", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source JavaScript: Only if you are running cordova project in browser not for ionicframew", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source Jsx: Autosuggest", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source JavaScript: Autosuggest", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source JavaScript: Geocode", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source JavaScript: Geocode", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Source JavaScript: Nearby", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "href": "/sdks/mapmyindia-restapi-cordova-ionic-beta" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Ship a Mappls map in Cordova and Ionic", "href": "/tutorials/cordova-map" }, { "label": "Qualify a Cordova location release", "href": "/tutorials/cordova-release-hardening" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 16, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Cordova and Ionic: stabilize, then migrate by journey", "href": "/migrate/cordova-ionic-exit" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-restapi-cordova-ionic-beta", "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "search-places", "routes-navigation", "widgets-deep-links", "Cordova/Ionic", "search-places", "routes-navigation", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia REST API SDK for React Native - beta - Identity: `documentation-coverage:source:mapmyindia-restapi-react-native-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-restapi-react-native-beta - State model: stateless ```json { "id": "mapmyindia-restapi-react-native-beta", "lens": "source", "title": "Mapmyindia REST API SDK for React Native - beta", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-restapi-react-native-beta", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "39 headings", "href": "/reference/mapmyindia-restapi-react-native-beta" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-restapi-react-native-beta", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Source Text: Android", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source Text: Android", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source JavaScript: Usage", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source JavaScript: Methods", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source JavaScript: Request Parameters", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source JavaScript: Request Parameters", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source JavaScript: Request Parameters", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Source JavaScript: Request Parameters", "href": "/reference/mapmyindia-restapi-react-native-beta" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mapmyindia REST API SDK for React Native - beta", "href": "/sdks/mapmyindia-restapi-react-native-beta" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "React Native maps and REST wrappers", "href": "/migrate/react-native-maps" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-restapi-react-native-beta", "Mapmyindia REST API SDK for React Native - beta", "maps", "search-places", "routes-navigation", "gis-analytics", "identity-platform", "React Native", "maps", "search-places", "routes-navigation", "gis-analytics", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mapmyindia Vector Maps JS Web SDK - Identity: `documentation-coverage:source:mapmyindia-vector-maps-js-web-sdk` - Canonical: https://developer.mappls.com/reference/mapmyindia-vector-maps-js-web-sdk - State model: stateless ```json { "id": "mapmyindia-vector-maps-js-web-sdk", "lens": "source", "title": "Mapmyindia Vector Maps JS Web SDK", "subtitle": "SDK · deprecated · exact correspondence", "href": "/reference/mapmyindia-vector-maps-js-web-sdk", "stateModel": "stateless", "maturity": "deprecated", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "31 headings", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-vector-maps-js-web-SDK", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source JavaScript: Adding the Map Script to your web page", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source JavaScript: Method to add marker on map", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source HTML: Example", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" }, { "label": "Source JavaScript: Marker Quick Reference:", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mapmyindia Vector Maps JS Web SDK", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 11, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Web maps and plugins: legacy scripts to a governed browser boundary", "href": "/migrate/web-maps-and-plugins" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-vector-maps-js-web-SDK", "Mapmyindia Vector Maps JS Web SDK", "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "Web", "maps", "search-places", "routes-navigation", "gis-analytics", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 3, "coveredChecks": 3, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls by MapmyIndia-Workmate-Apis - Identity: `documentation-coverage:source:mapmyindia-workmate-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-workmate-apis - State model: stateful ```json { "id": "mapmyindia-workmate-apis", "lens": "source", "title": "Mappls by MapmyIndia-Workmate-Apis", "subtitle": "REST API · legacy · exact correspondence", "href": "/reference/mapmyindia-workmate-apis", "stateModel": "stateful", "maturity": "legacy", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "3 headings", "href": "/reference/mapmyindia-workmate-apis" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-workmate-apis", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 13, "evidence": [ { "label": "workmate-get-clients-to-get-all-your-client-details", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "label": "workmate-post-clients-to-create-new-client", "href": "/api-reference/workmate-post-clients-to-create-new-client" }, { "label": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "label": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "label": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "label": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "label": "workmate-get-reports-movements-userid-get-users-movement-details", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "label": "workmate-get-tasklists-to-get-the-task-list-details", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 7, "evidence": [ { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Generate static maps for receipts and notifications", "href": "/tutorials/static-map-receipt" }, { "label": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 14, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Map Story", "href": "/samples/map-story" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Workmate and workforce journeys", "href": "/migrate/workmate-workforce" } ], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mapmyindia-workmate-apis", "Mappls by MapmyIndia-Workmate-Apis", "maps", "workforce", "identity-platform", "REST", "maps", "workmate", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MAPPLS AI / ML APIs - Identity: `documentation-coverage:source:mappls-ai-apis` - Canonical: https://developer.mappls.com/reference/mappls-ai-apis - State model: stateless ```json { "id": "mappls-ai-apis", "lens": "source", "title": "MAPPLS AI / ML APIs", "subtitle": "REST API · current · unmatched correspondence", "href": "/reference/mappls-ai-apis", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "26 headings", "href": "/reference/mappls-ai-apis" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-ai-apis#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 17, "evidence": [ { "label": "mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "href": "/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client" }, { "label": "mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "href": "/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images" }, { "label": "mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "href": "/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image" }, { "label": "mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "href": "/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given" }, { "label": "mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "href": "/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box" }, { "label": "mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "href": "/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image" }, { "label": "mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "href": "/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image" }, { "label": "mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "href": "/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MAPPLS AI / ML APIs: source launchpad", "href": "/launchpads/mappls-ai-apis" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-ai-apis integration harness", "href": "/launchpads/mappls-ai-apis" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 17, "evidence": [ { "label": "mappls-ai-apis evidence-to-production workshop", "href": "/launchpads/mappls-ai-apis#workshop" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-ai-apis", "MAPPLS AI / ML APIs", "maps", "search-places", "workforce", "gis-analytics", "ai-vision", "capture-feedback", "identity-platform", "REST", "AI/MCP", "maps", "search-places", "workmate", "gis-analytics", "ai-location", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Vector Map Android SDK JetPack Compose - Identity: `documentation-coverage:source:mappls-android-compose-demo` - Canonical: https://developer.mappls.com/reference/mappls-android-compose-demo - State model: stateless ```json { "id": "mappls-android-compose-demo", "lens": "source", "title": "Mappls Vector Map Android SDK JetPack Compose", "subtitle": "Sample · sample · unmatched correspondence", "href": "/reference/mappls-android-compose-demo", "stateModel": "stateless", "maturity": "sample", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "7 headings", "href": "/reference/mappls-android-compose-demo" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Source Groovy: Setup your project", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source Groovy: Setup your project", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source Groovy: Setup your project", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source XML: Setup your project", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source Groovy: Add Java 8 Support to the project", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source Kotlin: Add your API keys to the SDK", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source Kotlin: Add a Mappls Map to your application", "href": "/reference/mappls-android-compose-demo" }, { "label": "Source Kotlin: Add a Mappls Map to your application", "href": "/reference/mappls-android-compose-demo" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Vector Map Android SDK JetPack Compose: source launchpad", "href": "/launchpads/mappls-android-compose-demo" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-android-compose-demo integration harness", "href": "/launchpads/mappls-android-compose-demo" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-android-compose-demo evidence-to-production workshop", "href": "/launchpads/mappls-android-compose-demo#workshop" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-android-compose-demo", "Mappls Vector Map Android SDK JetPack Compose", "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "Android", "maps", "search-places", "routes-navigation", "gis-analytics", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Android SDK - Identity: `documentation-coverage:source:mappls-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-android-sdk - State model: stateless ```json { "id": "mappls-android-sdk", "lens": "source", "title": "Mappls Android SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-android-sdk", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mappls-android-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-android-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Android SDK", "href": "/sdks/mappls-android-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Android SDK: source launchpad", "href": "/launchpads/mappls-android-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-android-sdk integration harness", "href": "/launchpads/mappls-android-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-android-sdk evidence-to-production workshop", "href": "/launchpads/mappls-android-sdk#workshop" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-android-sdk", "Mappls Android SDK", "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "Android", "maps", "search-places", "routes-navigation", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Annotation Extension for iOS - Identity: `documentation-coverage:source:mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-annotation-extension-ios-distribution - State model: stateless ```json { "id": "mappls-annotation-extension-ios-distribution", "lens": "source", "title": "Mappls Annotation Extension for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-annotation-extension-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "14 headings", "href": "/reference/mappls-annotation-extension-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Lines (MGLLineStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Lines (MGLLineStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Polygons (MGLPolygonStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Source Swift: Polygons (MGLPolygonStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Annotation Extension for iOS: source launchpad", "href": "/launchpads/mappls-annotation-extension-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-annotation-extension-ios-distribution integration harness", "href": "/launchpads/mappls-annotation-extension-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-annotation-extension-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-annotation-extension-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-annotation-extension-ios-distribution", "Mappls Annotation Extension for iOS", "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Annotation Extension for iOS - Identity: `documentation-coverage:source:mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-annotation-extension-ios-distribution-base - State model: stateless ```json { "id": "mappls-annotation-extension-ios-distribution-base", "lens": "source", "title": "Mappls Annotation Extension for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-annotation-extension-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "14 headings", "href": "/reference/mappls-annotation-extension-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Circles (MGLCircleStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Lines (MGLLineStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Lines (MGLLineStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Polygons (MGLPolygonStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "Source Swift: Polygons (MGLPolygonStyleAnnotation)", "href": "/reference/mappls-annotation-extension-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Annotation Extension for iOS", "href": "/sdks/mappls-annotation-extension-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Annotation Extension for iOS: source launchpad", "href": "/launchpads/mappls-annotation-extension-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-annotation-extension-ios-distribution-base integration harness", "href": "/launchpads/mappls-annotation-extension-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-annotation-extension-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-annotation-extension-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-annotation-extension-ios-distribution-base", "Mappls Annotation Extension for iOS", "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsAPICore - Identity: `documentation-coverage:source:mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-api-core-ios-distribution - State model: stateless ```json { "id": "mappls-api-core-ios-distribution", "lens": "source", "title": "MapplsAPICore", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-api-core-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "8 headings", "href": "/reference/mappls-api-core-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-api-core-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[MapplsAPICore]()", "href": "/sdks/mappls-api-core-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[MapplsAPICore](): source launchpad", "href": "/launchpads/mappls-api-core-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-api-core-ios-distribution integration harness", "href": "/launchpads/mappls-api-core-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-api-core-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-api-core-ios-distribution#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-api-core-ios-distribution", "[MapplsAPICore]()", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform", "iOS", "routes-navigation", "intouch-telematics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsAPIKit (REST API Kit for iOS) - Identity: `documentation-coverage:source:mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-api-kit-ios-distribution - State model: stateless ```json { "id": "mappls-api-kit-ios-distribution", "lens": "source", "title": "MapplsAPIKit (REST API Kit for iOS)", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-api-kit-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "103 headings", "href": "/reference/mappls-api-kit-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Swift: Request Parameters", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "Source Swift: Code Samples", "href": "/reference/mappls-api-kit-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[MapplsAPIKit (REST API Kit for iOS)](): source launchpad", "href": "/launchpads/mappls-api-kit-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-api-kit-ios-distribution integration harness", "href": "/launchpads/mappls-api-kit-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-api-kit-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-api-kit-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-api-kit-ios-distribution", "[MapplsAPIKit (REST API Kit for iOS)]()", "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "gis-analytics", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "workmate", "gis-analytics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsAPIKit (REST API Kit for iOS) - Identity: `documentation-coverage:source:mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-api-kit-ios-distribution-base - State model: stateless ```json { "id": "mappls-api-kit-ios-distribution-base", "lens": "source", "title": "MapplsAPIKit (REST API Kit for iOS)", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-api-kit-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "85 headings", "href": "/reference/mappls-api-kit-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Swift: Request Parameters", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Source Swift: Code Samples", "href": "/reference/mappls-api-kit-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/sdks/mappls-api-kit-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[MapplsAPIKit (REST API Kit for iOS)](): source launchpad", "href": "/launchpads/mappls-api-kit-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-api-kit-ios-distribution-base integration harness", "href": "/launchpads/mappls-api-kit-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-api-kit-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-api-kit-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-api-kit-ios-distribution-base", "[MapplsAPIKit (REST API Kit for iOS)]()", "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "workmate", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls App Widgets - Identity: `documentation-coverage:source:mappls-app-widgets` - Canonical: https://developer.mappls.com/reference/mappls-app-widgets - State model: stateless ```json { "id": "mappls-app-widgets", "lens": "source", "title": "Mappls App Widgets", "subtitle": "Deep link · current · unmatched correspondence", "href": "/reference/mappls-app-widgets", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "1 headings", "href": "/reference/mappls-app-widgets" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-app-widgets#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls App Widgets: source launchpad", "href": "/launchpads/mappls-app-widgets" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-app-widgets integration harness", "href": "/launchpads/mappls-app-widgets" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "mappls-app-widgets evidence-to-production workshop", "href": "/launchpads/mappls-app-widgets#workshop" }, { "label": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" }, { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "label": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "label": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" }, { "label": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "label": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" }, { "label": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 12, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Address Verifier", "href": "/samples/address-verifier" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-app-widgets", "Mappls App Widgets", "search-places", "widgets-deep-links", "Widgets/Deep links", "search-places", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsCamera SDK for iOS - Identity: `documentation-coverage:source:mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-camera-ios-distribution - State model: stateless ```json { "id": "mappls-camera-ios-distribution", "lens": "source", "title": "MapplsCamera SDK for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-camera-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "33 headings", "href": "/reference/mappls-camera-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Source Text: Swift Package Manager", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "Source Swift: 1. Import the SDK", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "Source Swift: 2. Initialize and Present", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "Source Swift: 3. Implement the Delegate", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "Source Swift: Option 1: Use Sample Library", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "Source Swift: Error Handling", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-camera-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsCamera SDK for iOS: source launchpad", "href": "/launchpads/mappls-camera-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-camera-ios-distribution integration harness", "href": "/launchpads/mappls-camera-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-camera-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-camera-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-camera-ios-distribution", "MapplsCamera SDK for iOS", "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "offline-automotive", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Camera SDK - Identity: `documentation-coverage:source:mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/reference/mappls-camera-sdk-android - State model: stateless ```json { "id": "mappls-camera-sdk-android", "lens": "source", "title": "Mappls Camera SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-camera-sdk-android", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "48 headings", "href": "/reference/mappls-camera-sdk-android" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 5, "evidence": [ { "label": "Source Kotlin: Kotlin (build.gradle.kts)", "href": "/reference/mappls-camera-sdk-android" }, { "label": "Source Groovy: Groovy (build.gradle)", "href": "/reference/mappls-camera-sdk-android" }, { "label": "Source Kotlin: Android — Interface: MapplsCameraCallback", "href": "/reference/mappls-camera-sdk-android" }, { "label": "Source Kotlin: Android (MapplsCamera object)", "href": "/reference/mappls-camera-sdk-android" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-camera-sdk-android#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Camera SDK", "href": "/sdks/mappls-camera-sdk-android" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Camera SDK: source launchpad", "href": "/launchpads/mappls-camera-sdk-android" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-camera-sdk-android integration harness", "href": "/launchpads/mappls-camera-sdk-android" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-camera-sdk-android evidence-to-production workshop", "href": "/launchpads/mappls-camera-sdk-android#workshop" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-camera-sdk-android", "Mappls Camera SDK", "maps", "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "offline-automotive", "capture-feedback", "Android", "maps", "search-places", "intouch-telematics", "workmate", "app-widgets-deep-links", "offline-automotive", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsCamera SDK for iOS - Identity: `documentation-coverage:source:mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/reference/mappls-camera-sdk-ios - State model: stateless ```json { "id": "mappls-camera-sdk-ios", "lens": "source", "title": "MapplsCamera SDK for iOS", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-camera-sdk-ios", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "33 headings", "href": "/reference/mappls-camera-sdk-ios" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Source Text: Swift Package Manager", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "Source Swift: 1. Import the SDK", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "Source Swift: 2. Initialize and Present", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "Source Swift: 3. Implement the Delegate", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "Source Swift: Option 1: Use Sample Library", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "Source Swift: Error Handling", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-camera-sdk-ios#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsCamera SDK for iOS", "href": "/sdks/mappls-camera-sdk-ios" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsCamera SDK for iOS: source launchpad", "href": "/launchpads/mappls-camera-sdk-ios" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-camera-sdk-ios integration harness", "href": "/launchpads/mappls-camera-sdk-ios" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-camera-sdk-ios evidence-to-production workshop", "href": "/launchpads/mappls-camera-sdk-ios#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-camera-sdk-ios", "MapplsCamera SDK for iOS", "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "offline-automotive", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsDirectionUI for iOS - Identity: `documentation-coverage:source:mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-direction-ui-ios-distribution - State model: hybrid ```json { "id": "mappls-direction-ui-ios-distribution", "lens": "source", "title": "MapplsDirectionUI for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-direction-ui-ios-distribution", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "14 headings", "href": "/reference/mappls-direction-ui-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: MapplsDirectionsViewController", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: MapplsDirectionsViewController", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: MapplsDirectionsViewController", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDirectionUI for iOS: source launchpad", "href": "/launchpads/mappls-direction-ui-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-direction-ui-ios-distribution integration harness", "href": "/launchpads/mappls-direction-ui-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-direction-ui-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-direction-ui-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-direction-ui-ios-distribution", "MapplsDirectionUI for iOS", "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsDirectionUI for iOS - Identity: `documentation-coverage:source:mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-direction-ui-ios-distribution-base - State model: hybrid ```json { "id": "mappls-direction-ui-ios-distribution-base", "lens": "source", "title": "MapplsDirectionUI for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-direction-ui-ios-distribution-base", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "14 headings", "href": "/reference/mappls-direction-ui-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: MapplsDirectionsViewController", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: MapplsDirectionsViewController", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: MapplsDirectionsViewController", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution-base" }, { "label": "Source Swift: Configuration", "href": "/reference/mappls-direction-ui-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDirectionUI for iOS", "href": "/sdks/mappls-direction-ui-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDirectionUI for iOS: source launchpad", "href": "/launchpads/mappls-direction-ui-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-direction-ui-ios-distribution-base integration harness", "href": "/launchpads/mappls-direction-ui-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-direction-ui-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-direction-ui-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-direction-ui-ios-distribution-base", "MapplsDirectionUI for iOS", "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsDrivingRangePlugin for iOS - Identity: `documentation-coverage:source:mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-drivingrange-plugin-ios-distribution - State model: stateless ```json { "id": "mappls-drivingrange-plugin-ios-distribution", "lens": "source", "title": "MapplsDrivingRangePlugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-drivingrange-plugin-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "18 headings", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Source Swift: MapplsDrivingRangePlugin", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "label": "Source Swift: Get And Plot Driving Range", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "label": "Source Swift: Clear Driving Range", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "label": "Source Swift: Update Driving Range", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "label": "Source Swift: drivingRange(:didFailToGetAndPlotDrivingRange:))", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "label": "Source Text: drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "href": "/reference/mappls-drivingrange-plugin-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDrivingRangePlugin for iOS: source launchpad", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-drivingrange-plugin-ios-distribution integration harness", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-drivingrange-plugin-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-drivingrange-plugin-ios-distribution", "MapplsDrivingRangePlugin for iOS", "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsDrivingRangePlugin for iOS - Identity: `documentation-coverage:source:mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-drivingrange-plugin-ios-distribution-base - State model: stateless ```json { "id": "mappls-drivingrange-plugin-ios-distribution-base", "lens": "source", "title": "MapplsDrivingRangePlugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "19 headings", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Source Swift: MapplsDrivingRangePlugin", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "label": "Source Swift: Get And Plot Driving Range", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "label": "Source Swift: Clear Driving Range", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "label": "Source Swift: Update Driving Range", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "label": "Source Swift: drivingRange(:didFailToGetAndPlotDrivingRange:))", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "label": "Source Text: drivingRangeDidSuccessToGetAndPlotDrivingRange(:))", "href": "/reference/mappls-drivingrange-plugin-ios-distribution-base" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDrivingRangePlugin for iOS", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsDrivingRangePlugin for iOS: source launchpad", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-drivingrange-plugin-ios-distribution-base integration harness", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-drivingrange-plugin-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-drivingrange-plugin-ios-distribution-base", "MapplsDrivingRangePlugin for iOS", "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsFeedbackKit for iOS - Identity: `documentation-coverage:source:mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-feedback-kit-ios-distribution - State model: hybrid ```json { "id": "mappls-feedback-kit-ios-distribution", "lens": "source", "title": "MapplsFeedbackKit for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-feedback-kit-ios-distribution", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "12 headings", "href": "/reference/mappls-feedback-kit-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 5, "evidence": [ { "label": "Source Swift: Get Report Categories", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "label": "Source Swift: Optional Parameters", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "label": "Source Swift: Callbacks", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "label": "Source Swift: Callbacks", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-feedback-kit-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackKit for iOS: source launchpad", "href": "/launchpads/mappls-feedback-kit-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-feedback-kit-ios-distribution integration harness", "href": "/launchpads/mappls-feedback-kit-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-feedback-kit-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-feedback-kit-ios-distribution#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-feedback-kit-ios-distribution", "MapplsFeedbackKit for iOS", "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform", "iOS", "search-places", "intouch-telematics", "app-widgets-deep-links", "offline-automotive", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsFeedbackKit for iOS - Identity: `documentation-coverage:source:mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-feedback-kit-ios-distribution-base - State model: hybrid ```json { "id": "mappls-feedback-kit-ios-distribution-base", "lens": "source", "title": "MapplsFeedbackKit for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-feedback-kit-ios-distribution-base", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "12 headings", "href": "/reference/mappls-feedback-kit-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 5, "evidence": [ { "label": "Source Swift: Get Report Categories", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "label": "Source Swift: Optional Parameters", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "label": "Source Swift: Callbacks", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "label": "Source Swift: Callbacks", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-feedback-kit-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackKit for iOS", "href": "/sdks/mappls-feedback-kit-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackKit for iOS: source launchpad", "href": "/launchpads/mappls-feedback-kit-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-feedback-kit-ios-distribution-base integration harness", "href": "/launchpads/mappls-feedback-kit-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-feedback-kit-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-feedback-kit-ios-distribution-base#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-feedback-kit-ios-distribution-base", "MapplsFeedbackKit for iOS", "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform", "iOS", "search-places", "intouch-telematics", "app-widgets-deep-links", "offline-automotive", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsFeedbackUIKit for iOS - Identity: `documentation-coverage:source:mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-feedback-uikit-ios-distribution - State model: hybrid ```json { "id": "mappls-feedback-uikit-ios-distribution", "lens": "source", "title": "MapplsFeedbackUIKit for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-feedback-uikit-ios-distribution", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "9 headings", "href": "/reference/mappls-feedback-uikit-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Source Swift: Present Navigation Controller", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "label": "Source Swift: Push Controller", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "label": "Source Swift: Theme", "href": "/reference/mappls-feedback-uikit-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-feedback-uikit-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackUIKit for iOS: source launchpad", "href": "/launchpads/mappls-feedback-uikit-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-feedback-uikit-ios-distribution integration harness", "href": "/launchpads/mappls-feedback-uikit-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-feedback-uikit-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-feedback-uikit-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-feedback-uikit-ios-distribution", "MapplsFeedbackUIKit for iOS", "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsFeedbackUIKit for iOS - Identity: `documentation-coverage:source:mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-feedback-uikit-ios-distribution-base - State model: hybrid ```json { "id": "mappls-feedback-uikit-ios-distribution-base", "lens": "source", "title": "MapplsFeedbackUIKit for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-feedback-uikit-ios-distribution-base", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "9 headings", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Source Swift: Present Navigation Controller", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "label": "Source Swift: Push Controller", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "label": "Source Swift: Theme", "href": "/reference/mappls-feedback-uikit-ios-distribution-base" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-feedback-uikit-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackUIKit for iOS", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsFeedbackUIKit for iOS: source launchpad", "href": "/launchpads/mappls-feedback-uikit-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-feedback-uikit-ios-distribution-base integration harness", "href": "/launchpads/mappls-feedback-uikit-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-feedback-uikit-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-feedback-uikit-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-feedback-uikit-ios-distribution-base", "MapplsFeedbackUIKit for iOS", "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Flutter SDK - Identity: `documentation-coverage:source:mappls-flutter-sdk` - Canonical: https://developer.mappls.com/reference/mappls-flutter-sdk - State model: stateless ```json { "id": "mappls-flutter-sdk", "lens": "source", "title": "Mappls Flutter SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-flutter-sdk", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mappls-flutter-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-flutter-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Flutter SDK", "href": "/sdks/mappls-flutter-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Flutter SDK: source launchpad", "href": "/launchpads/mappls-flutter-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-flutter-sdk integration harness", "href": "/launchpads/mappls-flutter-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-flutter-sdk evidence-to-production workshop", "href": "/launchpads/mappls-flutter-sdk#workshop" }, { "label": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "label": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-flutter-sdk", "Mappls Flutter SDK", "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "Flutter", "maps", "search-places", "routes-navigation", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsGeoanalytics Plugin for iOS - Identity: `documentation-coverage:source:mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-geoanalytics-ios-distribution - State model: stateless ```json { "id": "mappls-geoanalytics-ios-distribution", "lens": "source", "title": "MapplsGeoanalytics Plugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-geoanalytics-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "24 headings", "href": "/reference/mappls-geoanalytics-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Source Swift: Initialization MapplsGeoanalyticsPlugin", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Step 1 - Get GeoAnalytics layers", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Step 2 - Adding GeoAnalytics layer on Map", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution" }, { "label": "Source Swift: Step 1 - Create Request", "href": "/reference/mappls-geoanalytics-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeoanalytics Plugin for iOS: source launchpad", "href": "/launchpads/mappls-geoanalytics-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-geoanalytics-ios-distribution integration harness", "href": "/launchpads/mappls-geoanalytics-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-geoanalytics-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-geoanalytics-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-geoanalytics-ios-distribution", "MapplsGeoanalytics Plugin for iOS", "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsGeoanalytics Plugin for iOS - Identity: `documentation-coverage:source:mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-geoanalytics-ios-distribution-base - State model: stateless ```json { "id": "mappls-geoanalytics-ios-distribution-base", "lens": "source", "title": "MapplsGeoanalytics Plugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-geoanalytics-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "24 headings", "href": "/reference/mappls-geoanalytics-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Source Swift: Initialization MapplsGeoanalyticsPlugin", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Step 1 - Get GeoAnalytics layers", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Step 2 - Adding GeoAnalytics layer on Map", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-geoanalytics-ios-distribution-base" }, { "label": "Source Swift: Step 1 - Create Request", "href": "/reference/mappls-geoanalytics-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeoanalytics Plugin for iOS", "href": "/sdks/mappls-geoanalytics-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeoanalytics Plugin for iOS: source launchpad", "href": "/launchpads/mappls-geoanalytics-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-geoanalytics-ios-distribution-base integration harness", "href": "/launchpads/mappls-geoanalytics-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-geoanalytics-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-geoanalytics-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-geoanalytics-ios-distribution-base", "MapplsGeoanalytics Plugin for iOS", "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsGeofenceUI Plugin for iOS - Identity: `documentation-coverage:source:mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-geofence-ui-ios-distribution - State model: hybrid ```json { "id": "mappls-geofence-ui-ios-distribution", "lens": "source", "title": "MapplsGeofenceUI Plugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-geofence-ui-ios-distribution", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "15 headings", "href": "/reference/mappls-geofence-ui-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: Step 3 :- Initialization of GeofenceViewUI", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Text: Step 3 :- Initialization of GeofenceViewUI", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeofenceUI Plugin for iOS: source launchpad", "href": "/launchpads/mappls-geofence-ui-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-geofence-ui-ios-distribution integration harness", "href": "/launchpads/mappls-geofence-ui-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-geofence-ui-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-geofence-ui-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-geofence-ui-ios-distribution", "MapplsGeofenceUI Plugin for iOS", "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsGeofenceUI Plugin for iOS - Identity: `documentation-coverage:source:mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-geofence-ui-ios-distribution-base - State model: hybrid ```json { "id": "mappls-geofence-ui-ios-distribution-base", "lens": "source", "title": "MapplsGeofenceUI Plugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-geofence-ui-ios-distribution-base", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "15 headings", "href": "/reference/mappls-geofence-ui-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: Step 3 :- Initialization of GeofenceViewUI", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Text: Step 3 :- Initialization of GeofenceViewUI", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution-base" }, { "label": "Source Swift: Customizing the Geofence using various properties:", "href": "/reference/mappls-geofence-ui-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeofenceUI Plugin for iOS", "href": "/sdks/mappls-geofence-ui-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsGeofenceUI Plugin for iOS: source launchpad", "href": "/launchpads/mappls-geofence-ui-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-geofence-ui-ios-distribution-base integration harness", "href": "/launchpads/mappls-geofence-ui-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-geofence-ui-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-geofence-ui-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-geofence-ui-ios-distribution-base", "MapplsGeofenceUI Plugin for iOS", "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Insight Embeddable Visualizations - Identity: `documentation-coverage:source:mappls-insight-sdk` - Canonical: https://developer.mappls.com/reference/mappls-insight-sdk - State model: stateless ```json { "id": "mappls-insight-sdk", "lens": "source", "title": "Mappls Insight Embeddable Visualizations", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-insight-sdk", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "13 headings", "href": "/reference/mappls-insight-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Source HTML: Sample code for Insight Dashboard", "href": "/reference/mappls-insight-sdk" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-insight-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Insight Embeddable Visualizations", "href": "/sdks/mappls-insight-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Insight Embeddable Visualizations: source launchpad", "href": "/launchpads/mappls-insight-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-insight-sdk integration harness", "href": "/launchpads/mappls-insight-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-insight-sdk evidence-to-production workshop", "href": "/launchpads/mappls-insight-sdk#workshop" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 15, "evidence": [ { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Address Verifier", "href": "/samples/address-verifier" }, { "label": "Map Story", "href": "/samples/map-story" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-insight-sdk", "Mappls Insight Embeddable Visualizations", "gis-analytics", "offline-automotive", "capture-feedback", "identity-platform", "Web", "gis-analytics", "offline-automotive", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Intouch Android SDK - Identity: `documentation-coverage:source:mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-intouch-android-sdk - State model: stateful ```json { "id": "mappls-intouch-android-sdk", "lens": "source", "title": "Mappls Intouch Android SDK", "subtitle": "SDK · current · normalized correspondence", "href": "/reference/mappls-intouch-android-sdk", "stateModel": "stateful", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mappls-intouch-android-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "normalized", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-android-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-intouch-android-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch Android SDK", "href": "/sdks/mappls-intouch-android-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch Android SDK: source launchpad", "href": "/launchpads/mappls-intouch-android-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-intouch-android-sdk integration harness", "href": "/launchpads/mappls-intouch-android-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-intouch-android-sdk evidence-to-production workshop", "href": "/launchpads/mappls-intouch-android-sdk#workshop" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 19, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-intouch-android-sdk", "Mappls Intouch Android SDK", "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "capture-feedback", "Android", "intouch-telematics", "workmate", "gis-analytics", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Intouch IOS Distribution - Identity: `documentation-coverage:source:mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-intouch-ios-distribution - State model: stateful ```json { "id": "mappls-intouch-ios-distribution", "lens": "source", "title": "Mappls Intouch IOS Distribution", "subtitle": "Distribution · distribution · normalized correspondence", "href": "/reference/mappls-intouch-ios-distribution", "stateModel": "stateful", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "gap", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Verified empty upstream repository (GitHub size 0)", "href": "https://github.com/mappls-api/mappls-intouch-ios-distribution" } ], "remediation": "The first-party GitHub repository is verifiably empty. A Mappls product owner must publish a canonical README or package manifest upstream; do not manufacture provider documentation in this portal." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "normalized", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-ios-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-intouch-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch IOS Distribution", "href": "/sdks/mappls-intouch-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch IOS Distribution: source launchpad", "href": "/launchpads/mappls-intouch-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-intouch-ios-distribution integration harness", "href": "/launchpads/mappls-intouch-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-intouch-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-intouch-ios-distribution#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 9, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-intouch-ios-distribution", "Mappls Intouch IOS Distribution", "tracking-telematics", "iOS", "intouch-telematics" ], "score": 88, "status": "strong", "requiredChecks": 8, "coveredChecks": 7, "gaps": [ "source-document" ], "priority": "high" } ``` ## documentation-coverage · Mappls Intouch IOS Distribution Base - Identity: `documentation-coverage:source:mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-intouch-ios-distribution-base - State model: stateful ```json { "id": "mappls-intouch-ios-distribution-base", "lens": "source", "title": "Mappls Intouch IOS Distribution Base", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-intouch-ios-distribution-base", "stateModel": "stateful", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "gap", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Verified empty upstream repository (GitHub size 0)", "href": "https://github.com/mappls-api/mappls-intouch-ios-distribution-base" } ], "remediation": "The first-party GitHub repository is verifiably empty. A Mappls product owner must publish a canonical README or package manifest upstream; do not manufacture provider documentation in this portal." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-intouch-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch IOS Distribution Base", "href": "/sdks/mappls-intouch-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch IOS Distribution Base: source launchpad", "href": "/launchpads/mappls-intouch-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-intouch-ios-distribution-base integration harness", "href": "/launchpads/mappls-intouch-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-intouch-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-intouch-ios-distribution-base#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 9, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-intouch-ios-distribution-base", "Mappls Intouch IOS Distribution Base", "tracking-telematics", "iOS", "intouch-telematics" ], "score": 88, "status": "strong", "requiredChecks": 8, "coveredChecks": 7, "gaps": [ "source-document" ], "priority": "high" } ``` ## documentation-coverage · Mappls Intouch SDK - Identity: `documentation-coverage:source:mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/reference/mappls-intouch-ios-sdk - State model: stateful ```json { "id": "mappls-intouch-ios-sdk", "lens": "source", "title": "Mappls Intouch SDK", "subtitle": "SDK · current · normalized correspondence", "href": "/reference/mappls-intouch-ios-sdk", "stateModel": "stateful", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mappls-intouch-ios-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "normalized", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-ios-sdk", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-intouch-ios-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Intouch SDK]()", "href": "/sdks/mappls-intouch-ios-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Intouch SDK](): source launchpad", "href": "/launchpads/mappls-intouch-ios-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-intouch-ios-sdk integration harness", "href": "/launchpads/mappls-intouch-ios-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-intouch-ios-sdk evidence-to-production workshop", "href": "/launchpads/mappls-intouch-ios-sdk#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 16, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-intouch-ios-sdk", "[Mappls Intouch SDK]()", "tracking-telematics", "workforce", "gis-analytics", "capture-feedback", "iOS", "intouch-telematics", "workmate", "gis-analytics", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Intouch REST Apis - Identity: `documentation-coverage:source:mappls-intouch-rest-apis` - Canonical: https://developer.mappls.com/reference/mappls-intouch-rest-apis - State model: stateful ```json { "id": "mappls-intouch-rest-apis", "lens": "source", "title": "Mappls Intouch REST Apis", "subtitle": "REST API · current · normalized correspondence", "href": "/reference/mappls-intouch-rest-apis", "stateModel": "stateful", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "9 headings", "href": "/reference/mappls-intouch-rest-apis" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "normalized", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-intouch-rest-apis", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-intouch-rest-apis#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 53, "evidence": [ { "label": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0" }, { "label": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "label": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0" }, { "label": "intouch-post-alarm-this-api-will-create-an-alarm", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm" }, { "label": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0" }, { "label": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "label": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0" }, { "label": "intouch-delete-alarm-id-deletes-an-alarm-config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch REST Apis: source launchpad", "href": "/launchpads/mappls-intouch-rest-apis" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-intouch-rest-apis integration harness", "href": "/launchpads/mappls-intouch-rest-apis" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 11, "evidence": [ { "label": "mappls-intouch-rest-apis evidence-to-production workshop", "href": "/launchpads/mappls-intouch-rest-apis#workshop" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Turn a device fix into a trustworthy check-in", "href": "/tutorials/reverse-geocode-check-in" }, { "label": "Rank responders with a distance matrix", "href": "/tutorials/distance-matrix-dispatch" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-intouch-rest-apis", "Mappls Intouch REST Apis", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform", "REST", "routes-navigation", "intouch-telematics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls iOS SDK - Identity: `documentation-coverage:source:mappls-ios-sdk` - Canonical: https://developer.mappls.com/reference/mappls-ios-sdk - State model: stateless ```json { "id": "mappls-ios-sdk", "lens": "source", "title": "Mappls iOS SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-ios-sdk", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "6 headings", "href": "/reference/mappls-ios-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-ios-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls iOS SDK", "href": "/sdks/mappls-ios-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls iOS SDK: source launchpad", "href": "/launchpads/mappls-ios-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-ios-sdk integration harness", "href": "/launchpads/mappls-ios-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-ios-sdk evidence-to-production workshop", "href": "/launchpads/mappls-ios-sdk#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-ios-sdk", "Mappls iOS SDK", "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls LMS IOS Distribution - Identity: `documentation-coverage:source:mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-lms-ios-distribution - State model: stateless ```json { "id": "mappls-lms-ios-distribution", "lens": "source", "title": "Mappls LMS IOS Distribution", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-lms-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "0 headings", "href": "/reference/mappls-lms-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-lms-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls LMS IOS Distribution", "href": "/sdks/mappls-lms-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls LMS IOS Distribution: source launchpad", "href": "/launchpads/mappls-lms-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-lms-ios-distribution integration harness", "href": "/launchpads/mappls-lms-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-lms-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-lms-ios-distribution#workshop" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-lms-ios-distribution", "Mappls LMS IOS Distribution", "other", "iOS" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls LMS IOS Distribution Base - Identity: `documentation-coverage:source:mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-lms-ios-distribution-base - State model: stateless ```json { "id": "mappls-lms-ios-distribution-base", "lens": "source", "title": "Mappls LMS IOS Distribution Base", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-lms-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "0 headings", "href": "/reference/mappls-lms-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-lms-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls LMS IOS Distribution Base", "href": "/sdks/mappls-lms-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls LMS IOS Distribution Base: source launchpad", "href": "/launchpads/mappls-lms-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-lms-ios-distribution-base integration harness", "href": "/launchpads/mappls-lms-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-lms-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-lms-ios-distribution-base#workshop" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-lms-ios-distribution-base", "Mappls LMS IOS Distribution Base", "other", "iOS" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Location Capture SDK - Identity: `documentation-coverage:source:mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-location-capture-android-sdk - State model: hybrid ```json { "id": "mappls-location-capture-android-sdk", "lens": "source", "title": "Mappls Location Capture SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-location-capture-android-sdk", "stateModel": "hybrid", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "26 headings", "href": "/reference/mappls-location-capture-android-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 12, "evidence": [ { "label": "Source Kotlin: Kotlin (settings.gradle.kts)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Groovy: Groovy (settings.gradle)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Kotlin: Kotlin (build.gradle.kts)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Groovy: Groovy (build.gradle)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Kotlin: Kotlin (build.gradle.kts)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Groovy: Groovy (build.gradle)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Kotlin: Kotlin (build.gradle.kts)", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Source Groovy: Groovy (build.gradle)", "href": "/reference/mappls-location-capture-android-sdk" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Location Capture SDK", "href": "/sdks/mappls-location-capture-android-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Location Capture SDK: source launchpad", "href": "/launchpads/mappls-location-capture-android-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-location-capture-android-sdk integration harness", "href": "/launchpads/mappls-location-capture-android-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-location-capture-android-sdk evidence-to-production workshop", "href": "/launchpads/mappls-location-capture-android-sdk#workshop" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-location-capture-android-sdk", "Mappls Location Capture SDK", "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "capture-feedback", "Android", "search-places", "intouch-telematics", "workmate", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Location Capture IOS SDK - Identity: `documentation-coverage:source:mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/reference/mappls-location-capture-ios-sdk - State model: hybrid ```json { "id": "mappls-location-capture-ios-sdk", "lens": "source", "title": "Mappls Location Capture IOS SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-location-capture-ios-sdk", "stateModel": "hybrid", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "gap", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Verified empty upstream repository (GitHub size 0)", "href": "https://github.com/mappls-api/mappls-location-capture-ios-sdk" } ], "remediation": "The first-party GitHub repository is verifiably empty. A Mappls product owner must publish a canonical README or package manifest upstream; do not manufacture provider documentation in this portal." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-location-capture-ios-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Location Capture IOS SDK", "href": "/sdks/mappls-location-capture-ios-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Location Capture IOS SDK: source launchpad", "href": "/launchpads/mappls-location-capture-ios-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-location-capture-ios-sdk integration harness", "href": "/launchpads/mappls-location-capture-ios-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "mappls-location-capture-ios-sdk evidence-to-production workshop", "href": "/launchpads/mappls-location-capture-ios-sdk#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 8, "evidence": [ { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Address Verifier", "href": "/samples/address-verifier" }, { "label": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "label": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-location-capture-ios-sdk", "Mappls Location Capture IOS SDK", "capture-feedback", "iOS", "capture-feedback" ], "score": 88, "status": "strong", "requiredChecks": 8, "coveredChecks": 7, "gaps": [ "source-document" ], "priority": "high" } ``` ## documentation-coverage · Mappls Location Capture SDK (iOS) - Identity: `documentation-coverage:source:mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-location-capture-sdk-ios-distribution - State model: hybrid ```json { "id": "mappls-location-capture-sdk-ios-distribution", "lens": "source", "title": "Mappls Location Capture SDK (iOS)", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-location-capture-sdk-ios-distribution", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "20 headings", "href": "/reference/mappls-location-capture-sdk-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 9, "evidence": [ { "label": "Source Text: Using Swift Package Manager (SPM)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source XML: Permissions (Required)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source Swift: Initialization (Required)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source Swift: SDK Configuration (Optional)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source Swift: 1. Single-Shot Location Fetch", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source Swift: 2. Subscribed Location Fetch (Limited)", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source Swift: Stop Location Updates", "href": "/reference/mappls-location-capture-sdk-ios-distribution" }, { "label": "Source Swift: Unsubscribe & Reset State", "href": "/reference/mappls-location-capture-sdk-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Location Capture SDK (iOS)", "href": "/sdks/mappls-location-capture-sdk-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Location Capture SDK (iOS): source launchpad", "href": "/launchpads/mappls-location-capture-sdk-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-location-capture-sdk-ios-distribution integration harness", "href": "/launchpads/mappls-location-capture-sdk-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-location-capture-sdk-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-location-capture-sdk-ios-distribution#workshop" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 14, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Address Verifier", "href": "/samples/address-verifier" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-location-capture-sdk-ios-distribution", "Mappls Location Capture SDK (iOS)", "tracking-telematics", "workforce", "capture-feedback", "iOS", "intouch-telematics", "workmate", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Map SDK - Identity: `documentation-coverage:source:mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-map-ios-distribution - State model: stateless ```json { "id": "mappls-map-ios-distribution", "lens": "source", "title": "Mappls Map SDK", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-map-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "107 headings", "href": "/reference/mappls-map-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Text: Dependencies", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Swift: MapplsMap", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Swift: MapplsMap", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Text: Swift", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-map-ios-distribution" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-map-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Map SDK](): source launchpad", "href": "/launchpads/mappls-map-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-map-ios-distribution integration harness", "href": "/launchpads/mappls-map-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-map-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-map-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-map-ios-distribution", "[Mappls Map SDK]()", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Map SDK - Identity: `documentation-coverage:source:mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-map-ios-distribution-base - State model: stateless ```json { "id": "mappls-map-ios-distribution-base", "lens": "source", "title": "Mappls Map SDK", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-map-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "107 headings", "href": "/reference/mappls-map-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Text: Dependencies", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Swift: MapplsMap", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Swift: MapplsMap", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Text: Swift", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-map-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-map-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Map SDK](): source launchpad", "href": "/launchpads/mappls-map-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-map-ios-distribution-base integration harness", "href": "/launchpads/mappls-map-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-map-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-map-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-map-ios-distribution-base", "[Mappls Map SDK]()", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Map SDK - Identity: `documentation-coverage:source:mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-map-move-ios-distribution-base - State model: stateless ```json { "id": "mappls-map-move-ios-distribution-base", "lens": "source", "title": "Mappls Map SDK", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-map-move-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "107 headings", "href": "/reference/mappls-map-move-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Text: Dependencies", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Swift: MapplsMap", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Swift: MapplsMap", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Text: Swift", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Objectivec: Objective C", "href": "/reference/mappls-map-move-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-map-move-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Map SDK]()", "href": "/sdks/mappls-map-move-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Mappls Map SDK](): source launchpad", "href": "/launchpads/mappls-map-move-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-map-move-ios-distribution-base integration harness", "href": "/launchpads/mappls-map-move-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-map-move-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-map-move-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-map-move-ios-distribution-base", "[Mappls Map SDK]()", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Custom Search Nearby Records - Identity: `documentation-coverage:source:mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-nearby-finder-ios-distribution - State model: stateless ```json { "id": "mappls-nearby-finder-ios-distribution", "lens": "source", "title": "Custom Search Nearby Records", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-nearby-finder-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "18 headings", "href": "/reference/mappls-nearby-finder-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Source Ruby: Installation", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "label": "Source Swift: Usage", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "label": "Source Swift: Optional Parameters", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "label": "Source Swift: Optional Parameters", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-nearby-finder-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-nearby-finder-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad", "href": "/launchpads/mappls-nearby-finder-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-nearby-finder-ios-distribution integration harness", "href": "/launchpads/mappls-nearby-finder-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-nearby-finder-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-nearby-finder-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-nearby-finder-ios-distribution", "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Custom Search Nearby Records - Identity: `documentation-coverage:source:mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-nearby-finder-ios-distribution-base - State model: stateless ```json { "id": "mappls-nearby-finder-ios-distribution-base", "lens": "source", "title": "Custom Search Nearby Records", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-nearby-finder-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "18 headings", "href": "/reference/mappls-nearby-finder-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Source Ruby: Installation", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "label": "Source Swift: Usage", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "label": "Source Swift: Optional Parameters", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "label": "Source Swift: Optional Parameters", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "label": "Source Swift: Swift", "href": "/reference/mappls-nearby-finder-ios-distribution-base" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-nearby-finder-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "href": "/sdks/mappls-nearby-finder-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "[Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad", "href": "/launchpads/mappls-nearby-finder-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-nearby-finder-ios-distribution-base integration harness", "href": "/launchpads/mappls-nearby-finder-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-nearby-finder-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-nearby-finder-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-nearby-finder-ios-distribution-base", "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Nearby Search Widget for iOS - Identity: `documentation-coverage:source:mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-nearby-ui-ios-distribution - State model: stateless ```json { "id": "mappls-nearby-ui-ios-distribution", "lens": "source", "title": "Mappls Nearby Search Widget for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-nearby-ui-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "13 headings", "href": "/reference/mappls-nearby-ui-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Source Swift: MapplsNearbyCategoriesViewController", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "label": "Source Swift: Properties of MapplsNearbyCategoriesViewController", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "label": "Source Swift: Call Back Handler", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "label": "Source Swift: Call Back Handler", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "label": "Source Swift: Call Back Handler", "href": "/reference/mappls-nearby-ui-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-nearby-ui-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Nearby Search Widget for iOS: source launchpad", "href": "/launchpads/mappls-nearby-ui-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-nearby-ui-ios-distribution integration harness", "href": "/launchpads/mappls-nearby-ui-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-nearby-ui-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-nearby-ui-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-nearby-ui-ios-distribution", "Mappls Nearby Search Widget for iOS", "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Nearby Search Widget for iOS - Identity: `documentation-coverage:source:mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-nearby-ui-ios-distribution-base - State model: stateless ```json { "id": "mappls-nearby-ui-ios-distribution-base", "lens": "source", "title": "Mappls Nearby Search Widget for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-nearby-ui-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "13 headings", "href": "/reference/mappls-nearby-ui-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Source Swift: MapplsNearbyCategoriesViewController", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "label": "Source Swift: Properties of MapplsNearbyCategoriesViewController", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "label": "Source Swift: Call Back Handler", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "label": "Source Swift: Call Back Handler", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "label": "Source Swift: Call Back Handler", "href": "/reference/mappls-nearby-ui-ios-distribution-base" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-nearby-ui-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Nearby Search Widget for iOS", "href": "/sdks/mappls-nearby-ui-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Nearby Search Widget for iOS: source launchpad", "href": "/launchpads/mappls-nearby-ui-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-nearby-ui-ios-distribution-base integration harness", "href": "/launchpads/mappls-nearby-ui-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-nearby-ui-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-nearby-ui-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-nearby-ui-ios-distribution-base", "Mappls Nearby Search Widget for iOS", "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsRasterCatalogue Plugin for iOS - Identity: `documentation-coverage:source:mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-raster-catalogue-ios-distribution - State model: stateless ```json { "id": "mappls-raster-catalogue-ios-distribution", "lens": "source", "title": "MapplsRasterCatalogue Plugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-raster-catalogue-ios-distribution", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "15 headings", "href": "/reference/mappls-raster-catalogue-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Source Swift: Initialization MapplsRasterCatalogue Plugin", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "label": "Source Swift: Step 2 - Adding RasterCatalogue layer on Map", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-raster-catalogue-ios-distribution" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-raster-catalogue-ios-distribution#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsRasterCatalogue Plugin for iOS: source launchpad", "href": "/launchpads/mappls-raster-catalogue-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-raster-catalogue-ios-distribution integration harness", "href": "/launchpads/mappls-raster-catalogue-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-raster-catalogue-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-raster-catalogue-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-raster-catalogue-ios-distribution", "MapplsRasterCatalogue Plugin for iOS", "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsRasterCatalogue Plugin for iOS - Identity: `documentation-coverage:source:mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-raster-catalogue-ios-distribution-base - State model: stateless ```json { "id": "mappls-raster-catalogue-ios-distribution-base", "lens": "source", "title": "MapplsRasterCatalogue Plugin for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-raster-catalogue-ios-distribution-base", "stateModel": "stateless", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "15 headings", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Source Swift: Initialization MapplsRasterCatalogue Plugin", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "label": "Source Swift: Step 2 - Adding RasterCatalogue layer on Map", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "label": "Source Swift: Other Methods Available:", "href": "/reference/mappls-raster-catalogue-ios-distribution-base" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-raster-catalogue-ios-distribution-base#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsRasterCatalogue Plugin for iOS", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsRasterCatalogue Plugin for iOS: source launchpad", "href": "/launchpads/mappls-raster-catalogue-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-raster-catalogue-ios-distribution-base integration harness", "href": "/launchpads/mappls-raster-catalogue-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-raster-catalogue-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-raster-catalogue-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-raster-catalogue-ios-distribution-base", "MapplsRasterCatalogue Plugin for iOS", "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Intouch React Native SDK - Identity: `documentation-coverage:source:mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/reference/mappls-react-native-intouch-sdk - State model: stateful ```json { "id": "mappls-react-native-intouch-sdk", "lens": "source", "title": "Mappls Intouch React Native SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-react-native-intouch-sdk", "stateModel": "stateful", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mappls-react-native-intouch-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-react-native-intouch-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch React Native SDK", "href": "/sdks/mappls-react-native-intouch-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Intouch React Native SDK: source launchpad", "href": "/launchpads/mappls-react-native-intouch-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-react-native-intouch-sdk integration harness", "href": "/launchpads/mappls-react-native-intouch-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "mappls-react-native-intouch-sdk evidence-to-production workshop", "href": "/launchpads/mappls-react-native-intouch-sdk#workshop" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 14, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Address Verifier", "href": "/samples/address-verifier" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-react-native-intouch-sdk", "Mappls Intouch React Native SDK", "tracking-telematics", "workforce", "capture-feedback", "React Native", "intouch-telematics", "workmate", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls React Native SDK - Identity: `documentation-coverage:source:mappls-react-native-sdk` - Canonical: https://developer.mappls.com/reference/mappls-react-native-sdk - State model: stateless ```json { "id": "mappls-react-native-sdk", "lens": "source", "title": "Mappls React Native SDK", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-react-native-sdk", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/mappls-react-native-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-react-native-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls React Native SDK", "href": "/sdks/mappls-react-native-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls React Native SDK: source launchpad", "href": "/launchpads/mappls-react-native-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-react-native-sdk integration harness", "href": "/launchpads/mappls-react-native-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-react-native-sdk evidence-to-production workshop", "href": "/launchpads/mappls-react-native-sdk#workshop" }, { "label": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-react-native-sdk", "Mappls React Native SDK", "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "React Native", "maps", "search-places", "routes-navigation", "intouch-telematics", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Map APIs (REST) ! - Identity: `documentation-coverage:source:mappls-rest-apis` - Canonical: https://developer.mappls.com/reference/mappls-rest-apis - State model: stateless ```json { "id": "mappls-rest-apis", "lens": "source", "title": "Mappls Map APIs (REST) !", "subtitle": "REST API · current · normalized correspondence", "href": "/reference/mappls-rest-apis", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "13 headings", "href": "/reference/mappls-rest-apis" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "normalized", "count": 1, "evidence": [ { "label": "contenthub/dochub/mapmyindia-rest-api", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-rest-apis#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 21, "evidence": [ { "label": "core-location-get-api-places-woodpecker-address-standardization-api", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "label": "core-location-get-api-places-search-json-autosuggest-api", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "label": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "label": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "label": "core-location-get-rest-key-elevation-elevation-api", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "label": "core-location-get-api-places-geocode-geocode-api", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "label": "core-location-get-api-places-nearby-json-nearby-api", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "label": "core-location-post-api-places-along-route-poi-along-the-route-api", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Map APIs (REST) !: source launchpad", "href": "/launchpads/mappls-rest-apis" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-rest-apis integration harness", "href": "/launchpads/mappls-rest-apis" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "mappls-rest-apis evidence-to-production workshop", "href": "/launchpads/mappls-rest-apis#workshop" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 5, "evidence": [ { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" }, { "label": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "label": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-rest-apis", "Mappls Map APIs (REST) !", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform", "REST", "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsUIWidgets - UI Components SDK for iOS - Identity: `documentation-coverage:source:mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/reference/mappls-ui-widget-ios-distribution - State model: hybrid ```json { "id": "mappls-ui-widget-ios-distribution", "lens": "source", "title": "MapplsUIWidgets - UI Components SDK for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-ui-widget-ios-distribution", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "30 headings", "href": "/reference/mappls-ui-widget-ios-distribution" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: Add a full-screen control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsUIWidgets - UI Components SDK for iOS: source launchpad", "href": "/launchpads/mappls-ui-widget-ios-distribution" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-ui-widget-ios-distribution integration harness", "href": "/launchpads/mappls-ui-widget-ios-distribution" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-ui-widget-ios-distribution evidence-to-production workshop", "href": "/launchpads/mappls-ui-widget-ios-distribution#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-ui-widget-ios-distribution", "MapplsUIWidgets - UI Components SDK for iOS", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MapplsUIWidgets - UI Components SDK for iOS - Identity: `documentation-coverage:source:mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/reference/mappls-ui-widget-ios-distribution-base - State model: hybrid ```json { "id": "mappls-ui-widget-ios-distribution-base", "lens": "source", "title": "MapplsUIWidgets - UI Components SDK for iOS", "subtitle": "Distribution · distribution · unmatched correspondence", "href": "/reference/mappls-ui-widget-ios-distribution-base", "stateModel": "hybrid", "maturity": "distribution", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "30 headings", "href": "/reference/mappls-ui-widget-ios-distribution-base" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Source Swift: Add a full-screen control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" }, { "label": "Source Swift: SwiftUI Full Screen Control", "href": "/reference/mappls-ui-widget-ios-distribution-base" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsUIWidgets - UI Components SDK for iOS", "href": "/sdks/mappls-ui-widget-ios-distribution-base" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MapplsUIWidgets - UI Components SDK for iOS: source launchpad", "href": "/launchpads/mappls-ui-widget-ios-distribution-base" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-ui-widget-ios-distribution-base integration harness", "href": "/launchpads/mappls-ui-widget-ios-distribution-base" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "mappls-ui-widget-ios-distribution-base evidence-to-production workshop", "href": "/launchpads/mappls-ui-widget-ios-distribution-base#workshop" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-ui-widget-ios-distribution-base", "MapplsUIWidgets - UI Components SDK for iOS", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Sign up for Mappls - Identity: `documentation-coverage:source:mappls-web-maps` - Canonical: https://developer.mappls.com/reference/mappls-web-maps - State model: stateless ```json { "id": "mappls-web-maps", "lens": "source", "title": "Sign up for Mappls", "subtitle": "Guide · current · unmatched correspondence", "href": "/reference/mappls-web-maps", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "14 headings", "href": "/reference/mappls-web-maps" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Source JavaScript: Installation", "href": "/reference/mappls-web-maps" }, { "label": "Source JavaScript: Import Package", "href": "/reference/mappls-web-maps" }, { "label": "Source JavaScript: Import Package", "href": "/reference/mappls-web-maps" }, { "label": "Source JavaScript: Loading a Map", "href": "/reference/mappls-web-maps" }, { "label": "Source JavaScript: Loading a Map", "href": "/reference/mappls-web-maps" }, { "label": "2-language application boundary", "href": "/launchpads/mappls-web-maps#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Sign up for Mappls: source launchpad", "href": "/launchpads/mappls-web-maps" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-web-maps integration harness", "href": "/launchpads/mappls-web-maps" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 12, "evidence": [ { "label": "mappls-web-maps evidence-to-production workshop", "href": "/launchpads/mappls-web-maps#workshop" }, { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-web-maps", "Sign up for Mappls", "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "Web", "maps", "search-places", "routes-navigation", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Web Maps JS - Identity: `documentation-coverage:source:mappls-web-maps-js` - Canonical: https://developer.mappls.com/reference/mappls-web-maps-js - State model: stateless ```json { "id": "mappls-web-maps-js", "lens": "source", "title": "Mappls Web Maps JS", "subtitle": "Guide · current · unmatched correspondence", "href": "/reference/mappls-web-maps-js", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "34 headings", "href": "/reference/mappls-web-maps-js" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 11, "evidence": [ { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mappls-web-maps-js" }, { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mappls-web-maps-js" }, { "label": "Source HTML: Adding the Map Script to your web page", "href": "/reference/mappls-web-maps-js" }, { "label": "Source JavaScript: Adding the Map Script to your web page", "href": "/reference/mappls-web-maps-js" }, { "label": "Source JavaScript: Marker Implementation", "href": "/reference/mappls-web-maps-js" }, { "label": "Source JavaScript: Add Geojson layer", "href": "/reference/mappls-web-maps-js" }, { "label": "Source JavaScript: Geojson Quick Reference", "href": "/reference/mappls-web-maps-js" }, { "label": "Source JavaScript: Important Notes to remember", "href": "/reference/mappls-web-maps-js" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Web Maps JS: source launchpad", "href": "/launchpads/mappls-web-maps-js" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-web-maps-js integration harness", "href": "/launchpads/mappls-web-maps-js" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 12, "evidence": [ { "label": "mappls-web-maps-js evidence-to-production workshop", "href": "/launchpads/mappls-web-maps-js#workshop" }, { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-web-maps-js", "Mappls Web Maps JS", "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform", "Web", "maps", "search-places", "routes-navigation", "gis-analytics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Mappls Web Plugins - Identity: `documentation-coverage:source:mappls-web-plugins` - Canonical: https://developer.mappls.com/reference/mappls-web-plugins - State model: stateless ```json { "id": "mappls-web-plugins", "lens": "source", "title": "Mappls Web Plugins", "subtitle": "Widget · current · unmatched correspondence", "href": "/reference/mappls-web-plugins", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "14 headings", "href": "/reference/mappls-web-plugins" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-web-plugins#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Mappls Web Plugins: source launchpad", "href": "/launchpads/mappls-web-plugins" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-web-plugins integration harness", "href": "/launchpads/mappls-web-plugins" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "mappls-web-plugins evidence-to-production workshop", "href": "/launchpads/mappls-web-plugins#workshop" }, { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-web-plugins", "Mappls Web Plugins", "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform", "Web", "Widgets/Deep links", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Workmate SDK - Android - Identity: `documentation-coverage:source:mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/reference/mappls-workmate-android-sdk - State model: stateful ```json { "id": "mappls-workmate-android-sdk", "lens": "source", "title": "Workmate SDK - Android", "subtitle": "SDK · current · unmatched correspondence", "href": "/reference/mappls-workmate-android-sdk", "stateModel": "stateful", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "7 headings", "href": "/reference/mappls-workmate-android-sdk" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/mappls-workmate-android-sdk#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Workmate SDK - Android", "href": "/sdks/mappls-workmate-android-sdk" } ], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Workmate SDK - Android: source launchpad", "href": "/launchpads/mappls-workmate-android-sdk" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "mappls-workmate-android-sdk integration harness", "href": "/launchpads/mappls-workmate-android-sdk" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "mappls-workmate-android-sdk evidence-to-production workshop", "href": "/launchpads/mappls-workmate-android-sdk#workshop" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 12, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "mappls-workmate-android-sdk", "Workmate SDK - Android", "tracking-telematics", "workforce", "identity-platform", "Android", "intouch-telematics", "workmate", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Skydnn AI APIs - Identity: `documentation-coverage:source:skydnn-aiapi-docs` - Canonical: https://developer.mappls.com/reference/skydnn-aiapi-docs - State model: stateless ```json { "id": "skydnn-aiapi-docs", "lens": "source", "title": "Skydnn AI APIs", "subtitle": "REST API · current · exact correspondence", "href": "/reference/skydnn-aiapi-docs", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "4 headings", "href": "/reference/skydnn-aiapi-docs" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "aihub/docs/skydnn-aiapi-docs", "href": "/sources/reconciliation" } ], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/skydnn-aiapi-docs#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "skydnn-ai-get-models-returns-the-details-of-all-the-models", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models" }, { "label": "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model" }, { "label": "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "href": "/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" }, { "label": "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "href": "/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port" } ], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Skydnn AI APIs: source launchpad", "href": "/launchpads/skydnn-aiapi-docs" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "skydnn-aiapi-docs integration harness", "href": "/launchpads/skydnn-aiapi-docs" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 12, "evidence": [ { "label": "skydnn-aiapi-docs evidence-to-production workshop", "href": "/launchpads/skydnn-aiapi-docs#workshop" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Provision and validate a remote MCP client", "href": "/tutorials/mcp-client-identity" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 19, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "skydnn-aiapi-docs", "Skydnn AI APIs", "maps", "gis-analytics", "ai-vision", "capture-feedback", "REST", "AI/MCP", "maps", "gis-analytics", "ai-location", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 6, "coveredChecks": 6, "gaps": [], "priority": "none" } ``` ## documentation-coverage · V1.2.0 Logs - Identity: `documentation-coverage:source:v1-2-0-logs` - Canonical: https://developer.mappls.com/reference/v1-2-0-logs - State model: stateless ```json { "id": "v1-2-0-logs", "lens": "source", "title": "V1.2.0 Logs", "subtitle": "Sample · current · unmatched correspondence", "href": "/reference/v1-2-0-logs", "stateModel": "stateless", "maturity": "current", "checks": [ { "id": "source-document", "label": "Source document", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "1 headings", "href": "/reference/v1-2-0-logs" } ], "remediation": "Retrieve an exact first-party README, package manifest, or canonical document and regenerate its fingerprint." }, { "id": "local-correspondence", "label": "Public ↔ local correspondence", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Confirm the repository identity or record explicitly that no local counterpart exists." }, { "id": "code-example", "label": "Documented code example", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "2-language application boundary", "href": "/launchpads/v1-2-0-logs#code-lab" } ], "remediation": "Add a credential-safe, copyable example grounded in the source identity and failure behavior; distinguish generated application boundaries from provider syntax. Legacy and deprecated sources follow their migration track instead of receiving a new-build code lab." }, { "id": "api-reference", "label": "Normalized API reference", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the corresponding local OpenAPI/contract source into request, response, auth, failure, and language samples." }, { "id": "sdk-center", "label": "SDK/distribution selection record", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Add the SDK or distribution to the compatibility-aware selection center with install and lifecycle evidence." }, { "id": "quickstart", "label": "Exact-source quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "V1.2.0 Logs: source launchpad", "href": "/launchpads/v1-2-0-logs" } ], "remediation": "Create a first-success launchpad linked to this exact guide; do not substitute a platform-adjacent quickstart." }, { "id": "starter-kit", "label": "Exact-source starter kit", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "v1.2.0-logs integration harness", "href": "/launchpads/v1-2-0-logs" } ], "remediation": "Publish a runnable credential-empty integration harness whose manifest names this exact source evidence." }, { "id": "tutorial", "label": "Progressive source workshop", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "v1.2.0-logs evidence-to-production workshop", "href": "/launchpads/v1-2-0-logs#workshop" } ], "remediation": "Add a beginner-to-advanced tutorial for this exact source, with acceptance and hostile-path recovery." }, { "id": "stateful-journey", "label": "Exact-source durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Model the complete aggregate, states, transitions, idempotency, reconciliation, audit, privacy, observability, and recovery journey." }, { "id": "downloadable-app", "label": "Runnable journey app", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Bind the journey to a downloadable, restart-safe mini-app with declared automated tests." }, { "id": "migration", "label": "Migration/retirement track", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Create an explicit compatibility decision, staged cutover, acceptance gates, rollback, and retirement path." } ], "keywords": [ "v1.2.0-logs", "V1.2.0 Logs", "other", "Unspecified" ], "score": 100, "status": "complete", "requiredChecks": 5, "coveredChecks": 5, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Maps - Identity: `documentation-coverage:product:maps` - Canonical: https://developer.mappls.com/docs/maps - State model: stateless ```json { "id": "maps", "lens": "product", "title": "Maps", "subtitle": "Core location · 8 platforms", "href": "/docs/maps", "stateModel": "stateless", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Maps", "href": "/docs/maps" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 58, "evidence": [ { "label": "Mappls API Organization Guide", "href": "/reference/github" }, { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Transaction Definitions", "href": "/reference/mapmyindia-api-addendums" }, { "label": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Web Maps JS", "href": "/docs/maps" }, { "label": "Android", "href": "/docs/maps" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 8, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "label": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "label": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "label": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" }, { "label": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 19, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "label": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "core-location-get-api-places-woodpecker-address-standardization-api", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "label": "core-location-get-api-places-search-json-autosuggest-api", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "label": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "label": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "label": "core-location-get-rest-key-elevation-elevation-api", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "label": "core-location-get-api-places-geocode-geocode-api", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "label": "core-location-get-api-places-nearby-json-nearby-api", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "label": "core-location-post-api-places-along-route-poi-along-the-route-api", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 8, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Map Story", "href": "/samples/map-story" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "label": "Offline Release Control", "href": "/samples/offline-release-control" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 5, "evidence": [ { "label": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, { "label": "Choose the next store with evidence", "href": "/use-cases/retail-expansion" }, { "label": "A living operations map for the city", "href": "/use-cases/smart-city-operations" }, { "label": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" }, { "label": "Turn inspiration into an itinerary", "href": "/use-cases/travel-discovery" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "maps", "Core location", "Web", "Android", "iOS", "React Native", "Flutter", "Cordova", "Xamarin", "REST", "Vector and raster basemaps", "Markers, shapes, layers, and overlays", "Traffic and thematic visualization", "Custom styles and camera controls", "Static and travelled-route images", "Offline and embedded map packages" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Search & Places - Identity: `documentation-coverage:product:search-places` - Canonical: https://developer.mappls.com/docs/search-places - State model: stateless ```json { "id": "search-places", "lens": "product", "title": "Search & Places", "subtitle": "Core location · 7 platforms", "href": "/docs/search-places", "stateModel": "stateless", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Search & Places", "href": "/docs/search-places" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 49, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Transaction Definitions", "href": "/reference/mapmyindia-api-addendums" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "label": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Autosuggest", "href": "/docs/search-places" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 7, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "label": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "label": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" }, { "label": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 19, "evidence": [ { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "label": "Build a server-side geocoding boundary", "href": "/tutorials/rest-geocode-service" }, { "label": "Turn a device fix into a trustworthy check-in", "href": "/tutorials/reverse-geocode-check-in" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "core-location-get-api-places-woodpecker-address-standardization-api", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "label": "core-location-get-api-places-search-json-autosuggest-api", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "label": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "label": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "label": "core-location-get-rest-key-elevation-elevation-api", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "label": "core-location-get-api-places-geocode-geocode-api", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "label": "core-location-get-api-places-nearby-json-nearby-api", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "label": "core-location-post-api-places-along-route-poi-along-the-route-api", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Address Verifier", "href": "/samples/address-verifier" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 8, "evidence": [ { "label": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, { "label": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, { "label": "Choose the next store with evidence", "href": "/use-cases/retail-expansion" }, { "label": "Make address risk explainable", "href": "/use-cases/banking-address-risk" }, { "label": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, { "label": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, { "label": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" }, { "label": "Turn inspiration into an itinerary", "href": "/use-cases/travel-discovery" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "search-places", "Core location", "REST", "Web", "Android", "iOS", "React Native", "Flutter", "Widgets", "Autosuggest and text search", "Forward and reverse geocoding", "Nearby and route-corridor search", "Place details and categories", "Address validation and standardization", "Mappls Pin and DIGIPIN workflows" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Routes & Navigation - Identity: `documentation-coverage:product:routes-navigation` - Canonical: https://developer.mappls.com/docs/routes-navigation - State model: hybrid ```json { "id": "routes-navigation", "lens": "product", "title": "Routes & Navigation", "subtitle": "Mobility · 6 platforms", "href": "/docs/routes-navigation", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Routes & Navigation", "href": "/docs/routes-navigation" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 40, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "Transaction Definitions", "href": "/reference/mapmyindia-api-addendums" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "label": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "label": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "label": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Route request", "href": "/docs/routes-navigation" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 6, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "label": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "label": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "label": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 17, "evidence": [ { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "label": "Rank responders with a distance matrix", "href": "/tutorials/distance-matrix-dispatch" }, { "label": "Build a traffic-aware commute assistant", "href": "/tutorials/traffic-aware-commute" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "core-location-get-api-places-woodpecker-address-standardization-api", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "label": "core-location-get-api-places-search-json-autosuggest-api", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "label": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "label": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "label": "core-location-get-rest-key-elevation-elevation-api", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "label": "core-location-get-api-places-geocode-geocode-api", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "label": "core-location-get-api-places-nearby-json-nearby-api", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "label": "core-location-post-api-places-along-route-poi-along-the-route-api", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 11, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, { "label": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, { "label": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, { "label": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, { "label": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, { "label": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, { "label": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, { "label": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "routes-navigation", "Mobility", "REST", "Android", "iOS", "Automotive", "Linux", "React Native", "Multi-profile routing and alternatives", "Distance and time matrices", "Trip and vehicle-route optimization", "Map matching and snap-to-road", "Predictive routes and refreshed ETAs", "Online and offline turn-by-turn navigation" ], "score": 100, "status": "complete", "requiredChecks": 9, "coveredChecks": 9, "gaps": [], "priority": "none" } ``` ## documentation-coverage · InTouch Telematics - Identity: `documentation-coverage:product:intouch-telematics` - Canonical: https://developer.mappls.com/docs/intouch-telematics - State model: stateful ```json { "id": "intouch-telematics", "lens": "product", "title": "InTouch Telematics", "subtitle": "Operations · 6 platforms", "href": "/docs/intouch-telematics", "stateModel": "stateful", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "InTouch Telematics", "href": "/docs/intouch-telematics" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 53, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Mapmyindia Intouch REST Apis", "href": "/reference/mapmyindia-intouch-rest-apis" }, { "label": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "label": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "label": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Asset event consumer", "href": "/docs/intouch-telematics" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 6, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "label": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" }, { "label": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" }, { "label": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 53, "evidence": [ { "label": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0" }, { "label": "intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user" }, { "label": "intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0" }, { "label": "intouch-post-alarm-this-api-will-create-an-alarm", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm" }, { "label": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0" }, { "label": "intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s" }, { "label": "intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0" }, { "label": "intouch-delete-alarm-id-deletes-an-alarm-config", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 9, "evidence": [ { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, { "label": "A pickup flow that survives the real world", "href": "/use-cases/ride-hailing" }, { "label": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, { "label": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, { "label": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, { "label": "A living operations map for the city", "href": "/use-cases/smart-city-operations" }, { "label": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" }, { "label": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "intouch-telematics", "Operations", "REST", "Android", "iOS", "React Native", "Web", "Widgets", "Device and vehicle provisioning", "Live location and historical trails", "Trips, stoppages, and events", "Geofences, alerts, and notifications", "Driver behavior and fleet reports", "Mobile sensor-based tracking SDKs" ], "score": 100, "status": "complete", "requiredChecks": 9, "coveredChecks": 9, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Workmate - Identity: `documentation-coverage:product:workmate` - Canonical: https://developer.mappls.com/docs/workmate - State model: stateful ```json { "id": "workmate", "lens": "product", "title": "Workmate", "subtitle": "Operations · 3 platforms", "href": "/docs/workmate", "stateModel": "stateful", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Workmate", "href": "/docs/workmate" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "label": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "label": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Task lifecycle", "href": "/docs/workmate" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 3, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 5, "evidence": [ { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 13, "evidence": [ { "label": "workmate-get-clients-to-get-all-your-client-details", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details" }, { "label": "workmate-post-clients-to-create-new-client", "href": "/api-reference/workmate-post-clients-to-create-new-client" }, { "label": "workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account" }, { "label": "workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account" }, { "label": "workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance" }, { "label": "workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details" }, { "label": "workmate-get-reports-movements-userid-get-users-movement-details", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details" }, { "label": "workmate-get-tasklists-to-get-the-task-list-details", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Field-service task lifecycle", "href": "/journeys/field-service-task" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 8, "evidence": [ { "label": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, { "label": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, { "label": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, { "label": "A living operations map for the city", "href": "/use-cases/smart-city-operations" }, { "label": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" }, { "label": "Coordinate field operations across every plot", "href": "/use-cases/agriculture-field-ops" }, { "label": "Move material safely across a changing mine", "href": "/use-cases/mining-haulage-safety" }, { "label": "Operate the network from tower to doorstep", "href": "/use-cases/telecom-network-care" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "workmate", "Operations", "REST", "Android", "Web", "Worker and team management", "Task assignment and dispatch", "Attendance and shift workflows", "Client visits and proof of service", "Live operations and exceptions", "Forms, evidence, and completion reports" ], "score": 100, "status": "complete", "requiredChecks": 9, "coveredChecks": 9, "gaps": [], "priority": "none" } ``` ## documentation-coverage · GIS & Analytics - Identity: `documentation-coverage:product:gis-analytics` - Canonical: https://developer.mappls.com/docs/gis-analytics - State model: hybrid ```json { "id": "gis-analytics", "lens": "product", "title": "GIS & Analytics", "subtitle": "Intelligence · 4 platforms", "href": "/docs/gis-analytics", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "GIS & Analytics", "href": "/docs/gis-analytics" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 32, "evidence": [ { "label": "Transaction Definitions", "href": "/reference/mapmyindia-api-addendums" }, { "label": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Point-in-polygon analysis", "href": "/docs/gis-analytics" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 4, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "label": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Render a governed GeoJSON operations layer", "href": "/tutorials/geojson-operations-layer" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "core-location-get-api-places-woodpecker-address-standardization-api", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api" }, { "label": "core-location-get-api-places-search-json-autosuggest-api", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api" }, { "label": "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api" }, { "label": "core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api" }, { "label": "core-location-get-rest-key-elevation-elevation-api", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api" }, { "label": "core-location-get-api-places-geocode-geocode-api", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api" }, { "label": "core-location-get-api-places-nearby-json-nearby-api", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api" }, { "label": "core-location-post-api-places-along-route-poi-along-the-route-api", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Map Story", "href": "/samples/map-story" }, { "label": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 12, "evidence": [ { "label": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, { "label": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, { "label": "Choose the next store with evidence", "href": "/use-cases/retail-expansion" }, { "label": "Make address risk explainable", "href": "/use-cases/banking-address-risk" }, { "label": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, { "label": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, { "label": "Route coordinated response under pressure", "href": "/use-cases/emergency-response" }, { "label": "A living operations map for the city", "href": "/use-cases/smart-city-operations" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "gis-analytics", "Intelligence", "REST", "Web", "Widgets", "MCP", "Dataset upload and cataloguing", "Layer styling and thematic maps", "Spatial queries and analysis", "Dashboards and embedded insights", "Workspace roles and governed sharing", "Import, export, and lineage" ], "score": 100, "status": "complete", "requiredChecks": 9, "coveredChecks": 9, "gaps": [], "priority": "none" } ``` ## documentation-coverage · App Widgets & Deep Links - Identity: `documentation-coverage:product:app-widgets-deep-links` - Canonical: https://developer.mappls.com/docs/app-widgets-deep-links - State model: stateless ```json { "id": "app-widgets-deep-links", "lens": "product", "title": "App Widgets & Deep Links", "subtitle": "Experience · 5 platforms", "href": "/docs/app-widgets-deep-links", "stateModel": "stateless", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "App Widgets & Deep Links", "href": "/docs/app-widgets-deep-links" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 44, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "label": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "label": "Mapmyindia MGIS Libraries", "href": "/reference/mapmyindia-mgis-libraries" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Place link", "href": "/docs/app-widgets-deep-links" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 5, "evidence": [ { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" }, { "label": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" }, { "label": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" }, { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "label": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "label": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" }, { "label": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": false, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "label": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "label": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "label": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Turn inspiration into an itinerary", "href": "/use-cases/travel-discovery" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "app-widgets-deep-links", "Experience", "Widgets", "Deep links", "Web", "Android", "iOS", "Place and map visualization", "Directions and navigation hand-off", "Immersive 3D and RealView experiences", "Cross-platform universal links", "Low-code embeds", "Credential-free entry points" ], "score": 100, "status": "complete", "requiredChecks": 7, "coveredChecks": 7, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Offline & Automotive - Identity: `documentation-coverage:product:offline-automotive` - Canonical: https://developer.mappls.com/docs/offline-automotive - State model: stateful ```json { "id": "offline-automotive", "lens": "product", "title": "Offline & Automotive", "subtitle": "Embedded · 3 platforms", "href": "/docs/offline-automotive", "stateModel": "stateful", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Offline & Automotive", "href": "/docs/offline-automotive" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" }, { "label": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "label": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-sdk-ios" }, { "label": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution" }, { "label": "MapplsFeedbackKit for iOS", "href": "/reference/mappls-feedback-kit-ios-distribution-base" }, { "label": "Mappls Insight Embeddable Visualizations", "href": "/reference/mappls-insight-sdk" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Lifecycle pattern", "href": "/docs/offline-automotive" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 3, "evidence": [ { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" }, { "label": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "label": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Offline Release Control", "href": "/samples/offline-release-control" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Navigation built for intermittent connectivity", "href": "/use-cases/connected-vehicle" }, { "label": "Move material safely across a changing mine", "href": "/use-cases/mining-haulage-safety" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "offline-automotive", "Embedded", "Automotive", "Linux", "Android", "Offline maps, search, and routing", "Turn-by-turn guidance runtime", "Regional data compilation", "Voice and traffic customization", "GPS health and dead reckoning hooks", "Signed data and software updates" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · AI & Location - Identity: `documentation-coverage:product:ai-location` - Canonical: https://developer.mappls.com/docs/ai-location - State model: hybrid ```json { "id": "ai-location", "lens": "product", "title": "AI & Location", "subtitle": "Intelligence · 3 platforms", "href": "/docs/ai-location", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "AI & Location", "href": "/docs/ai-location" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 53, "evidence": [ { "label": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "label": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "label": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Agent tool contract", "href": "/docs/ai-location" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 3, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" }, { "label": "Render one accessible web map", "href": "/quickstart/web-map" }, { "label": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Provision and validate a remote MCP client", "href": "/tutorials/mcp-client-identity" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 21, "evidence": [ { "label": "mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "href": "/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client" }, { "label": "mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "href": "/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images" }, { "label": "mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "href": "/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image" }, { "label": "mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "href": "/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given" }, { "label": "mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "href": "/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box" }, { "label": "mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "href": "/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image" }, { "label": "mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "href": "/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image" }, { "label": "mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "href": "/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image" } ], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "label": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" }, { "label": "MCP Identity Interoperability Lab", "href": "/samples/mcp-identity-lab" }, { "label": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "ai-location", "Intelligence", "REST", "Web", "MCP", "Vision and imagery analysis", "Location-aware retrieval and ranking", "Natural-language map operations", "Typed tools for AI agents", "Spatial workflow orchestration", "Evaluation and grounding patterns" ], "score": 100, "status": "complete", "requiredChecks": 9, "coveredChecks": 9, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Capture & Feedback - Identity: `documentation-coverage:product:capture-feedback` - Canonical: https://developer.mappls.com/docs/capture-feedback - State model: hybrid ```json { "id": "capture-feedback", "lens": "product", "title": "Capture & Feedback", "subtitle": "Data operations · 2 platforms", "href": "/docs/capture-feedback", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "product-page", "label": "Product documentation", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Capture & Feedback", "href": "/docs/capture-feedback" } ], "remediation": "Publish a canonical product guide." }, { "id": "source-evidence", "label": "Source-backed references", "required": true, "status": "covered", "fidelity": "exact", "count": 60, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "Transaction Definitions", "href": "/reference/mapmyindia-api-addendums" }, { "label": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "label": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "label": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "label": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "label": "Mapmyindia MGIS Libraries", "href": "/reference/mapmyindia-mgis-libraries" } ], "remediation": "Map at least one repository guide to this product." }, { "id": "code-example", "label": "Product code samples", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Capture policy", "href": "/docs/capture-feedback" } ], "remediation": "Add credential-safe product examples in multiple relevant languages." }, { "id": "platform-quickstarts", "label": "Platform quickstarts", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 2, "evidence": [ { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" }, { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" } ], "remediation": "Add first-success paths for the supported product platforms." }, { "id": "tutorial", "label": "Progressive tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 6, "evidence": [ { "label": "Turn a device fix into a trustworthy check-in", "href": "/tutorials/reverse-geocode-check-in" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" }, { "label": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" }, { "label": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "remediation": "Add beginner, intermediate, and advanced product tutorials." }, { "id": "api-reference", "label": "Normalized API operations", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Normalize the product's REST contracts with request, response, auth, and failure evidence." }, { "id": "stateful-journey", "label": "Durable journey", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "iOS feedback report and review", "href": "/journeys/ios-feedback-report-review" }, { "label": "Consent-bound location capture evidence", "href": "/journeys/location-capture-evidence" }, { "label": "Governed place contribution and publication", "href": "/journeys/place-contribution-publication" } ], "remediation": "Document complete state ownership and recovery journeys." }, { "id": "downloadable-app", "label": "Tested mini-app", "required": true, "status": "covered", "fidelity": "exact", "count": 8, "evidence": [ { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Address Verifier", "href": "/samples/address-verifier" }, { "label": "Vision Evidence Desk", "href": "/samples/vision-evidence-desk" }, { "label": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" } ], "remediation": "Publish a downloadable application demonstrating a useful real-life outcome." }, { "id": "industry-solution", "label": "Industry scenarios", "required": true, "status": "covered", "fidelity": "exact", "count": 10, "evidence": [ { "label": "A delivery promise customers can trust", "href": "/use-cases/last-mile-delivery" }, { "label": "Dispatch the right technician, with the right proof", "href": "/use-cases/field-service" }, { "label": "Restore the grid from alarm to verified service", "href": "/use-cases/energy-grid-resilience" }, { "label": "Make address risk explainable", "href": "/use-cases/banking-address-risk" }, { "label": "Evidence-led claims from incident to settlement", "href": "/use-cases/insurance-claims" }, { "label": "Coordinate time-critical care without losing custody", "href": "/use-cases/hospital-care-logistics" }, { "label": "Run a safe, punctual airport turnaround", "href": "/use-cases/aviation-ground-operations" }, { "label": "Coordinate field operations across every plot", "href": "/use-cases/agriculture-field-ops" } ], "remediation": "Bind the product to real industry outcomes, personas, metrics, risks, and rollout guidance." } ], "keywords": [ "capture-feedback", "Data operations", "Android", "iOS", "Single-shot and subscribed location", "Accuracy and timeout policies", "Camera and field evidence", "Map issue reporting", "Reviewable update workflows", "Battery-aware capture" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · REST implementation - Identity: `documentation-coverage:platform:rest` - Canonical: https://developer.mappls.com/platforms/rest - State model: hybrid ```json { "id": "rest", "lens": "platform", "title": "REST implementation", "subtitle": "7 product families · 52 source records", "href": "/platforms/rest", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Put Mappls behind a stable service boundary in any stack.", "href": "/platforms/rest" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 52, "evidence": [ { "label": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "Mapmyindia Intouch REST Apis", "href": "/reference/mapmyindia-intouch-rest-apis" }, { "label": "Mappls mGIS APIs", "href": "/reference/mapmyindia-mgis-apis" }, { "label": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Mapmyindia REST API", "href": "/reference/mapmyindia-rest-api" }, { "label": "Mappls by MapmyIndia-Workmate-Apis", "href": "/reference/mapmyindia-workmate-apis" }, { "label": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Your first trusted Mappls request", "href": "/quickstart/rest-api" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Trusted REST service starter", "href": "/starter-kits/rest-api-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 15, "evidence": [ { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Call Mappls safely from a trusted server", "href": "/tutorials/oauth-server-integration" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Consume Mappls events exactly once in effect", "href": "/tutorials/webhook-reliability" }, { "label": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 12, "evidence": [ { "label": "Field-service task lifecycle", "href": "/journeys/field-service-task" }, { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "REST", "REST", "maps", "search-places", "routes-navigation", "intouch-telematics", "workmate", "gis-analytics", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Web implementation - Identity: `documentation-coverage:platform:web` - Canonical: https://developer.mappls.com/platforms/web - State model: hybrid ```json { "id": "web", "lens": "platform", "title": "Web implementation", "subtitle": "7 product families · 74 source records", "href": "/platforms/web", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Build expressive browser maps without surrendering performance or control.", "href": "/platforms/web" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 74, "evidence": [ { "label": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest" }, { "label": "MapmyIndia Geo-Analytics APIs !", "href": "/reference/mapmyindia-geoanalytics-api-web" }, { "label": "MapmyIndia Interactive Map JS API !", "href": "/reference/mapmyindia-interactive-map-js-api" }, { "label": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "label": "Mapmyindia Nearby Covid Places", "href": "/reference/mapmyindia-nearby-covid-places" }, { "label": "Mapmyindia Places N Directions Web SDK", "href": "/reference/mapmyindia-places-n-directions-web-sdk" }, { "label": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "href": "/reference/mapmyindia-purejs-sample-websdk-rest" }, { "label": "Mapmyindia Vector Maps JS Web SDK", "href": "/reference/mapmyindia-vector-maps-js-web-sdk" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Render one accessible web map", "href": "/quickstart/web-map" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Accessible web map host starter", "href": "/starter-kits/web-map-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 11, "evidence": [ { "label": "Put your first Mappls map on the web", "href": "/tutorials/first-web-map" }, { "label": "Build address autocomplete that users trust", "href": "/tutorials/address-autocomplete" }, { "label": "Build a route preview with alternatives", "href": "/tutorials/route-preview" }, { "label": "Create a nearby discovery experience", "href": "/tutorials/nearby-discovery" }, { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 4, "evidence": [ { "label": "Track a delivery with a trustworthy ETA", "href": "/tutorials/delivery-eta" }, { "label": "Build fleet geofence operations", "href": "/tutorials/fleet-geofences" }, { "label": "Build a reproducible site-selection model", "href": "/tutorials/gis-site-selection" }, { "label": "Reconcile a complete InTouch trip lifecycle", "href": "/tutorials/intouch-trip-lifecycle" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 21, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 10, "evidence": [ { "label": "Field-service task lifecycle", "href": "/journeys/field-service-task" }, { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" }, { "label": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "label": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Web", "Web", "maps", "search-places", "intouch-telematics", "workmate", "gis-analytics", "app-widgets-deep-links", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Android implementation - Identity: `documentation-coverage:platform:android` - Canonical: https://developer.mappls.com/platforms/android - State model: hybrid ```json { "id": "android", "lens": "platform", "title": "Android implementation", "subtitle": "8 product families · 39 source records", "href": "/platforms/android", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline.", "href": "/platforms/android" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 39, "evidence": [ { "label": "Mapmyindia Intouch Android SDK", "href": "/reference/mapmyindia-intouch-android-sdk" }, { "label": "MapmyIndia Vector Map Android SDK", "href": "/reference/mapmyindia-maps-vectorsdk-android" }, { "label": "Mappls Vector Map Android SDK JetPack Compose", "href": "/reference/mappls-android-compose-demo" }, { "label": "Mappls Android SDK", "href": "/reference/mappls-android-sdk" }, { "label": "Mappls Camera SDK", "href": "/reference/mappls-camera-sdk-android" }, { "label": "Mappls Intouch Android SDK", "href": "/reference/mappls-intouch-android-sdk" }, { "label": "Mappls Location Capture SDK", "href": "/reference/mappls-location-capture-android-sdk" }, { "label": "Workmate SDK - Android", "href": "/reference/mappls-workmate-android-sdk" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Create a lifecycle-safe Android map", "href": "/quickstart/android-native" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Android lifecycle adapter starter", "href": "/starter-kits/android-native-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Add Mappls to an Android app", "href": "/tutorials/android-map" }, { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Automate a complete Workmate task lifecycle", "href": "/tutorials/workmate-task-lifecycle" }, { "label": "Build proof review and rework for field jobs", "href": "/tutorials/workmate-proof-review" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 15, "evidence": [ { "label": "Field-service task lifecycle", "href": "/journeys/field-service-task" }, { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" }, { "label": "Offline automotive release", "href": "/journeys/offline-automotive-release" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Android", "Android", "maps", "search-places", "routes-navigation", "intouch-telematics", "workmate", "app-widgets-deep-links", "offline-automotive", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · iOS implementation - Identity: `documentation-coverage:platform:ios` - Canonical: https://developer.mappls.com/platforms/ios - State model: hybrid ```json { "id": "ios", "lens": "platform", "title": "iOS implementation", "subtitle": "6 product families · 70 source records", "href": "/platforms/ios", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks.", "href": "/platforms/ios" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 70, "evidence": [ { "label": "MapmyIndia Intouch iOS SDK", "href": "/reference/mapmyindia-intouch-ios-sdk" }, { "label": "Mapmyindia Maps VectorSDK IOS", "href": "/reference/mapmyindia-maps-vectorsdk-ios" }, { "label": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution" }, { "label": "Mappls Annotation Extension for iOS", "href": "/reference/mappls-annotation-extension-ios-distribution-base" }, { "label": "[MapplsAPICore]()", "href": "/reference/mappls-api-core-ios-distribution" }, { "label": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution" }, { "label": "[MapplsAPIKit (REST API Kit for iOS)]()", "href": "/reference/mappls-api-kit-ios-distribution-base" }, { "label": "MapplsCamera SDK for iOS", "href": "/reference/mappls-camera-ios-distribution" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Create a lifecycle-safe iOS map", "href": "/quickstart/ios-native" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "iOS view-ownership starter", "href": "/starter-kits/ios-native-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Add Mappls to an iOS app with Swift Package Manager", "href": "/tutorials/ios-map" }, { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Qualify an iOS Mappls release", "href": "/tutorials/ios-sdk-production-readiness" }, { "label": "Build restart-safe iOS direction and geofence handoffs", "href": "/tutorials/ios-direction-geofence-handoffs" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 20, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 13, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" }, { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "iOS", "iOS", "maps", "search-places", "routes-navigation", "intouch-telematics", "app-widgets-deep-links", "capture-feedback" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · React Native implementation - Identity: `documentation-coverage:platform:react-native` - Canonical: https://developer.mappls.com/platforms/react-native - State model: hybrid ```json { "id": "react-native", "lens": "platform", "title": "React Native implementation", "subtitle": "4 product families · 14 source records", "href": "/platforms/react-native", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Share product logic while keeping native Mappls capabilities honest on both platforms.", "href": "/platforms/react-native" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 14, "evidence": [ { "label": "Mapmyindia Intouch React Native SDK", "href": "/reference/mapmyindia-intouch-react-native-sdk" }, { "label": "Mapmyindia Maps SDK for React Native beta", "href": "/reference/mapmyindia-map-react-native-beta" }, { "label": "Mapmyindia REST API SDK for React Native - beta", "href": "/reference/mapmyindia-restapi-react-native-beta" }, { "label": "Mappls Intouch React Native SDK", "href": "/reference/mappls-react-native-intouch-sdk" }, { "label": "Mappls React Native SDK", "href": "/reference/mappls-react-native-sdk" }, { "label": "Local: mapmyindia-maps-vectorSDK-iOS", "href": "/sources/local-contenthub-bm21-mapmyindia-maps-vectorsdk-ios" }, { "label": "Local: mapmyindia-intouch-react-native-sdk", "href": "/sources/local-contenthub-dochub-mapmyindia-intouch-react-native-sdk" }, { "label": "Local: mapmyindia-map-react-native-beta", "href": "/sources/local-contenthub-dochub-mapmyindia-map-react-native-beta" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Bridge one map feature across Android and iOS", "href": "/quickstart/react-native-map" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "React Native bridge-contract starter", "href": "/starter-kits/react-native-map-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Build a cross-platform React Native map", "href": "/tutorials/react-native-map" }, { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Qualify React Native native parity", "href": "/tutorials/react-native-native-parity" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 19, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 8, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" }, { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" }, { "label": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "React Native", "React Native", "maps", "search-places", "routes-navigation", "intouch-telematics" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Flutter implementation - Identity: `documentation-coverage:platform:flutter` - Canonical: https://developer.mappls.com/platforms/flutter - State model: hybrid ```json { "id": "flutter", "lens": "platform", "title": "Flutter implementation", "subtitle": "2 product families · 7 source records", "href": "/platforms/flutter", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Use one Dart experience with deliberate native Mappls configuration underneath.", "href": "/platforms/flutter" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 7, "evidence": [ { "label": "Flutter MapmyIndia GL", "href": "/reference/flutter-mapmyindia-gl" }, { "label": "Mappls Flutter SDK", "href": "/reference/mappls-flutter-sdk" }, { "label": "Local: flutter-mapmyindia-gl", "href": "/sources/local-contenthub-dochub-flutter-mapmyindia-gl" }, { "label": "Local: gitmigrations", "href": "/sources/local-contenthub-pocs-gitmigrations" }, { "label": "Local: migis-api-rohan", "href": "/sources/local-rohan-migis-api-rohan" }, { "label": "Local: migis-platform-rohan", "href": "/sources/local-rohan-migis-platform-rohan" }, { "label": "Local: migist-complete", "href": "/sources/local-rohan-migist-complete" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Build a native-backed Flutter place picker", "href": "/quickstart/flutter-map" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Flutter place-selection starter", "href": "/starter-kits/flutter-map-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Build a Flutter map and place picker", "href": "/tutorials/flutter-map" }, { "label": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Production-harden a Flutter location feature", "href": "/tutorials/flutter-production-lifecycle" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 16, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 1, "evidence": [ { "label": "Consented address verification", "href": "/journeys/consented-address-verification" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Flutter", "Flutter", "maps", "search-places" ], "score": 100, "status": "complete", "requiredChecks": 7, "coveredChecks": 7, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Cordova implementation - Identity: `documentation-coverage:platform:cordova` - Canonical: https://developer.mappls.com/platforms/cordova - State model: stateless ```json { "id": "cordova", "lens": "platform", "title": "Cordova implementation", "subtitle": "1 product families · 9 source records", "href": "/platforms/cordova", "stateModel": "stateless", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Maintain hybrid location experiences with explicit native ownership and a migration path.", "href": "/platforms/cordova" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 9, "evidence": [ { "label": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-map-cordova-ionic-beta" }, { "label": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "href": "/reference/mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" }, { "label": "Local: wos", "href": "/sources/local-aihub-docs-wos" }, { "label": "Local: mapmyindia-api-addendums", "href": "/sources/local-contenthub-dochub-mapmyindia-api-addendums" }, { "label": "Local: mapmyindia-map-cordova-ionic-beta", "href": "/sources/local-contenthub-dochub-mapmyindia-map-cordova-ionic-beta" }, { "label": "Local: mapmyindia-restapi-cordova-ionic-beta", "href": "/sources/local-contenthub-dochub-mapmyindia-restapi-cordova-ionic-beta" }, { "label": "Local: gitmigrations", "href": "/sources/local-contenthub-pocs-gitmigrations" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Stabilize a Cordova map before migration", "href": "/quickstart/cordova-maintenance" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Cordova stabilization starter", "href": "/starter-kits/cordova-maintenance-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Ship a Mappls map in Cordova and Ionic", "href": "/tutorials/cordova-map" }, { "label": "Qualify a Cordova location release", "href": "/tutorials/cordova-release-hardening" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Qualify a Cordova location release", "href": "/tutorials/cordova-release-hardening" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 8, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Map Story", "href": "/samples/map-story" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "label": "Offline Release Control", "href": "/samples/offline-release-control" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Cordova", "Cordova/Ionic", "maps" ], "score": 100, "status": "complete", "requiredChecks": 7, "coveredChecks": 7, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Xamarin implementation - Identity: `documentation-coverage:platform:xamarin` - Canonical: https://developer.mappls.com/platforms/xamarin - State model: stateless ```json { "id": "xamarin", "lens": "platform", "title": "Xamarin implementation", "subtitle": "1 product families · 16 source records", "href": "/platforms/xamarin", "stateModel": "stateless", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Stabilize existing .NET mobile integrations and move forward without losing behavior.", "href": "/platforms/xamarin" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 16, "evidence": [ { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" }, { "label": "Local: devops-cvai", "href": "/sources/local-aihub-docs-devops-cvai" }, { "label": "Local: dmt-product-marketing", "href": "/sources/local-aihub-docs-dmt-product-marketing" }, { "label": "Local: helix-docs", "href": "/sources/local-aihub-docs-helix-docs" }, { "label": "Local: wos", "href": "/sources/local-aihub-docs-wos" }, { "label": "Local: genesis-tdd", "href": "/sources/local-aihub-scripts-genesis-tdd" }, { "label": "Local: mapmyindia-interactive-map-js-api", "href": "/sources/local-contenthub-dochub-mapmyindia-interactive-map-js-api" }, { "label": "Local: mapmyindia-rest-api", "href": "/sources/local-contenthub-dochub-mapmyindia-rest-api" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Extract a Xamarin map integration for replacement", "href": "/quickstart/xamarin-maintenance" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Xamarin extraction starter", "href": "/starter-kits/xamarin-maintenance-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Integrate Mappls into a Xamarin application", "href": "/tutorials/xamarin-map" }, { "label": "Harden and migrate a Xamarin location feature", "href": "/tutorials/xamarin-maintenance-migration" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Harden and migrate a Xamarin location feature", "href": "/tutorials/xamarin-maintenance-migration" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 8, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Map Story", "href": "/samples/map-story" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" }, { "label": "Offline Release Control", "href": "/samples/offline-release-control" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": false, "status": "not-applicable", "fidelity": "not-applicable", "count": 0, "evidence": [], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Xamarin", "Xamarin/.NET", "maps" ], "score": 100, "status": "complete", "requiredChecks": 7, "coveredChecks": 7, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Linux implementation - Identity: `documentation-coverage:platform:linux` - Canonical: https://developer.mappls.com/platforms/linux - State model: hybrid ```json { "id": "linux", "lens": "platform", "title": "Linux implementation", "subtitle": "2 product families · 23 source records", "href": "/platforms/linux", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Run location and navigation reliably on controlled, embedded Linux systems.", "href": "/platforms/linux" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 23, "evidence": [ { "label": "Local: InhouseDMS", "href": "/sources/local-aihub-apps-inhousedms" }, { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" }, { "label": "Local: devops-cvai", "href": "/sources/local-aihub-docs-devops-cvai" }, { "label": "Local: wos", "href": "/sources/local-aihub-docs-wos" }, { "label": "Local: anupriya", "href": "/sources/local-aihub-practice-anupriya" }, { "label": "Local: kundan", "href": "/sources/local-aihub-practice-kundan" }, { "label": "Local: niraj", "href": "/sources/local-aihub-practice-niraj" }, { "label": "Local: pallawi", "href": "/sources/local-aihub-practice-pallawi" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Boot a supervised embedded map client", "href": "/quickstart/linux-embedded" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Embedded Linux supervisor starter", "href": "/starter-kits/linux-embedded-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "label": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "label": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 11, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 5, "evidence": [ { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Offline automotive release", "href": "/journeys/offline-automotive-release" }, { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Linux", "Linux/Embedded", "routes-navigation", "offline-automotive" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Automotive implementation - Identity: `documentation-coverage:platform:automotive` - Canonical: https://developer.mappls.com/platforms/automotive - State model: hybrid ```json { "id": "automotive", "lens": "platform", "title": "Automotive implementation", "subtitle": "2 product families · 40 source records", "href": "/platforms/automotive", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen.", "href": "/platforms/automotive" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 40, "evidence": [ { "label": "Local: InhouseDMS", "href": "/sources/local-aihub-apps-inhousedms" }, { "label": "Local: aimldl-doc", "href": "/sources/local-aihub-docs-aimldl-doc" }, { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" }, { "label": "Local: devops-cvai", "href": "/sources/local-aihub-docs-devops-cvai" }, { "label": "Local: dmt-product-marketing", "href": "/sources/local-aihub-docs-dmt-product-marketing" }, { "label": "Local: skydnn-aiapi-docs", "href": "/sources/local-aihub-docs-skydnn-aiapi-docs" }, { "label": "Local: wos", "href": "/sources/local-aihub-docs-wos" }, { "label": "Local: anupriya", "href": "/sources/local-aihub-practice-anupriya" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Simulate one recoverable navigation session", "href": "/quickstart/automotive-navigation" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Automotive release-manifest starter", "href": "/starter-kits/automotive-navigation-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "label": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Design an interruption-safe offline map update", "href": "/tutorials/offline-package-update" }, { "label": "Operate a Mappls client on embedded Linux", "href": "/tutorials/linux-map-client" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 11, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Field Service Console", "href": "/samples/field-service" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 5, "evidence": [ { "label": "Coordinated incident response", "href": "/journeys/emergency-incident-response" }, { "label": "Recoverable navigation session", "href": "/journeys/navigation-session" }, { "label": "Durable multi-stop itinerary", "href": "/journeys/durable-weekend-itinerary" }, { "label": "Offline automotive release", "href": "/journeys/offline-automotive-release" }, { "label": "iOS direction planning and navigation handoff", "href": "/journeys/ios-direction-planning-handoff" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Automotive", "Automotive", "Linux/Embedded", "routes-navigation", "offline-automotive" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Widgets implementation - Identity: `documentation-coverage:platform:widgets` - Canonical: https://developer.mappls.com/platforms/widgets - State model: hybrid ```json { "id": "widgets", "lens": "platform", "title": "Widgets implementation", "subtitle": "4 product families · 65 source records", "href": "/platforms/widgets", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate.", "href": "/platforms/widgets" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 65, "evidence": [ { "label": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "label": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "label": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "label": "Local: skydnn-con", "href": "/sources/local-aihub-apps-skydnn-con" }, { "label": "Local: helix-widgets-imageviewer", "href": "/sources/local-aihub-demos-helix-widgets-imageviewer" }, { "label": "Local: helix-widgets-ngimageviewer", "href": "/sources/local-aihub-demos-helix-widgets-ngimageviewer" }, { "label": "Local: aimldl-doc", "href": "/sources/local-aihub-docs-aimldl-doc" }, { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Embed a place journey with an owned fallback", "href": "/quickstart/widgets-place" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Widget journey host starter", "href": "/starter-kits/widgets-place-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Embed a place picker widget", "href": "/tutorials/web-widget-place-picker" }, { "label": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Operate widgets as untrusted lifecycle surfaces", "href": "/tutorials/widget-host-production" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 18, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Delivery Control Tower", "href": "/samples/delivery-control-tower" }, { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Fleet Geofence Monitor", "href": "/samples/fleet-geofence" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 7, "evidence": [ { "label": "Connected fleet trip", "href": "/journeys/connected-fleet-trip" }, { "label": "Fleet geofence exception", "href": "/journeys/fleet-geofence-exception" }, { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" }, { "label": "Consented address verification", "href": "/journeys/consented-address-verification" }, { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "label": "iOS geofence draft and publication boundary", "href": "/journeys/ios-geofence-draft" }, { "label": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Widgets", "Widgets/Deep links", "Web", "search-places", "intouch-telematics", "gis-analytics", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## documentation-coverage · Deep links implementation - Identity: `documentation-coverage:platform:deep-links` - Canonical: https://developer.mappls.com/platforms/deep-links - State model: hybrid ```json { "id": "deep-links", "lens": "platform", "title": "Deep links implementation", "subtitle": "1 product families · 42 source records", "href": "/platforms/deep-links", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement.", "href": "/platforms/deep-links" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 42, "evidence": [ { "label": "Mapmyindia Intouch Web Plugins", "href": "/reference/mapmyindia-intouch-web-plugins" }, { "label": "Mappls App Widgets", "href": "/reference/mappls-app-widgets" }, { "label": "Mappls Web Plugins", "href": "/reference/mappls-web-plugins" }, { "label": "Local: skydnn-con", "href": "/sources/local-aihub-apps-skydnn-con" }, { "label": "Local: helix-widgets-imageviewer", "href": "/sources/local-aihub-demos-helix-widgets-imageviewer" }, { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" }, { "label": "Local: devops-cvai", "href": "/sources/local-aihub-docs-devops-cvai" }, { "label": "Local: dmt-product-marketing", "href": "/sources/local-aihub-docs-dmt-product-marketing" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Ship one zero-SDK Mappls hand-off", "href": "/quickstart/deep-links" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Deep-link handoff starter", "href": "/starter-kits/deep-links-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Create a zero-SDK location campaign", "href": "/tutorials/deep-link-campaign" }, { "label": "Hand off to navigation with a resilient deep link", "href": "/tutorials/navigation-deep-link" }, { "label": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Operate deep links across every hand-off", "href": "/tutorials/deep-link-attribution-resilience" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 6, "evidence": [ { "label": "Store Locator", "href": "/samples/store-locator" }, { "label": "Weekend Trip Planner", "href": "/samples/trip-planner" }, { "label": "Widget Journey Host", "href": "/samples/widget-journey-host" }, { "label": "Deep-link & Native UI Journey Host", "href": "/samples/deep-link-journey-host" }, { "label": "Place Contribution Desk", "href": "/samples/place-contribution-desk" }, { "label": "RealView Inspection Desk", "href": "/samples/realview-inspection-desk" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": false, "status": "covered", "fidelity": "product-adjacent", "count": 2, "evidence": [ { "label": "Application-owned widget selection", "href": "/journeys/widget-selection-session" }, { "label": "Entitled RealView remote inspection", "href": "/journeys/realview-remote-inspection" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "Deep links", "Widgets/Deep links", "app-widgets-deep-links" ], "score": 100, "status": "complete", "requiredChecks": 7, "coveredChecks": 7, "gaps": [], "priority": "none" } ``` ## documentation-coverage · MCP implementation - Identity: `documentation-coverage:platform:mcp` - Canonical: https://developer.mappls.com/platforms/mcp - State model: hybrid ```json { "id": "mcp", "lens": "platform", "title": "MCP implementation", "subtitle": "2 product families · 33 source records", "href": "/platforms/mcp", "stateModel": "hybrid", "maturity": "canonical", "checks": [ { "id": "playbook", "label": "Platform playbook", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Give AI systems typed Mappls capabilities with policy, evidence, and human control.", "href": "/platforms/mcp" } ], "remediation": "Publish the architecture and lifecycle playbook." }, { "id": "source-evidence", "label": "Platform source evidence", "required": true, "status": "covered", "fidelity": "exact", "count": 33, "evidence": [ { "label": "MAPPLS AI / ML APIs", "href": "/reference/mappls-ai-apis" }, { "label": "Skydnn AI APIs", "href": "/reference/skydnn-aiapi-docs" }, { "label": "Local: skydnn-con", "href": "/sources/local-aihub-apps-skydnn-con" }, { "label": "Local: helix-widgets-imageviewer", "href": "/sources/local-aihub-demos-helix-widgets-imageviewer" }, { "label": "Local: helix-widgets-ngimageviewer", "href": "/sources/local-aihub-demos-helix-widgets-ngimageviewer" }, { "label": "Local: aimldl-doc", "href": "/sources/local-aihub-docs-aimldl-doc" }, { "label": "Local: aisuite", "href": "/sources/local-aihub-docs-aisuite" }, { "label": "Local: devops-cvai", "href": "/sources/local-aihub-docs-devops-cvai" } ], "remediation": "Map public or reconciled local platform-specific repositories and selection boundaries." }, { "id": "quickstart", "label": "First-success quickstart", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "Connect a read-only Mappls agent", "href": "/quickstart/mcp-agent" } ], "remediation": "Publish one complete first-success path." }, { "id": "starter-kit", "label": "Downloadable starter", "required": true, "status": "covered", "fidelity": "exact", "count": 1, "evidence": [ { "label": "MCP client policy starter", "href": "/starter-kits/mcp-agent-starter" } ], "remediation": "Package an inspectable credential-empty starter." }, { "id": "tutorial", "label": "Platform tutorials", "required": true, "status": "covered", "fidelity": "exact", "count": 3, "evidence": [ { "label": "Give an AI agent grounded Mappls tools", "href": "/tutorials/mappls-mcp-agent" }, { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Provision and validate a remote MCP client", "href": "/tutorials/mcp-client-identity" } ], "remediation": "Add platform-specific tutorials with release failure recovery." }, { "id": "advanced-tutorial", "label": "Advanced production tutorial", "required": true, "status": "covered", "fidelity": "exact", "count": 2, "evidence": [ { "label": "Coordinate a complete Mappls A2A journey", "href": "/tutorials/a2a-solution-coordination" }, { "label": "Provision and validate a remote MCP client", "href": "/tutorials/mcp-client-identity" } ], "remediation": "Add lifecycle, security, performance, offline, upgrade, and teardown guidance." }, { "id": "downloadable-app", "label": "Runnable examples", "required": true, "status": "covered", "fidelity": "platform-adjacent", "count": 10, "evidence": [ { "label": "Grid Restoration Desk", "href": "/samples/grid-restoration-desk" }, { "label": "Care Transfer Desk", "href": "/samples/care-transfer-desk" }, { "label": "Airside Turnaround Desk", "href": "/samples/airside-turnaround-desk" }, { "label": "Retail Site Lab", "href": "/samples/retail-site-lab" }, { "label": "Incident Dispatch", "href": "/samples/incident-dispatch" }, { "label": "Map Story", "href": "/samples/map-story" }, { "label": "Spatial Operations Agent", "href": "/samples/spatial-agent" }, { "label": "A2A Solution Studio", "href": "/samples/a2a-solution-studio" } ], "remediation": "Provide a downloadable real-life app that exercises the platform boundary." }, { "id": "stateful-journey", "label": "Stateful operating journey", "required": true, "status": "covered", "fidelity": "product-adjacent", "count": 3, "evidence": [ { "label": "Governed spatial analysis", "href": "/journeys/governed-spatial-analysis" }, { "label": "Governed spatial agent run", "href": "/journeys/governed-spatial-agent-run" }, { "label": "Governed SkyDNN inference review", "href": "/journeys/vision-inference-review" } ], "remediation": "Connect platform code to full state, retry, reconciliation, observability, and recovery journeys." } ], "keywords": [ "MCP", "AI/MCP", "gis-analytics", "ai-location" ], "score": 100, "status": "complete", "requiredChecks": 8, "coveredChecks": 8, "gaps": [], "priority": "none" } ``` ## source-lifecycle · .github - Identity: `source-lifecycle:public-github` - Canonical: https://developer.mappls.com/sources/public-github - State model: stateless ```json { "sourceId": "public-github", "repository": ".github", "publicUrl": "https://github.com/mappls-api/.github", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T09:01:58Z", "snapshotFingerprint": "862c91224d2b3e3fd8d3bed84fed9497c507bdfb33c46136c065828715f3345f", "ageDays": 13, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps" ], "platforms": [ "Unspecified" ], "documentCount": 1, "endpointCount": 8, "localCandidates": [], "sourceHref": "/sources/public-github", "migrationHref": null } ``` ## source-lifecycle · flutter-mapmyindia-gl - Identity: `source-lifecycle:public-flutter-mapmyindia-gl` - Canonical: https://developer.mappls.com/sources/public-flutter-mapmyindia-gl - State model: stateless ```json { "sourceId": "public-flutter-mapmyindia-gl", "repository": "flutter-mapmyindia-gl", "publicUrl": "https://github.com/mappls-api/flutter-mapmyindia-gl", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2022-09-30T08:39:02Z", "snapshotFingerprint": "925a61dda2d31e0ceb80aac0208b0c87813b4af2aea20769bd8b6659f3c64b18", "ageDays": 1417, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "platforms": [ "Android", "iOS", "Flutter", "Linux/Embedded", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 8, "localCandidates": [ { "id": "local-contenthub-dochub-flutter-mapmyindia-gl", "name": "flutter-mapmyindia-gl", "relativePath": "contenthub/dochub/flutter-mapmyindia-gl" } ], "sourceHref": "/sources/public-flutter-mapmyindia-gl", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-angular-sample-webSDK-REST - Identity: `source-lifecycle:public-mapmyindia-angular-sample-websdk-rest` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-angular-sample-websdk-rest - State model: stateless ```json { "sourceId": "public-mapmyindia-angular-sample-websdk-rest", "repository": "mapmyindia-angular-sample-webSDK-REST", "publicUrl": "https://github.com/mappls-api/mapmyindia-angular-sample-webSDK-REST", "classification": "sample", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:sample" ], "reason": "The repository name or public description explicitly identifies learning or sample material." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2020-02-07T06:28:14Z", "snapshotFingerprint": "4280593e3c2f3278656e1952146c78619241768e765947d176479fae11506990", "ageDays": 2383, "freshness": "historical", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for learning and integration shape only. Revalidate every dependency, credential boundary, error path, and production control against current product documentation.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "identity-platform" ], "platforms": [ "Web", "REST", "Server/Compiler" ], "documentCount": 1, "endpointCount": 12, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-angular-sample-websdk-rest", "name": "mapmyindia-angular-sample-webSDK-REST", "relativePath": "contenthub/dochub/mapmyindia-angular-sample-webSDK-REST" } ], "sourceHref": "/sources/public-mapmyindia-angular-sample-websdk-rest", "migrationHref": null } ``` ## source-lifecycle · mapmyindia-api-addendums - Identity: `source-lifecycle:public-mapmyindia-api-addendums` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-api-addendums - State model: stateless ```json { "sourceId": "public-mapmyindia-api-addendums", "repository": "mapmyindia-api-addendums", "publicUrl": "https://github.com/mappls-api/mapmyindia-api-addendums", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2025-05-16T04:53:13Z", "snapshotFingerprint": "ebad8a29c9471bb640639fc011db95459e2867d20dcd30a6375eb3129cc03ba8", "ageDays": 458, "freshness": "aging", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback" ], "platforms": [ "Android", "iOS", "Web", "REST", "Cordova/Ionic", "Server/Compiler" ], "documentCount": 1, "endpointCount": 32, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-api-addendums", "name": "mapmyindia-api-addendums", "relativePath": "contenthub/dochub/mapmyindia-api-addendums" } ], "sourceHref": "/sources/public-mapmyindia-api-addendums", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-geoanalytics-api-web - Identity: `source-lifecycle:public-mapmyindia-geoanalytics-api-web` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-geoanalytics-api-web - State model: stateless ```json { "sourceId": "public-mapmyindia-geoanalytics-api-web", "repository": "mapmyindia-geoanalytics-api-web", "publicUrl": "https://github.com/mappls-api/mapmyindia-geoanalytics-api-web", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2020-02-24T09:58:50Z", "snapshotFingerprint": "8b1425c222c239cb4ffee5c1e6d0701d74ef02b0e32b827876f909b3b9bfc6ea", "ageDays": 2366, "freshness": "historical", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateless", "productAreas": [ "maps", "gis-analytics" ], "platforms": [ "Web", "Server/Compiler" ], "documentCount": 1, "endpointCount": 11, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-geoanalytics-api-web", "name": "mapmyindia-geoanalytics-api-web", "relativePath": "contenthub/dochub/mapmyindia-geoanalytics-api-web" } ], "sourceHref": "/sources/public-mapmyindia-geoanalytics-api-web", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-interactive-map-js-api - Identity: `source-lifecycle:public-mapmyindia-interactive-map-js-api` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-interactive-map-js-api - State model: stateless ```json { "sourceId": "public-mapmyindia-interactive-map-js-api", "repository": "mapmyindia-interactive-map-js-api", "publicUrl": "https://github.com/mappls-api/mapmyindia-interactive-map-js-api", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2022-02-11T11:57:22Z", "snapshotFingerprint": "d41c7d998fba044ff84206f64e197928707ef64fd2e005dd1076828836c1fe93", "ageDays": 1648, "freshness": "historical", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links" ], "platforms": [ "Web", "Xamarin/.NET", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 39, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-interactive-map-js-api", "name": "mapmyindia-interactive-map-js-api", "relativePath": "contenthub/dochub/mapmyindia-interactive-map-js-api" } ], "sourceHref": "/sources/public-mapmyindia-interactive-map-js-api", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-intouch-android-sdk - Identity: `source-lifecycle:public-mapmyindia-intouch-android-sdk` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-intouch-android-sdk - State model: stateful ```json { "sourceId": "public-mapmyindia-intouch-android-sdk", "repository": "mapmyindia-intouch-android-sdk", "publicUrl": "https://github.com/mappls-api/mapmyindia-intouch-android-sdk", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2024-04-18T11:30:50Z", "snapshotFingerprint": "5cfa92eb45ca42e58241721a86ef1c5655708eed1817d098acd8d2e45202e9aa", "ageDays": 851, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "identity-platform" ], "platforms": [ "Android", "Web", "REST", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 15, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-android-sdk", "name": "mapmyindia-intouch-android-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-android-sdk" } ], "sourceHref": "/sources/public-mapmyindia-intouch-android-sdk", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-intouch-ios-sdk - Identity: `source-lifecycle:public-mapmyindia-intouch-ios-sdk` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-intouch-ios-sdk - State model: stateful ```json { "sourceId": "public-mapmyindia-intouch-ios-sdk", "repository": "mapmyindia-intouch-ios-sdk", "publicUrl": "https://github.com/mappls-api/mapmyindia-intouch-ios-sdk", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2021-07-16T11:02:24Z", "snapshotFingerprint": "c2030b086830474b9201bba6c6f017f24ebd07b5fee338a41cf1301793fdcc43", "ageDays": 1858, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateful", "productAreas": [ "maps", "tracking-telematics", "workforce", "gis-analytics", "identity-platform" ], "platforms": [ "iOS", "Automotive", "Server/Compiler" ], "documentCount": 1, "endpointCount": 5, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-ios-sdk", "name": "mapmyindia-intouch-ios-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-ios-sdk" } ], "sourceHref": "/sources/public-mapmyindia-intouch-ios-sdk", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-intouch-react-native-sdk - Identity: `source-lifecycle:public-mapmyindia-intouch-react-native-sdk` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-intouch-react-native-sdk - State model: stateful ```json { "sourceId": "public-mapmyindia-intouch-react-native-sdk", "repository": "mapmyindia-intouch-react-native-sdk", "publicUrl": "https://github.com/mappls-api/mapmyindia-intouch-react-native-sdk", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2024-11-21T06:19:08Z", "snapshotFingerprint": "5308f84765ed33f994e7e78369adc761b1bbbb8b5fe6678f28705b9200d8ff2c", "ageDays": 634, "freshness": "aging", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "React Native", "Server/Compiler" ], "documentCount": 1, "endpointCount": 17, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-react-native-sdk", "name": "mapmyindia-intouch-react-native-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-react-native-sdk" } ], "sourceHref": "/sources/public-mapmyindia-intouch-react-native-sdk", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-intouch-rest-apis - Identity: `source-lifecycle:public-mapmyindia-intouch-rest-apis` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-intouch-rest-apis - State model: stateful ```json { "sourceId": "public-mapmyindia-intouch-rest-apis", "repository": "mapmyindia-intouch-rest-apis", "publicUrl": "https://github.com/mappls-api/mapmyindia-intouch-rest-apis", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": { "repository": "mappls-intouch-rest-apis", "url": "https://github.com/mappls-api/mappls-intouch-rest-apis", "authority": "source-declared" }, "matchQuality": "exact", "pushedAt": "2022-06-06T10:44:49Z", "snapshotFingerprint": "e710e26285a1a2e7adfd79af416ee5074734093a377001519fff927baacd0475", "ageDays": 1533, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateful", "productAreas": [ "tracking-telematics" ], "platforms": [ "REST" ], "documentCount": 1, "endpointCount": 0, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "name": "mapmyindia-intouch-rest-apis", "relativePath": "contenthub/dochub/mapmyindia-intouch-rest-apis" } ], "sourceHref": "/sources/public-mapmyindia-intouch-rest-apis", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-intouch-web-plugins - Identity: `source-lifecycle:public-mapmyindia-intouch-web-plugins` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-intouch-web-plugins - State model: stateful ```json { "sourceId": "public-mapmyindia-intouch-web-plugins", "repository": "mapmyindia-intouch-web-plugins", "publicUrl": "https://github.com/mappls-api/mapmyindia-intouch-web-plugins", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2024-08-30T10:24:53Z", "snapshotFingerprint": "46c4e6b6f458cbdde4ea79647496d6dd11c34a0f3875805165d65c8635844b7e", "ageDays": 717, "freshness": "aging", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Web", "Widgets/Deep links", "AI/MCP" ], "documentCount": 1, "endpointCount": 16, "localCandidates": [], "sourceHref": "/sources/public-mapmyindia-intouch-web-plugins", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-map-cordova-ionic-beta - Identity: `source-lifecycle:public-mapmyindia-map-cordova-ionic-beta` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-map-cordova-ionic-beta - State model: stateless ```json { "sourceId": "public-mapmyindia-map-cordova-ionic-beta", "repository": "mapmyindia-map-cordova-ionic-beta", "publicUrl": "https://github.com/mappls-api/mapmyindia-map-cordova-ionic-beta", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2022-03-08T11:25:28Z", "snapshotFingerprint": "5f735965d8989d61adc3fbbe3abd36944d7bcf94dbbbe1f13e5ff582a93875cd", "ageDays": 1623, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "gis-analytics", "widgets-deep-links" ], "platforms": [ "Android", "iOS", "Web", "Cordova/Ionic", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 14, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-map-cordova-ionic-beta", "name": "mapmyindia-map-cordova-ionic-beta", "relativePath": "contenthub/dochub/mapmyindia-map-cordova-ionic-beta" } ], "sourceHref": "/sources/public-mapmyindia-map-cordova-ionic-beta", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-map-react-native-beta - Identity: `source-lifecycle:public-mapmyindia-map-react-native-beta` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-map-react-native-beta - State model: stateless ```json { "sourceId": "public-mapmyindia-map-react-native-beta", "repository": "mapmyindia-map-react-native-beta", "publicUrl": "https://github.com/mappls-api/mapmyindia-map-react-native-beta", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2022-03-24T09:12:07Z", "snapshotFingerprint": "2f2e63a8feeec23664d02304f373e81af373f0c6738fc9d524c1247e5799ad22", "ageDays": 1607, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "React Native", "Server/Compiler" ], "documentCount": 1, "endpointCount": 36, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-map-react-native-beta", "name": "mapmyindia-map-react-native-beta", "relativePath": "contenthub/dochub/mapmyindia-map-react-native-beta" } ], "sourceHref": "/sources/public-mapmyindia-map-react-native-beta", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-maps-vectorSDK-android - Identity: `source-lifecycle:public-mapmyindia-maps-vectorsdk-android` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-maps-vectorsdk-android - State model: stateless ```json { "sourceId": "public-mapmyindia-maps-vectorsdk-android", "repository": "mapmyindia-maps-vectorSDK-android", "publicUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-android", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2022-05-05T04:35:55Z", "snapshotFingerprint": "ebbf7b3285901de88cbc9a9186189e01941649952363c0faf7992b0678712c13", "ageDays": 1565, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android", "Web", "REST", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 12, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-maps-vectorsdk-android", "name": "mapmyindia-maps-vectorSDK-android", "relativePath": "contenthub/dochub/mapmyindia-maps-vectorSDK-android" } ], "sourceHref": "/sources/public-mapmyindia-maps-vectorsdk-android", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-maps-vectorSDK-iOS - Identity: `source-lifecycle:public-mapmyindia-maps-vectorsdk-ios` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-maps-vectorsdk-ios - State model: stateless ```json { "sourceId": "public-mapmyindia-maps-vectorsdk-ios", "repository": "mapmyindia-maps-vectorSDK-iOS", "publicUrl": "https://github.com/mappls-api/mapmyindia-maps-vectorSDK-iOS", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2023-11-30T12:45:22Z", "snapshotFingerprint": "f00fa5fbfcc4732a0506756860bb5118a8b53e2066b3be6e832d46f796d535f5", "ageDays": 991, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "REST", "React Native", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 9, "localCandidates": [ { "id": "local-contenthub-bm21-mapmyindia-maps-vectorsdk-ios", "name": "mapmyindia-maps-vectorSDK-iOS", "relativePath": "contenthub/bm21/mapmyindia-maps-vectorSDK-iOS" }, { "id": "local-contenthub-dochub-mapmyindia-maps-vectorsdk-ios", "name": "mapmyindia-maps-vectorSDK-iOS", "relativePath": "contenthub/dochub/mapmyindia-maps-vectorSDK-iOS" } ], "sourceHref": "/sources/public-mapmyindia-maps-vectorsdk-ios", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-mgis-apis - Identity: `source-lifecycle:public-mapmyindia-mgis-apis` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-mgis-apis - State model: stateful ```json { "sourceId": "public-mapmyindia-mgis-apis", "repository": "mapmyindia-mgis-apis", "publicUrl": "https://github.com/mappls-api/mapmyindia-mgis-apis", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2024-08-30T06:57:27Z", "snapshotFingerprint": "a7e5c3d23ad304b91ca43ad58e02234adeee69798ed11dfc1533ff4d3a647386", "ageDays": 717, "freshness": "aging", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateful", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "ai-vision", "capture-feedback" ], "platforms": [ "Web", "Server/Compiler", "AI/MCP" ], "documentCount": 1, "endpointCount": 30, "localCandidates": [], "sourceHref": "/sources/public-mapmyindia-mgis-apis", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-mgis-libraries - Identity: `source-lifecycle:public-mapmyindia-mgis-libraries` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-mgis-libraries - State model: stateful ```json { "sourceId": "public-mapmyindia-mgis-libraries", "repository": "mapmyindia-mgis-libraries", "publicUrl": "https://github.com/mappls-api/mapmyindia-mgis-libraries", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2024-08-07T09:10:40Z", "snapshotFingerprint": "fe36e4b0fd610708ed6e903c9c6d88ce5374f6f10a2735a5226716874cd3dfb4", "ageDays": 740, "freshness": "historical", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateful", "productAreas": [ "maps", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Web", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 17, "localCandidates": [], "sourceHref": "/sources/public-mapmyindia-mgis-libraries", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-nearby-covid-places - Identity: `source-lifecycle:public-mapmyindia-nearby-covid-places` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-nearby-covid-places - State model: stateless ```json { "sourceId": "public-mapmyindia-nearby-covid-places", "repository": "mapmyindia-nearby-covid-places", "publicUrl": "https://github.com/mappls-api/mapmyindia-nearby-covid-places", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2023-11-30T12:47:13Z", "snapshotFingerprint": "a29cd70e93a68094a8f3e0a11537dbf66076ef0eaee8e0e0fe92856d0f947ad9", "ageDays": 991, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Web", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 30, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-nearby-covid-places", "name": "mapmyindia-nearby-covid-places", "relativePath": "contenthub/dochub/mapmyindia-nearby-covid-places" } ], "sourceHref": "/sources/public-mapmyindia-nearby-covid-places", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-places-n-directions-web-sdk - Identity: `source-lifecycle:public-mapmyindia-places-n-directions-web-sdk` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-places-n-directions-web-sdk - State model: stateless ```json { "sourceId": "public-mapmyindia-places-n-directions-web-sdk", "repository": "mapmyindia-places-n-directions-web-sdk", "publicUrl": "https://github.com/mappls-api/mapmyindia-places-n-directions-web-sdk", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2023-11-30T12:50:12Z", "snapshotFingerprint": "e0e524cc3bae1b1f7ce99e2b2047d548c03a23525fcd5eb900a339dbbfe71836", "ageDays": 991, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "other" ], "platforms": [ "Web" ], "documentCount": 1, "endpointCount": 0, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-places-n-directions-web-sdk", "name": "mapmyindia-places-n-directions-web-sdk", "relativePath": "contenthub/dochub/mapmyindia-places-n-directions-web-sdk" } ], "sourceHref": "/sources/public-mapmyindia-places-n-directions-web-sdk", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-pureJS-sample-webSDK-REST - Identity: `source-lifecycle:public-mapmyindia-purejs-sample-websdk-rest` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-purejs-sample-websdk-rest - State model: stateless ```json { "sourceId": "public-mapmyindia-purejs-sample-websdk-rest", "repository": "mapmyindia-pureJS-sample-webSDK-REST", "publicUrl": "https://github.com/mappls-api/mapmyindia-pureJS-sample-webSDK-REST", "classification": "sample", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:sample" ], "reason": "The repository name or public description explicitly identifies learning or sample material." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2020-04-21T14:25:50Z", "snapshotFingerprint": "7648d47274423632e0d612ff15355d0dd80c6de1227a6605682f1874d104fdde", "ageDays": 2309, "freshness": "historical", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for learning and integration shape only. Revalidate every dependency, credential boundary, error path, and production control against current product documentation.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "identity-platform" ], "platforms": [ "Web", "REST", "Server/Compiler" ], "documentCount": 1, "endpointCount": 13, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-purejs-sample-websdk-rest", "name": "mapmyindia-pureJS-sample-webSDK-REST", "relativePath": "contenthub/dochub/mapmyindia-pureJS-sample-webSDK-REST" } ], "sourceHref": "/sources/public-mapmyindia-purejs-sample-websdk-rest", "migrationHref": null } ``` ## source-lifecycle · mapmyindia-rest-api - Identity: `source-lifecycle:public-mapmyindia-rest-api` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-rest-api - State model: stateless ```json { "sourceId": "public-mapmyindia-rest-api", "repository": "mapmyindia-rest-api", "publicUrl": "https://github.com/mappls-api/mapmyindia-rest-api", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2023-11-30T12:48:30Z", "snapshotFingerprint": "1bb4ee5e23a562b4d6f4e71cd8a4f4f503726a4bd90d542fb34e93a70be2f29b", "ageDays": 991, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback" ], "platforms": [ "Web", "REST", "Server/Compiler" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-rest-api", "name": "mapmyindia-rest-api", "relativePath": "contenthub/dochub/mapmyindia-rest-api" } ], "sourceHref": "/sources/public-mapmyindia-rest-api", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-restapi-cordova-ionic-beta - Identity: `source-lifecycle:public-mapmyindia-restapi-cordova-ionic-beta` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-restapi-cordova-ionic-beta - State model: stateless ```json { "sourceId": "public-mapmyindia-restapi-cordova-ionic-beta", "repository": "mapmyindia-restapi-cordova-ionic-beta", "publicUrl": "https://github.com/mappls-api/mapmyindia-restapi-cordova-ionic-beta", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2020-09-30T06:20:27Z", "snapshotFingerprint": "dbd1303d017e4f7332a7799990a5da60b6fd4bba6271c3323c858e732ff4d4ff", "ageDays": 2147, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "search-places", "routes-navigation", "widgets-deep-links" ], "platforms": [ "Android", "iOS", "Web", "REST", "Cordova/Ionic", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-restapi-cordova-ionic-beta", "name": "mapmyindia-restapi-cordova-ionic-beta", "relativePath": "contenthub/dochub/mapmyindia-restapi-cordova-ionic-beta" } ], "sourceHref": "/sources/public-mapmyindia-restapi-cordova-ionic-beta", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-restapi-react-native-beta - Identity: `source-lifecycle:public-mapmyindia-restapi-react-native-beta` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-restapi-react-native-beta - State model: stateless ```json { "sourceId": "public-mapmyindia-restapi-react-native-beta", "repository": "mapmyindia-restapi-react-native-beta", "publicUrl": "https://github.com/mappls-api/mapmyindia-restapi-react-native-beta", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": { "repository": "mappls-react-native-sdk", "url": "https://github.com/mappls-api/mappls-react-native-sdk", "authority": "source-declared" }, "matchQuality": "exact", "pushedAt": "2021-04-15T12:32:27Z", "snapshotFingerprint": "88351f5dd3543307cc34f7f99746a315b6c2cadb2984b17ae2207e7c295cf020", "ageDays": 1950, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "React Native", "Server/Compiler" ], "documentCount": 1, "endpointCount": 17, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-restapi-react-native-beta", "name": "mapmyindia-restapi-react-native-beta", "relativePath": "contenthub/dochub/mapmyindia-restapi-react-native-beta" } ], "sourceHref": "/sources/public-mapmyindia-restapi-react-native-beta", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-vector-maps-js-web-SDK - Identity: `source-lifecycle:public-mapmyindia-vector-maps-js-web-sdk` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-vector-maps-js-web-sdk - State model: stateless ```json { "sourceId": "public-mapmyindia-vector-maps-js-web-sdk", "repository": "mapmyindia-vector-maps-js-web-SDK", "publicUrl": "https://github.com/mappls-api/mapmyindia-vector-maps-js-web-SDK", "classification": "deprecated", "lifecycleEvidence": { "authority": "github-topic", "signals": [ "topic:deprecated", "topic:not-in-use", "topic:obsolete" ], "reason": "The repository carries an explicit deprecated, obsolete, or not-in-use GitHub topic." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2023-11-30T12:43:38Z", "snapshotFingerprint": "717e4087b4ad49db7f6cefc0f98d65108c00dbc1e70cc692d750e190c9831e76", "ageDays": 991, "freshness": "historical", "releaseRisk": "retire", "compatibilityAction": "Do not start a new production build from this evidence. Contain existing use, identify a supported target, migrate with rollback, and retire the dependency.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links" ], "platforms": [ "Web", "REST", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 56, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-vector-maps-js-web-sdk", "name": "mapmyindia-vector-maps-js-web-SDK", "relativePath": "contenthub/dochub/mapmyindia-vector-maps-js-web-SDK" } ], "sourceHref": "/sources/public-mapmyindia-vector-maps-js-web-sdk", "migrationHref": "/migrate" } ``` ## source-lifecycle · mapmyindia-workmate-apis - Identity: `source-lifecycle:public-mapmyindia-workmate-apis` - Canonical: https://developer.mappls.com/sources/public-mapmyindia-workmate-apis - State model: stateful ```json { "sourceId": "public-mapmyindia-workmate-apis", "repository": "mapmyindia-workmate-apis", "publicUrl": "https://github.com/mappls-api/mapmyindia-workmate-apis", "classification": "legacy", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:mapmyindia-prefix" ], "reason": "The repository retains the pre-Mappls MapmyIndia identity and requires an explicit compatibility or migration decision." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2022-02-11T10:02:28Z", "snapshotFingerprint": "40b2c16f0dd342f173711021f0e1708ecf53882d1d5eb8654541ce5495f0043a", "ageDays": 1648, "freshness": "historical", "releaseRisk": "migration-required", "compatibilityAction": "Plan a migration behind an adapter seam, preserve rollback, and prove contract, identity, state, observability, and performance parity before cutover.", "stateModel": "stateful", "productAreas": [ "maps", "workforce", "identity-platform" ], "platforms": [ "Unspecified" ], "documentCount": 1, "endpointCount": 3, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-workmate-apis", "name": "mapmyindia-workmate-apis", "relativePath": "contenthub/dochub/mapmyindia-workmate-apis" } ], "sourceHref": "/sources/public-mapmyindia-workmate-apis", "migrationHref": "/migrate" } ``` ## source-lifecycle · mappls-ai-apis - Identity: `source-lifecycle:public-mappls-ai-apis` - Canonical: https://developer.mappls.com/sources/public-mappls-ai-apis - State model: stateless ```json { "sourceId": "public-mappls-ai-apis", "repository": "mappls-ai-apis", "publicUrl": "https://github.com/mappls-api/mappls-ai-apis", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2023-04-12T04:43:04Z", "snapshotFingerprint": "80cfbc9b9c7ce4b4590d05e13717ec579353cf16c1b9315739be1f2b4caacc4e", "ageDays": 1223, "freshness": "historical", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "workforce", "gis-analytics", "ai-vision", "capture-feedback", "identity-platform" ], "platforms": [ "Web", "REST", "AI/MCP" ], "documentCount": 1, "endpointCount": 16, "localCandidates": [], "sourceHref": "/sources/public-mappls-ai-apis", "migrationHref": null } ``` ## source-lifecycle · mappls-android-compose-demo - Identity: `source-lifecycle:public-mappls-android-compose-demo` - Canonical: https://developer.mappls.com/sources/public-mappls-android-compose-demo - State model: stateless ```json { "sourceId": "public-mappls-android-compose-demo", "repository": "mappls-android-compose-demo", "publicUrl": "https://github.com/mappls-api/mappls-android-compose-demo", "classification": "sample", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:sample" ], "reason": "The repository name or public description explicitly identifies learning or sample material." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-07-31T11:15:49Z", "snapshotFingerprint": "37562302b0fcd2d2115c705f2ea3f943594b266599b2e42118ce6e0a091b16a8", "ageDays": 382, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for learning and integration shape only. Revalidate every dependency, credential boundary, error path, and production control against current product documentation.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android", "Web", "REST", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [], "sourceHref": "/sources/public-mappls-android-compose-demo", "migrationHref": null } ``` ## source-lifecycle · mappls-android-sdk - Identity: `source-lifecycle:public-mappls-android-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-android-sdk - State model: stateless ```json { "sourceId": "public-mappls-android-sdk", "repository": "mappls-android-sdk", "publicUrl": "https://github.com/mappls-api/mappls-android-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-07-08T05:06:14Z", "snapshotFingerprint": "2ccc51932d1b333b3561336cb9b272fe5bf2d236a78335d4f62bb1c497196db0", "ageDays": 40, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "REST", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-android-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-annotation-extension-ios-distribution - Identity: `source-lifecycle:public-mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-annotation-extension-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-annotation-extension-ios-distribution", "repository": "mappls-annotation-extension-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-11T07:32:21Z", "snapshotFingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54", "ageDays": 432, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-annotation-extension-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-annotation-extension-ios-distribution-base - Identity: `source-lifecycle:public-mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-annotation-extension-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-annotation-extension-ios-distribution-base", "repository": "mappls-annotation-extension-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-annotation-extension-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T06:30:06Z", "snapshotFingerprint": "dcb2a91e8716dd659728ce453da2e5bddd840216b009c89fa70c130e2215bb54", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-annotation-extension-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-api-core-ios-distribution - Identity: `source-lifecycle:public-mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-api-core-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-api-core-ios-distribution", "repository": "mappls-api-core-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-api-core-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-06-30T05:11:46Z", "snapshotFingerprint": "32bdcb00147ba07812b6903e85b96ba2a6bc9849a32efcf83c226b729d103734", "ageDays": 48, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-api-core-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-api-kit-ios-distribution - Identity: `source-lifecycle:public-mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-api-kit-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-api-kit-ios-distribution", "repository": "mappls-api-kit-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T09:04:09Z", "snapshotFingerprint": "8067ef763bd59da11448365f90c9f3f4acd4ea3ed6d8bc1add09fb961da129df", "ageDays": 13, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "gis-analytics", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "Xamarin/.NET" ], "documentCount": 1, "endpointCount": 36, "localCandidates": [], "sourceHref": "/sources/public-mappls-api-kit-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-api-kit-ios-distribution-base - Identity: `source-lifecycle:public-mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-api-kit-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-api-kit-ios-distribution-base", "repository": "mappls-api-kit-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-api-kit-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T09:05:02Z", "snapshotFingerprint": "fef99dda42ad1a82220474a21b5cda6a6556da2fcf0ec4571ef57c0826f5f927", "ageDays": 13, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "workforce", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "Xamarin/.NET" ], "documentCount": 1, "endpointCount": 35, "localCandidates": [], "sourceHref": "/sources/public-mappls-api-kit-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-app-widgets - Identity: `source-lifecycle:public-mappls-app-widgets` - Canonical: https://developer.mappls.com/sources/public-mappls-app-widgets - State model: stateless ```json { "sourceId": "public-mappls-app-widgets", "repository": "mappls-app-widgets", "publicUrl": "https://github.com/mappls-api/mappls-app-widgets", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-06-17T10:13:18Z", "snapshotFingerprint": "1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177", "ageDays": 61, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "search-places", "widgets-deep-links" ], "platforms": [ "Unspecified" ], "documentCount": 1, "endpointCount": 0, "localCandidates": [], "sourceHref": "/sources/public-mappls-app-widgets", "migrationHref": null } ``` ## source-lifecycle · mappls-camera-ios-distribution - Identity: `source-lifecycle:public-mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-camera-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-camera-ios-distribution", "repository": "mappls-camera-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-camera-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T09:06:25Z", "snapshotFingerprint": "5188dcc0949df5e35f014373f828976476b74aecfe3997a42545d25531d89a50", "ageDays": 13, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Linux/Embedded" ], "documentCount": 1, "endpointCount": 23, "localCandidates": [], "sourceHref": "/sources/public-mappls-camera-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-camera-sdk-android - Identity: `source-lifecycle:public-mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/sources/public-mappls-camera-sdk-android - State model: stateless ```json { "sourceId": "public-mappls-camera-sdk-android", "repository": "mappls-camera-sdk-android", "publicUrl": "https://github.com/mappls-api/mappls-camera-sdk-android", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-06-08T05:20:16Z", "snapshotFingerprint": "7840f9c22c6b19e5eafd7e973150fbce00060a09f01e812af92ecf0982133306", "ageDays": 70, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "offline-automotive", "capture-feedback" ], "platforms": [ "Android", "iOS", "Linux/Embedded", "Widgets/Deep links", "Server/Compiler", "AI/MCP" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-camera-sdk-android", "migrationHref": null } ``` ## source-lifecycle · mappls-camera-sdk-ios - Identity: `source-lifecycle:public-mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/sources/public-mappls-camera-sdk-ios - State model: stateless ```json { "sourceId": "public-mappls-camera-sdk-ios", "repository": "mappls-camera-sdk-ios", "publicUrl": "https://github.com/mappls-api/mappls-camera-sdk-ios", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T09:07:18Z", "snapshotFingerprint": "be2f3bb17147aef1890e71e5e2cdeb7d0cef93e7aa06e4757b9afb81a508b302", "ageDays": 13, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Linux/Embedded" ], "documentCount": 1, "endpointCount": 23, "localCandidates": [], "sourceHref": "/sources/public-mappls-camera-sdk-ios", "migrationHref": null } ``` ## source-lifecycle · mappls-direction-ui-ios-distribution - Identity: `source-lifecycle:public-mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-direction-ui-ios-distribution - State model: hybrid ```json { "sourceId": "public-mappls-direction-ui-ios-distribution", "repository": "mappls-direction-ui-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-09T10:37:21Z", "snapshotFingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878", "ageDays": 434, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "REST", "Xamarin/.NET", "Automotive" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-direction-ui-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-direction-ui-ios-distribution-base - Identity: `source-lifecycle:public-mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-direction-ui-ios-distribution-base - State model: hybrid ```json { "sourceId": "public-mappls-direction-ui-ios-distribution-base", "repository": "mappls-direction-ui-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-direction-ui-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-14T10:28:33Z", "snapshotFingerprint": "c8594d45a1d168c0c9d4df606cecdb8070ed315633ef7ca442ea9cc70abbb878", "ageDays": 368, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "REST", "Xamarin/.NET", "Automotive" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-direction-ui-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-drivingrange-plugin-ios-distribution - Identity: `source-lifecycle:public-mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-drivingrange-plugin-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-drivingrange-plugin-ios-distribution", "repository": "mappls-drivingrange-plugin-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-10T12:01:43Z", "snapshotFingerprint": "ab30151929b38a436eb0bfee80dd90a62fb72c2859e7658b168faf15aa648ab3", "ageDays": 433, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-drivingrange-plugin-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-drivingrange-plugin-ios-distribution-base - Identity: `source-lifecycle:public-mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-drivingrange-plugin-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-drivingrange-plugin-ios-distribution-base", "repository": "mappls-drivingrange-plugin-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-drivingrange-plugin-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T10:35:11Z", "snapshotFingerprint": "d45431cb565d97f838db4aef37cc61cb9f7faf48b622f8803196e255de2b0df9", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-drivingrange-plugin-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-feedback-kit-ios-distribution - Identity: `source-lifecycle:public-mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-feedback-kit-ios-distribution - State model: hybrid ```json { "sourceId": "public-mappls-feedback-kit-ios-distribution", "repository": "mappls-feedback-kit-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-10T09:43:26Z", "snapshotFingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db", "ageDays": 433, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Server/Compiler" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-feedback-kit-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-feedback-kit-ios-distribution-base - Identity: `source-lifecycle:public-mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-feedback-kit-ios-distribution-base - State model: hybrid ```json { "sourceId": "public-mappls-feedback-kit-ios-distribution-base", "repository": "mappls-feedback-kit-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-feedback-kit-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T07:56:22Z", "snapshotFingerprint": "505b2357a59292ab056a8375f9c37d4b0ba32aa675cdb2eb7b6fb49d5fe4e7db", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "search-places", "tracking-telematics", "widgets-deep-links", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Server/Compiler" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-feedback-kit-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-feedback-uikit-ios-distribution - Identity: `source-lifecycle:public-mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-feedback-uikit-ios-distribution - State model: hybrid ```json { "sourceId": "public-mappls-feedback-uikit-ios-distribution", "repository": "mappls-feedback-uikit-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-10T10:19:46Z", "snapshotFingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688", "ageDays": 433, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Server/Compiler" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-feedback-uikit-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-feedback-uikit-ios-distribution-base - Identity: `source-lifecycle:public-mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-feedback-uikit-ios-distribution-base - State model: hybrid ```json { "sourceId": "public-mappls-feedback-uikit-ios-distribution-base", "repository": "mappls-feedback-uikit-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-feedback-uikit-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T07:40:43Z", "snapshotFingerprint": "ce9bd0f45c46db6da97d67b374ef9a4ccb419361584e23bed1cafb3e5b40e688", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Server/Compiler" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-feedback-uikit-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-flutter-sdk - Identity: `source-lifecycle:public-mappls-flutter-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-flutter-sdk - State model: stateless ```json { "sourceId": "public-mappls-flutter-sdk", "repository": "mappls-flutter-sdk", "publicUrl": "https://github.com/mappls-api/mappls-flutter-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T03:24:01Z", "snapshotFingerprint": "512ead785542761a9bff4f580952f041a1b23c6e7021d7aae976c89843ab3c9d", "ageDays": 13, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "Flutter", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-flutter-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-geoanalytics-ios-distribution - Identity: `source-lifecycle:public-mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-geoanalytics-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-geoanalytics-ios-distribution", "repository": "mappls-geoanalytics-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-11T12:19:50Z", "snapshotFingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a", "ageDays": 432, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 24, "localCandidates": [], "sourceHref": "/sources/public-mappls-geoanalytics-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-geoanalytics-ios-distribution-base - Identity: `source-lifecycle:public-mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-geoanalytics-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-geoanalytics-ios-distribution-base", "repository": "mappls-geoanalytics-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-geoanalytics-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T06:18:16Z", "snapshotFingerprint": "b68a2b4329dc3c4db762969be70fb55c82b1525fff4effb3e950b2eab7b97d4a", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 24, "localCandidates": [], "sourceHref": "/sources/public-mappls-geoanalytics-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-geofence-ui-ios-distribution - Identity: `source-lifecycle:public-mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-geofence-ui-ios-distribution - State model: hybrid ```json { "sourceId": "public-mappls-geofence-ui-ios-distribution", "repository": "mappls-geofence-ui-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-10T10:55:54Z", "snapshotFingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc", "ageDays": 433, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-geofence-ui-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-geofence-ui-ios-distribution-base - Identity: `source-lifecycle:public-mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-geofence-ui-ios-distribution-base - State model: hybrid ```json { "sourceId": "public-mappls-geofence-ui-ios-distribution-base", "repository": "mappls-geofence-ui-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-geofence-ui-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T07:26:09Z", "snapshotFingerprint": "dc9ee3cb13b907b481c658106219abdf93f45a57898aeeafdeafd116d74139fc", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-geofence-ui-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-insight-sdk - Identity: `source-lifecycle:public-mappls-insight-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-insight-sdk - State model: stateless ```json { "sourceId": "public-mappls-insight-sdk", "repository": "mappls-insight-sdk", "publicUrl": "https://github.com/mappls-api/mappls-insight-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2024-05-03T10:20:13Z", "snapshotFingerprint": "0ae2cda7c0a988f9a2be664ea00f8b1f448657b8e0a0b7fbbb2ded7a10586898", "ageDays": 836, "freshness": "historical", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "gis-analytics", "offline-automotive", "capture-feedback", "identity-platform" ], "platforms": [ "Web", "Linux/Embedded", "Server/Compiler" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [], "sourceHref": "/sources/public-mappls-insight-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-intouch-android-sdk - Identity: `source-lifecycle:public-mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-intouch-android-sdk - State model: stateful ```json { "sourceId": "public-mappls-intouch-android-sdk", "repository": "mappls-intouch-android-sdk", "publicUrl": "https://github.com/mappls-api/mappls-intouch-android-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "normalized", "pushedAt": "2026-05-18T07:43:00Z", "snapshotFingerprint": "47e2aea8b4e7549e12b44dfe04d65618612ca40f4b714e7d644986ffb7d35fe4", "ageDays": 91, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-android-sdk", "name": "mapmyindia-intouch-android-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-android-sdk" } ], "sourceHref": "/sources/public-mappls-intouch-android-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-intouch-ios-distribution - Identity: `source-lifecycle:public-mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-intouch-ios-distribution - State model: stateful ```json { "sourceId": "public-mappls-intouch-ios-distribution", "repository": "mappls-intouch-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "normalized", "pushedAt": "2025-05-20T06:43:25Z", "snapshotFingerprint": "9b4522931dc0fa13f91cd719b94a585561e4051a3de6c22150de560c5e31068c", "ageDays": 454, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateful", "productAreas": [ "tracking-telematics" ], "platforms": [ "iOS" ], "documentCount": 0, "endpointCount": 0, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-ios-sdk", "name": "mapmyindia-intouch-ios-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-ios-sdk" } ], "sourceHref": "/sources/public-mappls-intouch-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-intouch-ios-distribution-base - Identity: `source-lifecycle:public-mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-intouch-ios-distribution-base - State model: stateful ```json { "sourceId": "public-mappls-intouch-ios-distribution-base", "repository": "mappls-intouch-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-intouch-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T11:38:55Z", "snapshotFingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateful", "productAreas": [ "tracking-telematics" ], "platforms": [ "iOS" ], "documentCount": 0, "endpointCount": 0, "localCandidates": [], "sourceHref": "/sources/public-mappls-intouch-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-intouch-ios-sdk - Identity: `source-lifecycle:public-mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-intouch-ios-sdk - State model: stateful ```json { "sourceId": "public-mappls-intouch-ios-sdk", "repository": "mappls-intouch-ios-sdk", "publicUrl": "https://github.com/mappls-api/mappls-intouch-ios-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "normalized", "pushedAt": "2026-07-23T13:28:47Z", "snapshotFingerprint": "d11c093839d4dfcabfdba4e9d38a22d9386c97f8bd623d57575443da2173c0c0", "ageDays": 25, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "workforce", "gis-analytics", "capture-feedback" ], "platforms": [ "iOS" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-ios-sdk", "name": "mapmyindia-intouch-ios-sdk", "relativePath": "contenthub/dochub/mapmyindia-intouch-ios-sdk" } ], "sourceHref": "/sources/public-mappls-intouch-ios-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-intouch-rest-apis - Identity: `source-lifecycle:public-mappls-intouch-rest-apis` - Canonical: https://developer.mappls.com/sources/public-mappls-intouch-rest-apis - State model: stateful ```json { "sourceId": "public-mappls-intouch-rest-apis", "repository": "mappls-intouch-rest-apis", "publicUrl": "https://github.com/mappls-api/mappls-intouch-rest-apis", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "normalized", "pushedAt": "2026-07-30T05:37:38Z", "snapshotFingerprint": "06df37d758e9eed1e65f69df10a6cf82963da86e6d1417f56a2ffa7c7d8408c4", "ageDays": 18, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateful", "productAreas": [ "routes-navigation", "tracking-telematics", "capture-feedback", "identity-platform" ], "platforms": [ "REST" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-intouch-rest-apis", "name": "mapmyindia-intouch-rest-apis", "relativePath": "contenthub/dochub/mapmyindia-intouch-rest-apis" } ], "sourceHref": "/sources/public-mappls-intouch-rest-apis", "migrationHref": null } ``` ## source-lifecycle · mappls-ios-sdk - Identity: `source-lifecycle:public-mappls-ios-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-ios-sdk - State model: stateless ```json { "sourceId": "public-mappls-ios-sdk", "repository": "mappls-ios-sdk", "publicUrl": "https://github.com/mappls-api/mappls-ios-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T08:39:20Z", "snapshotFingerprint": "3e3adfeaccf78bbea89a8cbbb214fc84e128b56f930abbd401fd2d20d8287fce", "ageDays": 13, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "REST", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 22, "localCandidates": [], "sourceHref": "/sources/public-mappls-ios-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-lms-ios-distribution - Identity: `source-lifecycle:public-mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-lms-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-lms-ios-distribution", "repository": "mappls-lms-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-05T12:18:11Z", "snapshotFingerprint": "a9995a27ea65a15fcd371bcb1c79667fa28d24d2410a07d8be582ffead4a7df9", "ageDays": 12, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "other" ], "platforms": [ "iOS" ], "documentCount": 1, "endpointCount": 2, "localCandidates": [], "sourceHref": "/sources/public-mappls-lms-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-lms-ios-distribution-base - Identity: `source-lifecycle:public-mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-lms-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-lms-ios-distribution-base", "repository": "mappls-lms-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-lms-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-05T12:16:54Z", "snapshotFingerprint": "c5f9894dd4d6f5a5c44eba2456a6883e3bb9a3d7f4d7ce3b7fb75223a0742bb9", "ageDays": 12, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "other" ], "platforms": [ "iOS" ], "documentCount": 1, "endpointCount": 1, "localCandidates": [], "sourceHref": "/sources/public-mappls-lms-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-location-capture-android-sdk - Identity: `source-lifecycle:public-mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-location-capture-android-sdk - State model: hybrid ```json { "sourceId": "public-mappls-location-capture-android-sdk", "repository": "mappls-location-capture-android-sdk", "publicUrl": "https://github.com/mappls-api/mappls-location-capture-android-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-12-17T11:23:24Z", "snapshotFingerprint": "b698bbb4e4a361b24ec4a5d289e5c8a9db84c0f2549dccfb0eb19fdcba94e7c7", "ageDays": 243, "freshness": "aging", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "hybrid", "productAreas": [ "search-places", "tracking-telematics", "workforce", "widgets-deep-links", "capture-feedback" ], "platforms": [ "Android", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 18, "localCandidates": [], "sourceHref": "/sources/public-mappls-location-capture-android-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-location-capture-ios-sdk - Identity: `source-lifecycle:public-mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-location-capture-ios-sdk - State model: hybrid ```json { "sourceId": "public-mappls-location-capture-ios-sdk", "repository": "mappls-location-capture-ios-sdk", "publicUrl": "https://github.com/mappls-api/mappls-location-capture-ios-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-12-19T11:57:47Z", "snapshotFingerprint": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", "ageDays": 241, "freshness": "aging", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "hybrid", "productAreas": [ "capture-feedback" ], "platforms": [ "iOS" ], "documentCount": 0, "endpointCount": 0, "localCandidates": [], "sourceHref": "/sources/public-mappls-location-capture-ios-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-location-capture-sdk-ios-distribution - Identity: `source-lifecycle:public-mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-location-capture-sdk-ios-distribution - State model: hybrid ```json { "sourceId": "public-mappls-location-capture-sdk-ios-distribution", "repository": "mappls-location-capture-sdk-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-location-capture-sdk-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-02-05T13:00:29Z", "snapshotFingerprint": "aa62d5d6bb832bc41af55ce8c0fce057ae4f71075e22d12d55bc05873dcfd2e9", "ageDays": 193, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "platforms": [ "iOS", "Server/Compiler" ], "documentCount": 1, "endpointCount": 1, "localCandidates": [], "sourceHref": "/sources/public-mappls-location-capture-sdk-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-map-ios-distribution - Identity: `source-lifecycle:public-mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-map-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-map-ios-distribution", "repository": "mappls-map-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-map-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-07-02T12:03:35Z", "snapshotFingerprint": "fd3d74d52bd9f7cd6db39df1c970edee1bda9701b72d8753ea9c2ac24eeffc4b", "ageDays": 46, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "REST", "Xamarin/.NET", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-map-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-map-ios-distribution-base - Identity: `source-lifecycle:public-mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-map-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-map-ios-distribution-base", "repository": "mappls-map-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-map-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-07-02T11:23:55Z", "snapshotFingerprint": "c44a5c147bbf3ed89e8549747dd2dc1a702d189f3c81fff83238110c9bbf7f6b", "ageDays": 46, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "REST", "Xamarin/.NET", "Server/Compiler" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-map-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-map-move-ios-distribution-base - Identity: `source-lifecycle:public-mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-map-move-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-map-move-ios-distribution-base", "repository": "mappls-map-move-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-map-move-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-07-01T08:08:30Z", "snapshotFingerprint": "df6752e592f6282a73260c2ee3a78f512f8b8392c8b05de2609ab945ddf04a8e", "ageDays": 47, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "REST", "Xamarin/.NET", "Server/Compiler" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-map-move-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-nearby-finder-ios-distribution - Identity: `source-lifecycle:public-mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-nearby-finder-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-nearby-finder-ios-distribution", "repository": "mappls-nearby-finder-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-02-24T12:19:14Z", "snapshotFingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc", "ageDays": 174, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "REST", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [], "sourceHref": "/sources/public-mappls-nearby-finder-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-nearby-finder-ios-distribution-base - Identity: `source-lifecycle:public-mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-nearby-finder-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-nearby-finder-ios-distribution-base", "repository": "mappls-nearby-finder-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-nearby-finder-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-02-24T12:25:23Z", "snapshotFingerprint": "c98e46c291897e99300024c3cc4408066e10c86c34a8b106f20fa4e1848a5bcc", "ageDays": 174, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "REST", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 20, "localCandidates": [], "sourceHref": "/sources/public-mappls-nearby-finder-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-nearby-ui-ios-distribution - Identity: `source-lifecycle:public-mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-nearby-ui-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-nearby-ui-ios-distribution", "repository": "mappls-nearby-ui-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-09T09:20:10Z", "snapshotFingerprint": "139be695050e0183761cf10540fec3eab9ad60caf51c395b4ad2f52f1c28ea1f", "ageDays": 434, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 24, "localCandidates": [], "sourceHref": "/sources/public-mappls-nearby-ui-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-nearby-ui-ios-distribution-base - Identity: `source-lifecycle:public-mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-nearby-ui-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-nearby-ui-ios-distribution-base", "repository": "mappls-nearby-ui-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-nearby-ui-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-14T10:23:13Z", "snapshotFingerprint": "97c2b14769200eece962afc2d24f910b81ddd6cd7d3cf109ddba38f6c8132347", "ageDays": 368, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 25, "localCandidates": [], "sourceHref": "/sources/public-mappls-nearby-ui-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-raster-catalogue-ios-distribution - Identity: `source-lifecycle:public-mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-raster-catalogue-ios-distribution - State model: stateless ```json { "sourceId": "public-mappls-raster-catalogue-ios-distribution", "repository": "mappls-raster-catalogue-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-06-11T09:32:44Z", "snapshotFingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a", "ageDays": 432, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 23, "localCandidates": [], "sourceHref": "/sources/public-mappls-raster-catalogue-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-raster-catalogue-ios-distribution-base - Identity: `source-lifecycle:public-mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-raster-catalogue-ios-distribution-base - State model: stateless ```json { "sourceId": "public-mappls-raster-catalogue-ios-distribution-base", "repository": "mappls-raster-catalogue-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-raster-catalogue-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2025-08-12T09:01:22Z", "snapshotFingerprint": "4bc01e5166d2793f3a0ca310a860f2502c0ccef3a8e5dd6f1d4a78b6e43ac21a", "ageDays": 370, "freshness": "aging", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "stateless", "productAreas": [ "maps", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Web", "Xamarin/.NET", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 23, "localCandidates": [], "sourceHref": "/sources/public-mappls-raster-catalogue-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-react-native-intouch-sdk - Identity: `source-lifecycle:public-mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-react-native-intouch-sdk - State model: stateful ```json { "sourceId": "public-mappls-react-native-intouch-sdk", "repository": "mappls-react-native-intouch-sdk", "publicUrl": "https://github.com/mappls-api/mappls-react-native-intouch-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-05-19T12:12:31Z", "snapshotFingerprint": "cb0703543c8025cdd17cc5357aff8b04ff3cdb0250d648b5100a4a5fdc2dce69", "ageDays": 90, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "workforce", "capture-feedback" ], "platforms": [ "Android", "iOS", "React Native" ], "documentCount": 1, "endpointCount": 19, "localCandidates": [], "sourceHref": "/sources/public-mappls-react-native-intouch-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-react-native-sdk - Identity: `source-lifecycle:public-mappls-react-native-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-react-native-sdk - State model: stateless ```json { "sourceId": "public-mappls-react-native-sdk", "repository": "mappls-react-native-sdk", "publicUrl": "https://github.com/mappls-api/mappls-react-native-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-04T08:56:55Z", "snapshotFingerprint": "2bf827b9457541a5e16249427f880c282fd15770f7721330bb1dd788684f35d4", "ageDays": 13, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "iOS", "REST", "React Native", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 21, "localCandidates": [], "sourceHref": "/sources/public-mappls-react-native-sdk", "migrationHref": null } ``` ## source-lifecycle · mappls-rest-apis - Identity: `source-lifecycle:public-mappls-rest-apis` - Canonical: https://developer.mappls.com/sources/public-mappls-rest-apis - State model: stateless ```json { "sourceId": "public-mappls-rest-apis", "repository": "mappls-rest-apis", "publicUrl": "https://github.com/mappls-api/mappls-rest-apis", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "normalized", "pushedAt": "2026-06-03T13:45:42Z", "snapshotFingerprint": "a27fe1435b9cd778f7d5352dc2152e74727c72b640a26515e83969d0f4e455b5", "ageDays": 75, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "capture-feedback", "identity-platform" ], "platforms": [ "Web", "REST", "Server/Compiler" ], "documentCount": 1, "endpointCount": 38, "localCandidates": [ { "id": "local-contenthub-dochub-mapmyindia-rest-api", "name": "mapmyindia-rest-api", "relativePath": "contenthub/dochub/mapmyindia-rest-api" } ], "sourceHref": "/sources/public-mappls-rest-apis", "migrationHref": null } ``` ## source-lifecycle · mappls-ui-widget-ios-distribution - Identity: `source-lifecycle:public-mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/sources/public-mappls-ui-widget-ios-distribution - State model: hybrid ```json { "sourceId": "public-mappls-ui-widget-ios-distribution", "repository": "mappls-ui-widget-ios-distribution", "publicUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-04-01T12:41:15Z", "snapshotFingerprint": "fa23204b72658dbd8f725bcd1a00645810cb3400789bd2d1f1bd464353953349", "ageDays": 138, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 29, "localCandidates": [], "sourceHref": "/sources/public-mappls-ui-widget-ios-distribution", "migrationHref": null } ``` ## source-lifecycle · mappls-ui-widget-ios-distribution-base - Identity: `source-lifecycle:public-mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/sources/public-mappls-ui-widget-ios-distribution-base - State model: hybrid ```json { "sourceId": "public-mappls-ui-widget-ios-distribution-base", "repository": "mappls-ui-widget-ios-distribution-base", "publicUrl": "https://github.com/mappls-api/mappls-ui-widget-ios-distribution-base", "classification": "distribution", "lifecycleEvidence": { "authority": "repository-identity", "signals": [ "identity:distribution" ], "reason": "The repository identity explicitly represents an SDK or binary distribution surface." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-07-27T11:37:42Z", "snapshotFingerprint": "e117a13d81e7182e759a4d72bd956fd00df7f4ae92c3476621bbbdfd2ab40c22", "ageDays": 21, "freshness": "active", "releaseRisk": "compatibility-review", "compatibilityAction": "Use for artifact discovery only. Confirm entitlement and the exact SDK, native artifact, toolchain, architecture, and host-application version pairing.", "stateModel": "hybrid", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "iOS", "Xamarin/.NET", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 28, "localCandidates": [], "sourceHref": "/sources/public-mappls-ui-widget-ios-distribution-base", "migrationHref": null } ``` ## source-lifecycle · mappls-web-maps - Identity: `source-lifecycle:public-mappls-web-maps` - Canonical: https://developer.mappls.com/sources/public-mappls-web-maps - State model: stateless ```json { "sourceId": "public-mappls-web-maps", "repository": "mappls-web-maps", "publicUrl": "https://github.com/mappls-api/mappls-web-maps", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-08-05T08:57:52Z", "snapshotFingerprint": "6d102a2fe3c3301e12220a398532907422a24f3ed273877c12f50c754786581c", "ageDays": 12, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Android", "iOS", "Web", "REST", "Cordova/Ionic", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 44, "localCandidates": [], "sourceHref": "/sources/public-mappls-web-maps", "migrationHref": null } ``` ## source-lifecycle · mappls-web-maps-js - Identity: `source-lifecycle:public-mappls-web-maps-js` - Canonical: https://developer.mappls.com/sources/public-mappls-web-maps-js - State model: stateless ```json { "sourceId": "public-mappls-web-maps-js", "repository": "mappls-web-maps-js", "publicUrl": "https://github.com/mappls-api/mappls-web-maps-js", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-01-28T10:45:36Z", "snapshotFingerprint": "5b7bd5c66a780e8315d64bec5d8e54f375c1ff1f24b536e9bfda9691031ad5a6", "ageDays": 201, "freshness": "aging", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "gis-analytics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Web", "REST", "Widgets/Deep links", "Server/Compiler" ], "documentCount": 1, "endpointCount": 80, "localCandidates": [], "sourceHref": "/sources/public-mappls-web-maps-js", "migrationHref": null } ``` ## source-lifecycle · mappls-web-plugins - Identity: `source-lifecycle:public-mappls-web-plugins` - Canonical: https://developer.mappls.com/sources/public-mappls-web-plugins - State model: stateless ```json { "sourceId": "public-mappls-web-plugins", "repository": "mappls-web-plugins", "publicUrl": "https://github.com/mappls-api/mappls-web-plugins", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-07-17T10:50:05Z", "snapshotFingerprint": "0500ead3cc1dcb4e9f2fcd0882c0d7e550dc18f3bdf539528aec575bcacfd35b", "ageDays": 31, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "search-places", "routes-navigation", "tracking-telematics", "widgets-deep-links", "capture-feedback", "identity-platform" ], "platforms": [ "Web", "REST", "Widgets/Deep links" ], "documentCount": 1, "endpointCount": 45, "localCandidates": [], "sourceHref": "/sources/public-mappls-web-plugins", "migrationHref": null } ``` ## source-lifecycle · mappls-workmate-android-sdk - Identity: `source-lifecycle:public-mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/sources/public-mappls-workmate-android-sdk - State model: stateful ```json { "sourceId": "public-mappls-workmate-android-sdk", "repository": "mappls-workmate-android-sdk", "publicUrl": "https://github.com/mappls-api/mappls-workmate-android-sdk", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2026-06-19T08:59:39Z", "snapshotFingerprint": "e04a9f1e646d0348e9df1cdb5a4cc84350f354420e16a488fd6072eb84144fb8", "ageDays": 59, "freshness": "active", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateful", "productAreas": [ "tracking-telematics", "workforce", "identity-platform" ], "platforms": [ "Android", "Server/Compiler", "AI/MCP" ], "documentCount": 1, "endpointCount": 7, "localCandidates": [], "sourceHref": "/sources/public-mappls-workmate-android-sdk", "migrationHref": null } ``` ## source-lifecycle · skydnn-aiapi-docs - Identity: `source-lifecycle:public-skydnn-aiapi-docs` - Canonical: https://developer.mappls.com/sources/public-skydnn-aiapi-docs - State model: stateless ```json { "sourceId": "public-skydnn-aiapi-docs", "repository": "skydnn-aiapi-docs", "publicUrl": "https://github.com/mappls-api/skydnn-aiapi-docs", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "exact", "pushedAt": "2023-02-01T12:06:35Z", "snapshotFingerprint": "f407d95bd8b3db716f04033d319e93c5c5eea34e6be96a46d659eaf0b2b476df", "ageDays": 1293, "freshness": "historical", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "maps", "gis-analytics", "ai-vision", "capture-feedback" ], "platforms": [ "REST", "Server/Compiler", "AI/MCP" ], "documentCount": 1, "endpointCount": 16, "localCandidates": [ { "id": "local-aihub-docs-skydnn-aiapi-docs", "name": "skydnn-aiapi-docs", "relativePath": "aihub/docs/skydnn-aiapi-docs" } ], "sourceHref": "/sources/public-skydnn-aiapi-docs", "migrationHref": null } ``` ## source-lifecycle · v1.2.0-logs - Identity: `source-lifecycle:public-v1-2-0-logs` - Canonical: https://developer.mappls.com/sources/public-v1-2-0-logs - State model: stateless ```json { "sourceId": "public-v1-2-0-logs", "repository": "v1.2.0-logs", "publicUrl": "https://github.com/mappls-api/v1.2.0-logs", "classification": "current", "lifecycleEvidence": { "authority": "conservative-default", "signals": [ "identity:mappls-or-neutral" ], "reason": "No explicit archive, deprecation, distribution, sample, or legacy identity signal is present in the public repository metadata." }, "declaredSuccessor": null, "matchQuality": "unmatched", "pushedAt": "2024-12-13T06:33:27Z", "snapshotFingerprint": "29445321439b02ac0adff1a2102932ed5cf1a8d3eaa427b7999ad2481aa5cb87", "ageDays": 612, "freshness": "aging", "releaseRisk": "standard-review", "compatibilityAction": "Use as current source evidence, then pin and validate the exact package, endpoint, authentication, entitlement, region, and release pairing before production.", "stateModel": "stateless", "productAreas": [ "other" ], "platforms": [ "Unspecified" ], "documentCount": 1, "endpointCount": 2, "localCandidates": [], "sourceHref": "/sources/public-v1-2-0-logs", "migrationHref": null } ``` ## authentication · Current core REST from a trusted server - Identity: `authentication:core-rest-current-static-key` - Canonical: https://developer.mappls.com/authentication#core-rest-current-static-key ```json { "slug": "core-rest-current-static-key", "title": "Current core REST from a trusted server", "runtime": "trusted-server", "platforms": [ "REST" ], "products": [ "maps", "search-places", "routes-navigation" ], "visibility": "secret", "summary": "Use the current restricted static-key generation only inside a trusted process for current core location requests.", "generation": "Current core REST", "credentialClass": "Restricted static key", "transport": "Documented access_token query contract, applied internally by the trusted adapter", "stateBoundary": "The request is stateless; credential inventory, rotation, quota, provenance, and any business workflow are durable application/control-plane state.", "useWhen": [ "The issued account explicitly names the current core REST generation", "The selected Search, Maps, Route, or Matrix contract uses the approved current host/path line", "The caller is a server, job, gateway, or MCP service—not an untrusted client" ], "allowedPlacement": [ "Managed secret provider injected into a trusted process", "Dedicated backend-for-frontend or policy-checked tool server", "Separate non-production and production application identities" ], "forbiddenPlacement": [ "Browser JavaScript, HTML, mobile bundle, desktop package, URL returned to a user, model context, logs, analytics, screenshots, or source", "Generic proxy endpoints that accept arbitrary provider paths or parameters" ], "restrictions": [ "Exact server egress identities and subscribed products", "Query-string redaction at application, proxy, WAF, APM, and support boundaries", "Explicit timeout, bounded idempotent retry, input/result limits, and safe request provenance" ], "rotation": [ "Issue a second restricted version", "Deploy it behind the same adapter and observe safe success/error rates", "Drain caches/workers, revoke the old version, and reconcile inventory" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-rest-apis" ], "contractEvidence": { "operations": 13, "modes": [ "not-declared" ], "boundary": "The normalized current-source operations do not themselves declare a security scheme; static-query behavior is separately implemented and tested in the trusted-server SDK. The issued account remains authoritative." }, "samples": [ { "language": "typescript", "label": "Trusted server adapter", "code": "const mappls = new MapplsClient({\n tokenProvider: envToken(\"MAPPLS_STATIC_KEY\"),\n coreAuthentication: \"static-query\",\n});\n\nconst result = await mappls.geocode({ address, region: \"IND\" });\n// The SDK owns credential placement, timeout, bounded retry, and redaction." } ], "consoleHref": "/console/credentials" } ``` ## authentication · Legacy core REST OAuth generation - Identity: `authentication:core-rest-legacy-oauth` - Canonical: https://developer.mappls.com/authentication#core-rest-legacy-oauth ```json { "slug": "core-rest-legacy-oauth", "title": "Legacy core REST OAuth generation", "runtime": "trusted-server", "platforms": [ "REST" ], "products": [ "maps", "search-places", "routes-navigation" ], "visibility": "secret", "summary": "Preserve the pre-current OAuth bearer generation only for an explicitly approved legacy host/path contract; do not mix it with current static-key URLs.", "generation": "Legacy core REST", "credentialClass": "OAuth bearer access token plus server-held client credential material", "transport": "Authorization: Bearer header on the issued legacy endpoint generation", "stateBoundary": "Provider token state is time-bound; the application owns refresh serialization, expiry margin, rotation, migration, and request provenance.", "useWhen": [ "The issued application and selected operation explicitly require the legacy OAuth line", "A migration cannot yet move the caller to the current core generation", "The client-credential exchange occurs only in a trusted process" ], "allowedPlacement": [ "Managed secret storage and a single-flight token provider", "Trusted server SDK configured explicitly as oauth-bearer" ], "forbiddenPlacement": [ "Client secret or bearer token in browsers, mobile apps, model prompts, source, build arguments, logs, or support packets", "Legacy token with a current host/path, or a current key with legacy URLs" ], "restrictions": [ "Exact legacy host/path and subscribed scope", "Refresh before expiry with one concurrent owner and bounded failure", "Migration owner, deadline, compatibility tests, and rollback evidence" ], "rotation": [ "Rotate client material in the provider-approved sequence", "Warm and prove the new token provider without exposing token text", "Drain the previous issuer material and complete the migration record" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mapmyindia-rest-api" ], "contractEvidence": { "operations": 8, "modes": [ "oauth2-bearer" ], "boundary": "These normalized operations preserve public OAuth bearer evidence; they do not prove that an issued account, host, path, or product still uses this generation." }, "samples": [ { "language": "typescript", "label": "Explicit legacy mode", "code": "const mappls = new MapplsClient({\n tokenProvider: singleFlightOAuthProvider(secretStore),\n coreAuthentication: \"oauth-bearer\",\n // Endpoint overrides come only from the approved legacy contract.\n});" } ], "consoleHref": "/console/credentials" } ``` ## authentication · InTouch telematics data plane - Identity: `authentication:intouch-rest-bearer` - Canonical: https://developer.mappls.com/authentication#intouch-rest-bearer ```json { "slug": "intouch-rest-bearer", "title": "InTouch telematics data plane", "runtime": "trusted-server", "platforms": [ "REST", "Web", "Android", "iOS", "React Native" ], "products": [ "intouch-telematics" ], "visibility": "secret", "summary": "Use a separately scoped InTouch bearer in a trusted data-plane adapter; never reuse the current core static key.", "generation": "InTouch REST", "credentialClass": "Time-bound InTouch bearer", "transport": "Authorization: Bearer header", "stateBoundary": "Reads may be request-shaped, but asset identity, consent, time windows, cursor/checkpoint, triage, retention, and audit belong to the application journey.", "useWhen": [ "The project is subscribed to the exact InTouch asset operation", "The backend applies asset, time-window, field, purpose, and principal policy", "Mobile or web experiences call an application backend rather than receiving the provider bearer" ], "allowedPlacement": [ "Trusted server or MCP live-read process under a separately named secret", "Short-lived internal result cache with tenant and policy identity" ], "forbiddenPlacement": [ "APK, IPA, browser bundle, widget URL, client-side storage, model context, or a core-location credential variable", "Unbounded asset history or arbitrary project proxy" ], "restrictions": [ "Project, asset, operation, time range, user purpose, and data minimization", "Precise-location access audit and response-field allow-list", "Independent expiry, rotation, and incident response from core location credentials" ], "rotation": [ "Acquire a replacement through the approved InTouch project flow", "Prove both token classification and least-scope reads in non-production", "Drain, revoke, and reconcile independently of all core credentials" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis" ], "contractEvidence": { "operations": 53, "modes": [ "bearer" ], "boundary": "The normalized repository contract declares bearer transport for these InTouch operations; entitlement, token issuance, permitted assets, and production retention remain account-specific." }, "samples": [ { "language": "typescript", "label": "Separate InTouch provider", "code": "const mappls = new MapplsClient({\n tokenProvider: envToken(\"MAPPLS_STATIC_KEY\"),\n coreAuthentication: \"static-query\",\n intouchTokenProvider: envToken(\"MAPPLS_INTOUCH_ACCESS_TOKEN\"),\n});\n\nconst status = await mappls.assetStatus({ assetId, region: \"IND\" });" } ], "consoleHref": "/console/credentials" } ``` ## authentication · Workmate workforce APIs - Identity: `authentication:workmate-oauth` - Canonical: https://developer.mappls.com/authentication#workmate-oauth ```json { "slug": "workmate-oauth", "title": "Workmate workforce APIs", "runtime": "trusted-server", "platforms": [ "REST", "Web", "Android" ], "products": [ "workmate" ], "visibility": "selection-required", "summary": "Use the exact organization, actor, host, OAuth generation, and transition contract issued for the Workmate integration.", "generation": "Workmate source generation", "credentialClass": "Organization/user-scoped OAuth evidence; issuance confirmation required", "transport": "Bearer transport where declared by the selected source contract", "stateBoundary": "Task, assignment, acceptance, proof, review, exception, and actor history are durable workflow state; authentication never substitutes for transition authorization.", "useWhen": [ "The organization has an approved Workmate API entitlement", "Service and human actor boundaries are separately modeled", "Every mutation uses an idempotency and reconciliation design" ], "allowedPlacement": [ "Trusted workforce integration service", "User session only after company identity and Workmate actor mapping are approved" ], "forbiddenPlacement": [ "Shared organization credential in a worker client", "Treating a successful token as permission for every task transition" ], "restrictions": [ "Organization, actor, task/action, purpose, region, and least fields", "Optimistic concurrency, transition invariants, audit, outbox, and reconciliation", "Exact source generation and provider provisioning approval" ], "rotation": [ "Freeze the exact actor/service mapping", "Rotate through an approved non-production transition suite", "Drain pending commands and reconcile unknown outcomes before revocation" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "contractEvidence": { "operations": 13, "modes": [ "oauth2-bearer" ], "boundary": "The public Workmate contracts preserve OAuth bearer evidence, but the company-issued organization, user, host, scope, and lifecycle contract is authoritative." }, "samples": [], "consoleHref": "/console/credentials" } ``` ## authentication · Browser Web Maps and Places - Identity: `authentication:web-public-key` - Canonical: https://developer.mappls.com/authentication#web-public-key ```json { "slug": "web-public-key", "title": "Browser Web Maps and Places", "runtime": "browser", "platforms": [ "Web" ], "products": [ "maps", "search-places", "routes-navigation" ], "visibility": "public-restricted", "summary": "Use only the browser-supported public credential class, restricted to exact origins; privileged REST operations stay behind a backend.", "generation": "Selected Web SDK generation", "credentialClass": "Origin-restricted browser public key", "transport": "Documented Web SDK configuration for the selected source line", "stateBoundary": "Map/view state is client lifecycle state; accepted place identity, workflow state, policy, and privileged calls remain application/backend owned.", "useWhen": [ "The selected Web SDK guide explicitly supports the issued browser credential", "Every production and preview origin is known", "A backend-for-frontend owns privileged or sensitive operations" ], "allowedPlacement": [ "Documented Web SDK configuration or server-rendered public runtime configuration", "Exact-origin development and production applications with separate keys" ], "forbiddenPlacement": [ "Server secret, OAuth client secret, InTouch bearer, or unrestricted key in JavaScript", "Secrets disguised by environment-variable names in a client build" ], "restrictions": [ "Exact scheme, hostname, and port; avoid broad wildcards", "CSP, dependency/version pinning, callback validation, and teardown", "Separate preview, development, and production identities" ], "rotation": [ "Register new exact origins before rollout", "Deploy the replacement public key and prove every origin", "Remove the old key after cache/service-worker drain" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-web-maps", "mappls-web-maps-js" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "Web SDK repository evidence identifies the client surface; the issued key configuration, supported script/package line, origins, and entitlements remain authoritative." }, "samples": [ { "language": "typescript", "label": "Public runtime configuration", "code": "type PublicMapConfig = { publicKey: string; allowedOrigin: string };\n\nconst config = readPublicConfig();\nif (location.origin !== config.allowedOrigin) throw new Error(\"Unexpected origin\");\n// Pass only the issued browser public key to the documented Web SDK adapter." } ], "consoleHref": "/console/credentials" } ``` ## authentication · Android native application - Identity: `authentication:android-public-key` - Canonical: https://developer.mappls.com/authentication#android-public-key ```json { "slug": "android-public-key", "title": "Android native application", "runtime": "android", "platforms": [ "Android" ], "products": [ "maps", "search-places", "routes-navigation", "capture-feedback" ], "visibility": "public-restricted", "summary": "Use only the Android app credential documented for the selected SDK line and restrict it to package plus signing identity.", "generation": "Selected Android SDK generation", "credentialClass": "Android application public credential", "transport": "Documented Android application initialization", "stateBoundary": "SDK/view/session lifecycle belongs to the app process; accepted domain records, user consent, and server operations remain outside the credential.", "useWhen": [ "Package, signing certificate, build variant, SDK line, and entitlement are approved together", "Release builds are tested on physical devices", "Server secrets remain behind an application backend" ], "allowedPlacement": [ "Documented Android manifest/resource/runtime configuration for a public app key", "Variant-specific non-production and production configuration" ], "forbiddenPlacement": [ "Static server key, OAuth client secret, or InTouch data-plane bearer in resources, BuildConfig, assets, native libraries, or Java/Kotlin", "One fleet-wide secret baked into an APK" ], "restrictions": [ "Exact package and signing certificate identity", "SDK and toolchain compatibility plus release signing", "Permission denial, recreation, background/resume, offline, and teardown tests" ], "rotation": [ "Register the next key against every active signing identity", "Ship a bounded release cohort and monitor safe initialization errors", "Retire the prior key only after supported app versions drain or an overlap policy is approved" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-android-sdk", "mappls-android-compose-demo" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "Android source repositories provide SDK/sample evidence, not a universal credential field, compatibility matrix, or entitlement promise." }, "samples": [ { "language": "kotlin", "label": "Application-owned boundary", "code": "interface MapCredentialProvider {\n fun publicAndroidKey(): String\n}\n\n// Inject only the package/signing-restricted app credential into the\n// documented SDK initialization for the approved release line." } ], "consoleHref": "/console/credentials" } ``` ## authentication · iOS native application - Identity: `authentication:ios-public-key` - Canonical: https://developer.mappls.com/authentication#ios-public-key ```json { "slug": "ios-public-key", "title": "iOS native application", "runtime": "ios", "platforms": [ "iOS" ], "products": [ "maps", "search-places", "routes-navigation", "capture-feedback" ], "visibility": "public-restricted", "summary": "Use only the iOS app credential documented for the selected SDK release and bind approval to bundle/team context.", "generation": "Selected iOS SDK generation", "credentialClass": "iOS application public credential", "transport": "Documented iOS application initialization", "stateBoundary": "Scene/view/delegate ownership is client lifecycle state; consent, accepted business records, and privileged operations remain application/server owned.", "useWhen": [ "Bundle, team/signing, target, package/binary set, and entitlement are approved together", "Archive and physical-device behavior are proven", "Extensions receive only explicitly approved capability" ], "allowedPlacement": [ "Documented iOS public app configuration for the selected package line", "Target-specific non-production and production configuration" ], "forbiddenPlacement": [ "Server key, OAuth client secret, or provider bearer in plist, source, resources, keychain-as-distribution, or binary obfuscation", "Assuming Keychain makes an embedded provider secret safe" ], "restrictions": [ "Exact bundle/team context and approved targets", "Complete Swift/Xcode/package/binary compatibility set", "Scene restore, backgrounding, memory pressure, permission changes, and teardown" ], "rotation": [ "Approve a replacement for every shipping target", "Release with bounded overlap and safe initialization telemetry", "Retire only after supported installed versions are accounted for" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-ios-sdk", "mappls-map-ios-distribution", "mappls-api-kit-ios-distribution" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "iOS source and distribution repositories identify candidate SDK lines; account credentials, checksums, target compatibility, and entitlement require confirmation." }, "samples": [ { "language": "swift", "label": "Application-owned boundary", "code": "protocol MapCredentialProviding {\n var publicIOSKey: String { get }\n}\n\n// Supply only the bundle/team-approved public app credential to the\n// documented SDK initializer for the resolved package set." } ], "consoleHref": "/console/credentials" } ``` ## authentication · React Native, Flutter, Cordova, or Xamarin - Identity: `authentication:cross-platform-native-keys` - Canonical: https://developer.mappls.com/authentication#cross-platform-native-keys ```json { "slug": "cross-platform-native-keys", "title": "React Native, Flutter, Cordova, or Xamarin", "runtime": "cross-platform", "platforms": [ "React Native", "Flutter", "Cordova", "Xamarin" ], "products": [ "maps", "search-places", "routes-navigation", "intouch-telematics" ], "visibility": "selection-required", "summary": "Configure Android and iOS halves independently; shared JavaScript or Dart is neither a secret store nor evidence of native parity.", "generation": "Wrapper plus underlying native SDK generations", "credentialClass": "Separate platform app credentials; wrapper-specific confirmation required", "transport": "Underlying native initialization, not a shared privileged credential", "stateBoundary": "The shared layer owns normalized app state; each native bridge owns readiness, events, cancellation, teardown, and its separately approved credential.", "useWhen": [ "Wrapper, Android, iOS, architecture mode, and toolchain versions are one approved matrix", "Both native sample halves work before the shared feature", "A backend owns privileged operations" ], "allowedPlacement": [ "Android and iOS public application configuration separately", "A typed bridge that never returns credential text to the shared layer" ], "forbiddenPlacement": [ "Server secret in JavaScript, Dart, assets, compile-time constants, or a native bridge getter", "One cross-platform key assumed to cover both native restriction systems" ], "restrictions": [ "Android package/signing and iOS bundle/team independently", "Wrapper/native dependency parity and release builds", "Mount/unmount, late callbacks, offline, background/resume, and bridge cleanup" ], "rotation": [ "Rotate each native platform as its installed-base policy permits", "Prove both release artifacts and shared error normalization", "Retire per-platform versions independently" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-react-native-sdk", "mappls-flutter-sdk", "flutter-mapmyindia-gl" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "Wrapper repositories are integration evidence only. The exact wrapper/native credential methods, compatibility matrix, and supported architecture require confirmation." }, "samples": [ { "language": "typescript", "label": "No credential bridge", "code": "type NativeMapAdapter = {\n ready(): Promise;\n selectPlace(id: string): Promise;\n dispose(): Promise;\n};\n\n// The shared API exposes behavior—not Android/iOS credential values." } ], "consoleHref": "/console/credentials" } ``` ## authentication · App widgets and iframe embeds - Identity: `authentication:iframe-and-app-widgets` - Canonical: https://developer.mappls.com/authentication#iframe-and-app-widgets ```json { "slug": "iframe-and-app-widgets", "title": "App widgets and iframe embeds", "runtime": "widget", "platforms": [ "Widgets", "Web" ], "products": [ "app-widgets-deep-links", "gis-analytics" ], "visibility": "entitlement-specific", "summary": "Many documented app widgets are credential-free; optional or paid access remains a literal placeholder until the exact widget entitlement is issued.", "generation": "Selected widget contract", "credentialClass": "None, origin-restricted browser value, or paid ephemeral token—selection required", "transport": "Documented iframe parameter or browser wrapper only where the selected widget requires it", "stateBoundary": "Frame load is not completion. The host owns origin/schema validation, candidate/accepted state, reconciliation, accessibility fallback, and any durable contribution or review journey.", "useWhen": [ "The exact current widget URL and event/callback contract are selected", "The host can operate without the widget", "Paid/optional token ownership and expiry are explicitly approved" ], "allowedPlacement": [ "No credential for credential-free widget shapes", "Only the documented browser-visible placeholder/value for an entitled widget", "Exact-origin postMessage validation and narrow CSP" ], "forbiddenPlacement": [ "Server secret in an iframe URL", "Persisting or logging token-bearing URLs", "Treating HTTP 200 or frame load as entitlement, coverage, publication, or business completion" ], "restrictions": [ "Exact frame and message origins, schema, CSP, referrer policy, and fallback", "Widget-specific entitlement, expiry, data purpose, and callback lifecycle", "No sensitive payload in query parameters" ], "rotation": [ "Rotate only through the selected widget entitlement contract", "Update the host without logging complete URLs", "Prove expired/revoked/blocked behavior and remove cached token-bearing state" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-web-plugins" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "Widget evidence varies by family and generation. The widget builder emits placeholders only and does not accept, persist, or validate credentials." }, "samples": [ { "language": "html", "label": "Credential-free host first", "code": "\n" } ], "consoleHref": "/console/credentials" } ``` ## authentication · Mappls deep links - Identity: `authentication:deep-links-no-credential` - Canonical: https://developer.mappls.com/authentication#deep-links-no-credential ```json { "slug": "deep-links-no-credential", "title": "Mappls deep links", "runtime": "deep-link", "platforms": [ "Deep links", "Web", "Android", "iOS" ], "products": [ "app-widgets-deep-links" ], "visibility": "none", "summary": "Mappls app hand-off links need no credential; the URL carries only bounded, non-sensitive intent.", "generation": "Current documented link shape", "credentialClass": "No credential", "transport": "Validated HTTPS link, with installed-app URI only where documented", "stateBoundary": "The hand-off is stateless; the application owns user intent, fallback, downstream arrival evidence, consent, and any durable workflow.", "useWhen": [ "A zero-SDK hand-off meets the experience", "The exact place/navigation/link shape is documented", "Browser fallback is acceptable" ], "allowedPlacement": [ "Validated public intent with encoded Mappls Pin, coordinates, name, or travel mode as documented" ], "forbiddenPlacement": [ "Any API key, token, private address, precise private/user payload, internal ID, or server secret in the URL", "Assuming click means app-open or arrival" ], "restrictions": [ "Allow-listed HTTPS host/path and bounded fields", "Consent before sending location intent", "Separate click, app open, browser fallback, recovery, and arrival evidence" ], "rotation": [ "No credential rotation", "Version and regression-test the approved link shape", "Remove deprecated paths through normal application release control" ], "diagnostics": [ { "signal": "The app does not open", "likelyCause": "The URI is undocumented, unavailable, or the app is not installed.", "nextAction": "Use the documented HTTPS link as the primary hand-off and retain a visible browser fallback." }, { "signal": "The destination is wrong", "likelyCause": "Coordinate order, encoding, Mappls Pin, or mode differs from the selected intent contract.", "nextAction": "Rebuild through the bounded deep-link tool and test the same fixture across app-installed and browser-only devices." } ], "sourceGuideSlugs": [ "mappls-app-widgets" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "Deep links are documented outside the REST contract catalog and carry no credential." }, "samples": [ { "language": "typescript", "label": "Intent only", "code": "const url = buildMapplsDeepLink({\n intent: \"share-place\",\n mapplsPin: selectedPlace.mapplsPin,\n});\n// Never append a key, token, or private application payload." } ], "consoleHref": "/tools/deep-links" } ``` ## authentication · mGIS browser surfaces - Identity: `authentication:mgis-entitled-browser` - Canonical: https://developer.mappls.com/authentication#mgis-entitled-browser ```json { "slug": "mgis-entitled-browser", "title": "mGIS browser surfaces", "runtime": "enterprise", "platforms": [ "Web", "Widgets", "REST", "MCP" ], "products": [ "gis-analytics" ], "visibility": "entitlement-specific", "summary": "Keep the entitled widget key, Web JS access token, durable workspace API identity, and sovereign deployment identity as separate contracts.", "generation": "Selected mGIS or MIGIST surface", "credentialClass": "Surface-specific enterprise credential; exact issuance required", "transport": "Documented browser parameter or approved trusted adapter for the selected surface", "stateBoundary": "Dataset versions, styles, analysis attempts, exports, lineage, sharing, and audit are durable workspace state; a browser callback is only candidate evidence.", "useWhen": [ "Workspace, tenant, region, dataset, surface, and method are approved", "Browser and server credential classes are separated", "Durable commands have idempotency, expected version, receipt, and reconciliation" ], "allowedPlacement": [ "Browser-visible widget/Web SDK value only where explicitly documented and origin-restricted", "Trusted adapter for workspace/API credentials", "Deployment-specific device/workload identity for sovereign runtimes" ], "forbiddenPlacement": [ "Server/workspace secret in browser code", "Reusing an mGIS browser value for MIGIST, generic REST, or another tenant", "Invented endpoint or method name where source evidence conflicts" ], "restrictions": [ "Tenant, workspace, dataset, method, role, share/export purpose, origin, and retention", "Versioned dataset/style/workview identity and immutable lineage", "Exact entitlement plus naming-drift release gates" ], "rotation": [ "Classify every consumer by surface before issuance", "Rotate browser and trusted-service identities independently", "Reconcile in-flight analysis/export attempts before revoking a service identity" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries" ], "contractEvidence": { "operations": 0, "modes": [], "boundary": "mGIS evidence spans browser methods, durable workspace descriptions, and a separate sovereign distribution. It does not establish one universal authentication contract." }, "samples": [ { "language": "typescript", "label": "Trusted workspace seam", "code": "interface MgisWorkspaceAdapter {\n publish(command: PublishDatasetCommand): Promise;\n reconcile(attemptId: string): Promise;\n}\n// Exact endpoint and auth come only from the approved workspace contract." } ], "consoleHref": "/console/credentials" } ``` ## authentication · Offline and automotive activation - Identity: `authentication:offline-device-activation` - Canonical: https://developer.mappls.com/authentication#offline-device-activation ```json { "slug": "offline-device-activation", "title": "Offline and automotive activation", "runtime": "device", "platforms": [ "Automotive", "Linux", "Android" ], "products": [ "offline-automotive" ], "visibility": "entitlement-specific", "summary": "Treat per-device activation, licensed runtime/data, signatures, and fleet release policy as a provisioning system—not as a reusable API key.", "generation": "Entitled runtime and data release", "credentialClass": "Per-device/workload identity plus non-secret activation evidence and licensed artifacts", "transport": "Approved manufacture/fleet provisioning channel", "stateBoundary": "Activation, runtime/data compatibility, slots, qualification, rollout, rollback, and retirement are durable fleet state and must survive long offline periods.", "useWhen": [ "The exact hardware, ABI, graphics, runtime, data epoch, region, vehicle interfaces, and license are entitled", "A device/fleet control plane owns manufacture through retirement", "A/B activation and rollback are atomic" ], "allowedPlacement": [ "Per-device secure hardware/workload identity", "Signed manifests and separately delivered runtime/data/license material", "Non-secret activation state in health evidence" ], "forbiddenPlacement": [ "Fleet-wide shared secret or license baked into an image", "Protected artifact bodies, package URLs, keys, or license files in docs, logs, model context, or support bundles", "Treating copied files as successful activation" ], "restrictions": [ "Device, fleet, region, hardware/software manifest, validity, and release cohort", "Signature, compatibility, storage, power-loss, rollback, backup/restore, and retirement", "Minimum offline privilege and revocation/reconciliation on reconnect" ], "rotation": [ "Stage a signed compatible release in the inactive slot", "Qualify, atomically activate, observe, and retain rollback", "Retire the previous release or device identity only after fleet reconciliation" ], "diagnostics": [ { "signal": "Runtime starts but rendering or routing fails", "likelyCause": "Runtime, data epoch, ABI, graphics, configuration, voice, region, or activation is incompatible.", "nextAction": "Fail readiness, retain the prior slot, compare the signed release manifest to device facts, and obtain the exact compatibility decision." }, { "signal": "Activation is unknown after interruption", "likelyCause": "The process persisted partial files instead of one atomic active-slot pointer and durable receipt.", "nextAction": "Boot the last qualified slot, reconcile the staged manifest and activation journal, and never guess success from file presence." } ], "sourceGuideSlugs": [], "contractEvidence": { "operations": 0, "modes": [], "boundary": "The public snapshot does not establish a universal offline/automotive credential or safety contract. Entitled release material is authoritative." }, "samples": [ { "language": "text", "label": "Fleet lifecycle", "code": "manufacture → provision → stage → qualify → activate → observe\n ↘ rollback → reconcile → retire\n\nNo shared fleet credential belongs in the runtime image." } ], "consoleHref": "/tools/automotive" } ``` ## authentication · MCP and AI-native clients - Identity: `authentication:mcp-gateway-and-provider` - Canonical: https://developer.mappls.com/authentication#mcp-gateway-and-provider ```json { "slug": "mcp-gateway-and-provider", "title": "MCP and AI-native clients", "runtime": "mcp", "platforms": [ "MCP", "REST" ], "products": [ "ai-location", "maps", "search-places", "routes-navigation", "intouch-telematics", "gis-analytics" ], "visibility": "selection-required", "summary": "Keep MCP client identity, tool authorization, and underlying Mappls provider credentials as independent security planes.", "generation": "MCP offline or live-read profile", "credentialClass": "None for offline tools; gateway/OAuth client token for remote MCP; product credential stays inside the server for approved live reads", "transport": "Local stdio or authenticated stateless Streamable HTTP; provider transport is tool-specific and never exposed to the client", "stateBoundary": "The MCP transport is stateless; principal, approval, execution lease, tool evidence, provenance, replay protection, and business workflows are application-owned durable state.", "useWhen": [ "Offline discovery/configuration is preferred unless live provider data is required", "Tool input/output is typed, bounded, policy-checked, and provenance-validated", "Remote identity is scoped to the exact MCP resource and is independent of provider credentials" ], "allowedPlacement": [ "Provider credentials only in the MCP service secret provider", "Short-lived remote MCP access token only in the MCP client transport", "No credential for local/offline catalog tools" ], "forbiddenPlacement": [ "Provider key/token in model context, prompt, tool arguments, client configuration, structured output, errors, logs, or provenance", "MCP gateway token reused as a Mappls provider credential", "Write tools or arbitrary URLs in the read-only profile" ], "restrictions": [ "Exact MCP resource, issuer, audience, principal, client, scope, expiry, origin, and profile", "Tool allow-list, input/output bounds, egress allow-list, redaction, rate limit, audit, and approval", "Underlying product credential restricted independently by product, region, and server egress" ], "rotation": [ "Rotate MCP gateway/OAuth identity independently of provider credentials", "Rotate each provider credential through its own path while keeping tool schemas stable", "Revoke leases and reconcile in-flight executions before removing either identity" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." }, { "signal": "Tool is not listed", "likelyCause": "The endpoint uses the offline profile, the client lacks the required scope, or the selected capability is intentionally unavailable.", "nextAction": "Use offline planning first; move to a separately deployed live-read profile only with approved product entitlement and least scope." } ], "sourceGuideSlugs": [], "contractEvidence": { "operations": 162, "modes": [ "bearer", "not-declared", "oauth2-bearer" ], "boundary": "MCP documentation tools need no provider credential. Live-read tools delegate to exact product contracts; the MCP server is not an authorization server and exposes no writes." }, "samples": [ { "language": "json", "label": "Remote MCP client boundary", "code": "{\n \"url\": \"https://mcp.example.com/mcp\",\n \"headers\": { \"Authorization\": \"Bearer ${MCP_RESOURCE_TOKEN}\" }\n}\n// MAPPLS_* provider credentials exist only in the MCP server process." } ], "consoleHref": "/ai" } ``` ## authentication · Entitled or source-ambiguous product - Identity: `authentication:contract-selection-required` - Canonical: https://developer.mappls.com/authentication#contract-selection-required ```json { "slug": "contract-selection-required", "title": "Entitled or source-ambiguous product", "runtime": "enterprise", "platforms": [ "REST", "Web", "Android", "iOS", "Widgets", "MCP" ], "products": [ "gis-analytics", "capture-feedback", "ai-location" ], "visibility": "selection-required", "summary": "When public evidence does not establish issuance, host/path generation, or client placement, stop at the adapter boundary and obtain the exact account contract.", "generation": "Account-specific", "credentialClass": "Selection required", "transport": "Selection required—never inferred from an adjacent Mappls product", "stateBoundary": "Authentication uncertainty is a release gate. Durable business state still requires explicit actors, commands, evidence, reconciliation, audit, and retention.", "useWhen": [ "The selected source says entitlement, activation, token, access, or API key but does not establish the full contract", "Multiple public/local generations conflict", "A product or deployment is company-provisioned" ], "allowedPlacement": [ "Typed adapter with no credential literal", "Blank secret/public-key placeholders classified by intended runtime", "Provisioning request that records exact evidence gaps" ], "forbiddenPlacement": [ "Trying static key, OAuth bearer, browser token, or another product credential until one works", "Copying a sample credential field into production without matching issuance and restriction evidence" ], "restrictions": [ "Provider owner, product, generation, host/path, runtime, transport, scopes, region, restriction, expiry, rotation, and revocation must all be answered", "Non-production hostile-path proof before production issuance" ], "rotation": [ "Define the issued lifecycle before the first credential", "Prove replacement, overlap/drain, revoke, and reconciliation in non-production", "Attach evidence to the application—not to informal operator memory" ], "diagnostics": [ { "signal": "401 or authentication rejected", "likelyCause": "The credential generation, transport, host/path line, expiry, or product scope does not match the selected contract.", "nextAction": "Stop retries; compare the issued credential class and exact contract, retain only a safe request identity, and test a new non-production credential after reconciliation." }, { "signal": "403 or entitlement rejected", "likelyCause": "Authentication succeeded but the application, product, region, origin, package, bundle, asset, workspace, or operation is not allowed.", "nextAction": "Keep the same credential shape and reconcile entitlement plus restrictions in the console; do not weaken restrictions blindly." }, { "signal": "Works locally, fails in release", "likelyCause": "Release origin, signing certificate, bundle, egress address, build configuration, or environment injection differs from development.", "nextAction": "Compare safe runtime identity to the registered restriction and prove the release artifact without printing the credential." } ], "sourceGuideSlugs": [], "contractEvidence": { "operations": 0, "modes": [], "boundary": "This path exists specifically to prevent public source signals from being promoted into an invented authentication contract." }, "samples": [ { "language": "typescript", "label": "Fail-closed adapter", "code": "interface EntitledProviderAdapter {\n execute(command: ApprovedCommand): Promise;\n}\n\nthrow new Error(\"Credential contract selection required\");" } ], "consoleHref": "/console/credentials" } ``` ## error-diagnostic · Local configuration failure - Identity: `error-diagnostic:local-configuration` - Canonical: https://developer.mappls.com/errors#local-configuration ```json { "slug": "local-configuration", "title": "Local configuration failure", "severity": "caller", "statusCodes": [], "defaultRetry": "fix-then-retry", "summary": "The integration could not safely construct or start the request because local endpoint, credential, package, or runtime configuration is incomplete or unsafe.", "codeSignals": [ "insecure_endpoint", "credential_required", "intouch_credential_required", "invalid_configuration", "sdk_not_initialized" ], "whatHappened": "No provider success should be assumed. The failure occurred at or before the application adapter boundary.", "likelyCauses": [ "Missing or mismatched credential generation", "HTTP endpoint outside an explicit loopback test", "SDK initialized in the wrong lifecycle or with incompatible packages", "Release configuration differs from development" ], "firstChecks": [ "Choose the exact product/runtime authentication path", "Compare safe endpoint host, SDK version, build variant, origin/package/bundle identity, and region", "Confirm the provider request was never sent before retrying" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Correct configuration", "Run one bounded non-production probe", "Record the selected generation and release proof" ], "statefulRecovery": [ "Keep the aggregate unchanged", "Correct configuration", "Reconcile any adapter queue before resuming commands" ], "links": [ { "label": "Authentication center", "href": "/authentication" }, { "label": "SDK center", "href": "/sdks" } ], "samples": [ { "language": "typescript", "label": "Classify without leaking provider data", "code": "try {\n const client = createMapplsClientFromEnvironment();\n await client.geocode({ address });\n} catch (error) {\n // Record only error.code, status, runtime, release, and request ID.\n // Never serialize the client, environment, URL, or credential.\n throw toSafeApplicationError(error);\n}" } ] } ``` ## error-diagnostic · Request validation failure - Identity: `error-diagnostic:validation` - Canonical: https://developer.mappls.com/errors#validation ```json { "slug": "validation", "title": "Request validation failure", "severity": "caller", "statusCodes": [ 400, 405, 411, 413, 415, 422 ], "defaultRetry": "fix-then-retry", "summary": "The request shape, value range, content type, method, or business precondition is invalid for the selected contract.", "codeSignals": [ "invalid_location", "invalid_profile", "location_limit", "invalid_history_window", "invalid_argument", "invalid_request", "validation_failed" ], "whatHappened": "The operation was rejected as submitted. Repeating the same request cannot make it valid.", "likelyCauses": [ "Wrong coordinate order, field name, enum, timestamp unit, or bound", "Required field or content type missing", "Request built for another API or SDK generation", "A state transition precondition is not satisfied" ], "firstChecks": [ "Open the exact normalized operation rather than a neighboring guide", "Validate method, host, path, auth generation, required fields, units, and maximums", "For transitions, reload current state and allowed commands" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Fix the invalid field or contract selection", "Add a regression test for the rejected boundary", "Retry once with a new request identity if required" ], "statefulRecovery": [ "Do not mutate local state optimistically", "Reload the aggregate and allowed transition", "Submit a corrected command with a stable idempotency key" ], "links": [ { "label": "API reference", "href": "/api-reference" }, { "label": "Credential-free sandbox", "href": "/sandbox" } ], "samples": [] } ``` ## error-diagnostic · Authentication rejected - Identity: `error-diagnostic:authentication` - Canonical: https://developer.mappls.com/errors#authentication ```json { "slug": "authentication", "title": "Authentication rejected", "severity": "policy", "statusCodes": [ 401 ], "defaultRetry": "fix-then-retry", "summary": "The credential is missing, expired, revoked, malformed, or belongs to a different product generation or transport.", "codeSignals": [ "unauthorized", "authentication_failed", "invalid_token", "token_expired", "oauth_rejected" ], "whatHappened": "The caller identity was not accepted. Blind retries can amplify an outage or lockout and must stop.", "likelyCauses": [ "Current static key, legacy OAuth, InTouch bearer, app key, or MCP token was interchanged", "Credential expired, was rotated, or is not present in the intended runtime", "Host/path generation or Authorization transport is wrong", "Clock skew or issuer/audience mismatch" ], "firstChecks": [ "Stop automatic retries", "Compare the selected authentication path and issued generation", "Rotate only through the controlled overlap-and-drain lifecycle" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Correct credential selection or refresh through the approved provider", "Prove one non-production request", "Resume bounded traffic without logging token text" ], "statefulRecovery": [ "Pause commands", "Refresh or rotate identity", "Reconcile queued and unknown outcomes before resuming" ], "links": [ { "label": "Authentication center", "href": "/authentication" }, { "label": "Credential console", "href": "/console/credentials" } ], "samples": [] } ``` ## error-diagnostic · Authorization or entitlement denied - Identity: `error-diagnostic:authorization-entitlement` - Canonical: https://developer.mappls.com/errors#authorization-entitlement ```json { "slug": "authorization-entitlement", "title": "Authorization or entitlement denied", "severity": "policy", "statusCodes": [ 403 ], "defaultRetry": "do-not-retry", "summary": "Identity may be valid, but the application, product, scope, region, origin, signing identity, resource, or action is not permitted.", "codeSignals": [ "forbidden", "insufficient_scope", "not_entitled", "meter_target_not_entitled", "meter_region_mismatch", "policy_denied" ], "whatHappened": "The requested capability is outside the verified caller's current authority.", "likelyCauses": [ "Product or quota was not provisioned", "Origin, server egress, Android signing identity, iOS bundle/team, asset, or region does not match", "Human or service actor lacks transition authority", "MCP deployment profile or OAuth scope excludes the tool" ], "firstChecks": [ "Keep restrictions in place", "Inspect entitlement and credential metadata in the console", "Request the narrow missing access with product, environment, region, and business purpose" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Obtain or correct least-privilege entitlement", "Prove the exact runtime restriction", "Retry only after control-plane evidence changes" ], "statefulRecovery": [ "Keep the command pending or rejected according to the journey", "Record the decision trail", "Resume only after entitlement activation is independently observed" ], "links": [ { "label": "Applications", "href": "/console/applications" }, { "label": "Authentication center", "href": "/authentication" } ], "samples": [] } ``` ## error-diagnostic · Resource or route not found - Identity: `error-diagnostic:not-found` - Canonical: https://developer.mappls.com/errors#not-found ```json { "slug": "not-found", "title": "Resource or route not found", "severity": "caller", "statusCodes": [ 404, 410 ], "defaultRetry": "do-not-retry", "summary": "The endpoint generation, operation path, tenant-owned resource, Mappls Pin, asset, or durable aggregate is absent or no longer addressable.", "codeSignals": [ "not_found", "resource_not_found", "application_not_found", "gone" ], "whatHappened": "The selected identity was not found at the queried boundary; this is not proof that a similarly named resource exists elsewhere.", "likelyCauses": [ "Wrong host/path or legacy/current generation", "Resource belongs to another tenant, region, project, or environment", "Identifier is stale, deleted, retired, or never committed", "Read-after-write convergence is still pending" ], "firstChecks": [ "Confirm exact resource type and environment", "Use a supported list/read contract where available", "For a recent write, reconcile by idempotency key or provider request ID" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Correct the identifier or endpoint generation", "Do not enumerate foreign resources", "Treat 410 as retired unless the contract says otherwise" ], "statefulRecovery": [ "Reconcile command and event history", "Distinguish pending convergence from terminal absence", "Require a new command for recreation rather than silently reusing identity" ], "links": [ { "label": "API reference", "href": "/api-reference" }, { "label": "Stateful planner", "href": "/tools/stateful" } ], "samples": [] } ``` ## error-diagnostic · Conflict or stale state - Identity: `error-diagnostic:conflict` - Canonical: https://developer.mappls.com/errors#conflict ```json { "slug": "conflict", "title": "Conflict or stale state", "severity": "stateful", "statusCodes": [ 409, 412, 428 ], "defaultRetry": "reconcile-first", "summary": "The command conflicts with a committed version, reused identity, transition invariant, duplicate content, or concurrent operation.", "codeSignals": [ "conflict", "version_conflict", "already_exists", "idempotency_conflict", "meter_event_conflict", "meter_request_conflict" ], "whatHappened": "A durable decision already exists or the caller acted on stale state. The outcome cannot be resolved by changing only the retry delay.", "likelyCauses": [ "Optimistic version is stale", "An idempotency key was reused with different content", "The transition already completed or is no longer allowed", "Two actors attempted incompatible changes" ], "firstChecks": [ "Read the latest aggregate version and event/audit evidence", "Compare a safe request-content digest—not the payload—against the original command", "Decide whether the intended business outcome is already satisfied" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier", "Aggregate ID, expected/current version, idempotency-key hash, and command type" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Correct the stale precondition", "Use a fresh request identity only for a genuinely new operation", "Never turn a conflicting duplicate into an automatic new write" ], "statefulRecovery": [ "Reconcile current aggregate and provider state", "Return the already-committed result when the original intent matches", "Otherwise require an explicit new versioned command" ], "links": [ { "label": "Stateful operations", "href": "/tools/stateful" }, { "label": "Event catalog", "href": "/events" } ], "samples": [] } ``` ## error-diagnostic · Rate or quota limited - Identity: `error-diagnostic:rate-limited` - Canonical: https://developer.mappls.com/errors#rate-limited ```json { "slug": "rate-limited", "title": "Rate or quota limited", "severity": "transient", "statusCodes": [ 429 ], "defaultRetry": "retry-after", "summary": "A provider, gateway, tenant policy, or product quota is intentionally limiting work.", "codeSignals": [ "rate_limited", "quota_exceeded", "too_many_requests", "budget_exhausted" ], "whatHappened": "Capacity or policy denied this attempt. Immediate parallel retries make recovery slower and may consume more budget.", "likelyCauses": [ "Burst or sustained rate exceeded", "Monthly entitlement or tenant delivery budget exhausted", "Retry storm or missing client-side coalescing", "One workload is starving others" ], "firstChecks": [ "Honor Retry-After when present", "Inspect application/product usage and quota", "Reduce concurrency, coalesce duplicate reads, and add jitter" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier", "Retry-After value and safe quota-policy version" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Wait for Retry-After or a bounded exponential backoff with jitter", "Cap attempts and total elapsed time", "Cache or batch where the contract permits" ], "statefulRecovery": [ "Keep the command durably queued", "Schedule a later attempt without changing idempotency identity", "Preserve per-aggregate ordering and tenant fairness" ], "links": [ { "label": "Usage console", "href": "/console/usage" }, { "label": "Request diagnostics", "href": "/console/logs?outcome=throttled" } ], "samples": [] } ``` ## error-diagnostic · Timeout or network failure - Identity: `error-diagnostic:timeout-network` - Canonical: https://developer.mappls.com/errors#timeout-network ```json { "slug": "timeout-network", "title": "Timeout or network failure", "severity": "transient", "statusCodes": [ 408, 504 ], "defaultRetry": "bounded-retry", "summary": "The client did not receive a trustworthy completion response before its deadline, or could not establish the network request.", "codeSignals": [ "timeout", "network_error", "connection_reset", "dns_failure" ], "whatHappened": "For reads, completion is usually absent. For writes and transitions, the provider may have committed even though the response was lost.", "likelyCauses": [ "Client deadline too short", "DNS, TLS, proxy, mobile/offline, or provider connectivity failure", "Large or expensive request", "Response was lost after a stateful commit" ], "firstChecks": [ "Classify the operation safety before retrying", "Retain request ID, idempotency identity, deadline, attempt, and occurrence time", "Check service status and local network without exposing the request URL" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier", "Idempotency key hash and reconciliation lookup result for writes" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Retry an idempotent read within an attempt and elapsed-time budget", "Use jitter and a fresh transport connection where appropriate", "Surface a bounded unavailable result after exhaustion" ], "statefulRecovery": [ "Mark outcome unknown", "Query by provider request or idempotency identity", "Retry the same command identity only when the contract proves idempotency" ], "links": [ { "label": "Platform status", "href": "/status" }, { "label": "Request diagnostics", "href": "/console/logs" } ], "samples": [] } ``` ## error-diagnostic · Provider or dependency unavailable - Identity: `error-diagnostic:provider-unavailable` - Canonical: https://developer.mappls.com/errors#provider-unavailable ```json { "slug": "provider-unavailable", "title": "Provider or dependency unavailable", "severity": "transient", "statusCodes": [ 500, 502, 503, 507 ], "defaultRetry": "bounded-retry", "summary": "A provider, gateway, dependency, or adapter failed to serve a valid response.", "codeSignals": [ "provider_error", "oauth_unavailable", "oauth_invalid_response", "service_unavailable", "dependency_unavailable" ], "whatHappened": "The operation did not return a usable success. Stateful mutation outcome may still be unknown unless the contract proves rejection-before-commit.", "likelyCauses": [ "Provider or gateway incident", "Upstream returned malformed or incomplete data", "Dependency saturation or rollout regression", "Regional routing or entitlement adapter unavailable" ], "firstChecks": [ "Check request diagnostics and public status", "Compare error rate by operation, application, region, and release", "Use request ID for provider correlation and keep response bodies out of tickets" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Use bounded exponential retry only for safe reads", "Open a circuit after the retry budget", "Serve an explicit stale/partial fallback only when product semantics permit" ], "statefulRecovery": [ "Move the command to unknown or retry-scheduled state", "Reconcile before reissuing", "Preserve the same idempotency identity and ordering lane" ], "links": [ { "label": "Platform status", "href": "/status" }, { "label": "Request diagnostics", "href": "/console/logs?outcome=server-error" } ], "samples": [] } ``` ## error-diagnostic · Unknown stateful outcome - Identity: `error-diagnostic:unknown-outcome` - Canonical: https://developer.mappls.com/errors#unknown-outcome ```json { "slug": "unknown-outcome", "title": "Unknown stateful outcome", "severity": "stateful", "statusCodes": [ 202 ], "defaultRetry": "reconcile-first", "summary": "A command was accepted or lost across an asynchronous boundary, but final provider and application state are not yet reconciled.", "codeSignals": [ "unknown_outcome", "provisioning_pending", "callback_pending", "delivery_unknown", "reconciliation_required" ], "whatHappened": "Neither success nor failure is safe to claim. A second business command could duplicate work or violate ordering.", "likelyCauses": [ "Accepted asynchronous work has not completed", "Callback or webhook is delayed or missing", "Response was lost after commit", "Application and provider inventories disagree" ], "firstChecks": [ "Keep the original idempotency and provider request identities", "Read aggregate, outbox, callback, delivery, and provider evidence", "Escalate only a minimized support packet after the reconciliation deadline" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier", "Aggregate/version, command type, idempotency-key hash, provider request ID, last observed state, and reconciliation deadline" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Do not use this class for a truly stateless read", "Reclassify from the actual HTTP/error evidence" ], "statefulRecovery": [ "Persist unknown outcome explicitly", "Reconcile by stable identity", "Apply the observed terminal event once", "Require independent recovery approval where replay has material effect" ], "links": [ { "label": "Stateful operations", "href": "/tools/stateful" }, { "label": "Application events", "href": "/events" } ], "samples": [] } ``` ## error-diagnostic · Unclassified failure - Identity: `error-diagnostic:unclassified` - Canonical: https://developer.mappls.com/errors#unclassified ```json { "slug": "unclassified", "title": "Unclassified failure", "severity": "unknown", "statusCodes": [], "codeSignals": [], "defaultRetry": "reconcile-first", "summary": "The available status and code are insufficient to select one safe recovery path.", "whatHappened": "The failure must remain unclassified until the exact runtime, operation, status, and safe code are known.", "likelyCauses": [ "SDK callback omitted a status", "A wrapper replaced the provider error", "Multiple generations use the same informal message", "Only human-readable text was captured" ], "firstChecks": [ "Capture a bounded status, code, runtime, operation, and request ID", "Identify whether the action is a read or state change", "Use the exact API/SDK guide and release version" ], "safeEvidence": [ "Request ID or correlation ID, if returned", "UTC occurrence time, application ID, product, operation, region, and runtime", "HTTP status and a bounded, non-sensitive error code", "Attempt count, timeout, SDK/package version, and release identifier" ], "neverCollect": [ "Keys, tokens, client secrets, Authorization headers, or signed URLs", "Full request URLs when a credential may be in the query string", "Customer payloads, precise-location history, media, or response bodies by default" ], "statelessRecovery": [ "Do not retry until the operation and failure class are known" ], "statefulRecovery": [ "Preserve state and mark outcome unknown", "Reconcile before any replay" ], "links": [ { "label": "Request diagnostics", "href": "/console/logs" }, { "label": "Support", "href": "/support" } ], "samples": [] } ``` ## widget · Places - Identity: `widget:places` - Canonical: https://developer.mappls.com/tools/widgets - State model: stateless-view ```json { "slug": "places", "title": "Places", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "optional-browser-token", "stateModel": "stateless-view", "summary": "Embed one Mappls Pin as an interactive place view.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-places-widget/readme/", "evidenceBoundary": "The official page supplies the iframe path and Pin, token, fullscreen, position, zoom, and pitch parameters. Token issuance and production entitlement remain account-specific." } ``` ## widget · Nearby - Identity: `widget:nearby` - Canonical: https://developer.mappls.com/tools/widgets - State model: stateless-view ```json { "slug": "nearby", "title": "Nearby", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "optional-browser-token", "stateModel": "stateless-view", "summary": "Show categories or keywords around one Mappls Pin.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-nearby-widget/readme/", "evidenceBoundary": "The official page supplies the iframe path and Pin, token, traffic, keyword, fullscreen, and pitch parameters. Category availability remains an acceptance test." } ``` ## widget · EarthView - Identity: `widget:earthview` - Canonical: https://developer.mappls.com/tools/widgets - State model: stateless-view ```json { "slug": "earthview", "title": "EarthView", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "optional-browser-token", "stateModel": "stateless-view", "summary": "Present a Mappls place in a two- or three-dimensional EarthView.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-earthView-widget/readme/", "evidenceBoundary": "The official page supplies the EarthView path, BSMP5 basemap, view, controls, zoom, rotation, details, timeline, and optional token parameters." } ``` ## widget · 3D Metaverse - Identity: `widget:metaverse` - Canonical: https://developer.mappls.com/tools/widgets - State model: stateless-view ```json { "slug": "metaverse", "title": "3D Metaverse", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "optional-browser-token", "stateModel": "stateless-view", "summary": "Embed an interactive 3D venue where Mappls has immersive coverage.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-3D-metaverse-widget/readme/", "evidenceBoundary": "The official page supplies the immersive path and Pin, optional token, place details, shadow, and rotation parameters. Venue coverage must be confirmed independently." } ``` ## widget · Post on Map - Identity: `widget:post-on-map` - Canonical: https://developer.mappls.com/tools/widgets - State model: application-owned-state ```json { "slug": "post-on-map", "title": "Post on Map", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "none-documented", "stateModel": "application-owned-state", "summary": "Open the documented Post on Map contribution surface inside an owned host journey.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-post-on-map/", "evidenceBoundary": "The official page shows the postOnMap iframe path and display parameters. Submission identity, moderation, callbacks, and completion semantics are not inferred by this generator." } ``` ## widget · RealView Auth2 - Identity: `widget:realview` - Canonical: https://developer.mappls.com/tools/widgets - State model: application-owned-state ```json { "slug": "realview", "title": "RealView Auth2", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "required-entitlement-token", "stateModel": "application-owned-state", "summary": "Show entitled panoramic street imagery near a Pin or coordinate.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-realview-widget-auth2/", "evidenceBoundary": "The official Auth2 page marks RealView as an access-controlled paid service and documents the pano iframe, required access_token, distance, control, and inset-map parameters. This lab emits only a placeholder." } ``` ## widget · Add a Place - Identity: `widget:add-a-place` - Canonical: https://developer.mappls.com/tools/widgets - State model: application-owned-state ```json { "slug": "add-a-place", "title": "Add a Place", "surface": "iframe", "buildStatus": "exact-generator", "credentialBoundary": "none-documented", "stateModel": "application-owned-state", "summary": "Collect a place contribution through the Mappls-hosted flow without treating submission UI as publication evidence.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/widgets/mappls-add-a-place/addaplace/", "evidenceBoundary": "The official page and demo establish the addAplace iframe and display parameters. Its examples append the first option with '&'; a dated public probe confirms the conventional '?' query shape succeeds while the documented ampersand path does not. No callback, receipt, moderation-status, withdrawal, or publication contract is documented." } ``` ## widget · mGIS enterprise widgets - Identity: `widget:mgis` - Canonical: https://developer.mappls.com/tools/widgets - State model: enterprise-stateful ```json { "slug": "mgis", "title": "mGIS enterprise widgets", "surface": "javascript-wrapper", "buildStatus": "integration-guide", "credentialBoundary": "company-contract-required", "stateModel": "enterprise-stateful", "summary": "Mount entitled mGIS work views and map widgets through the enterprise JavaScript wrapper.", "officialDocumentationUrl": "https://developer.mappls.com/analytics/mgis-widgets", "evidenceBoundary": "The official page documents widgets.js and MGIS.Widget(container, options), including widgetName, widgetKey, map settings, and workViewName. Keys, work views, tenant data, and lifecycle events belong to the enterprise contract." } ``` ## widget · Native and cross-platform widgets - Identity: `widget:native-widgets` - Canonical: https://developer.mappls.com/tools/widgets - State model: application-owned-state ```json { "slug": "native-widgets", "title": "Native and cross-platform widgets", "surface": "native-sdk", "buildStatus": "integration-guide", "credentialBoundary": "company-contract-required", "stateModel": "application-owned-state", "summary": "Use platform-owned autocomplete, nearby, direction, geofence, tracking, and picker journeys.", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/android/", "evidenceBoundary": "Android, iOS, Flutter, and React Native publish distinct package, lifecycle, permission, and callback contracts. Select an exact platform/version guide; an iframe configuration cannot stand in for native integration." } ``` ## native-widget-platform · Android - Identity: `native-widget-platform:android` - Canonical: https://developer.mappls.com/tools/widgets/native ```json { "slug": "android", "platform": "Android", "documentationVersion": "v2.0.2", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/android/", "repositoryGuideSlugs": [ "mappls-android-sdk", "mappls-android-compose-demo" ], "supportedComponents": [ "Map SDK 9.0.3", "Place Search Widget 3.0.2", "Direction Widget 3.0.1", "Nearby UI Widget 2.0.1", "GeoFence Widget 2.0.0", "Feedback UI 4.0.0" ], "lifecycleOwner": "One Activity, Fragment, or Compose wrapper owns launch, callback registration, saved state, and disposal.", "returnBoundary": "Translate the documented Activity/Fragment result into a small application selection before persisting it.", "cancellationBoundary": "Back, close, process recreation, denied configuration, and an unavailable Activity are distinct outcomes.", "credentialBoundary": "Use the updated post-August-2025 Android configuration files restricted to package and signing identity; never put a server credential in the APK.", "productionChecks": [ "BoM/component versions resolve together", "Debug and release signing identities are separately approved", "Rotation and process death do not duplicate a commit", "Fragment/Activity listeners are removed with their owner" ], "scaffold": { "language": "kotlin", "label": "Kotlin host contract", "code": "data class PlaceSelection(val mapplsPin: String, val label: String)\n\ninterface MapplsPlaceWidget {\n suspend fun selectPlace(): PlaceSelection? // null means deliberate cancellation\n}\n\nclass AddressDraft(private val widget: MapplsPlaceWidget) {\n suspend fun choose(): PlaceSelection? = widget.selectPlace()?.also { selected ->\n require(Regex(\"^[A-Za-z0-9]{6}$\").matches(selected.mapplsPin))\n // Persist through the application repository, not a Fragment reference.\n }\n}" }, "verifiedAt": "2026-08-17" } ``` ## native-widget-platform · iOS - Identity: `native-widget-platform:ios` - Canonical: https://developer.mappls.com/tools/widgets/native ```json { "slug": "ios", "platform": "iOS", "documentationVersion": "v2.0.2", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/ios-sdk/", "repositoryGuideSlugs": [ "mappls-ui-widget-ios-distribution", "mappls-nearby-ui-ios-distribution", "mappls-direction-ui-ios-distribution", "mappls-geofence-ui-ios-distribution" ], "supportedComponents": [ "MapplsUIWidget 2.0.1", "MapplsNearbyUI 2.0.0", "MapplsDirectionUI 2.0.0", "MapplsGeofenceUI 2.0.0", "MapplsFeedbackUIKit 3.0.0", "MapplsMap 6.1.4" ], "lifecycleOwner": "One presenting UIViewController or SwiftUI representable owns presentation, delegate lifetime, dismissal, and cancellation.", "returnBoundary": "Copy the documented delegate result into a Sendable application value before dismissing the provider controller.", "cancellationBoundary": "Interactive dismissal, explicit cancel, delegate error, scene deactivation, and no result are represented separately.", "credentialBoundary": "Bundle only the issued iOS configuration files for the exact bundle identity. Server tokens and cross-application configuration do not belong in the app.", "productionChecks": [ "Swift Package versions match the documented release family", "The delegate cannot outlive its presenting owner", "Interactive dismissal records cancellation once", "Scene restoration never reuses a stale candidate" ], "scaffold": { "language": "swift", "label": "Swift host contract", "code": "struct PlaceSelection: Sendable {\n let mapplsPin: String\n let label: String\n}\n\nprotocol MapplsPlaceWidget: Sendable {\n @MainActor func selectPlace() async throws -> PlaceSelection?\n}\n\n@MainActor\nfunc choose(using widget: any MapplsPlaceWidget) async throws -> PlaceSelection? {\n guard let selected = try await widget.selectPlace() else { return nil }\n precondition(selected.mapplsPin.range(of: #\"^[A-Za-z0-9]{6}$\"#, options: .regularExpression) != nil)\n return selected // Repository commit happens outside the provider controller.\n}" }, "verifiedAt": "2026-08-17" } ``` ## native-widget-platform · Flutter - Identity: `native-widget-platform:flutter` - Canonical: https://developer.mappls.com/tools/widgets/native ```json { "slug": "flutter", "platform": "Flutter", "documentationVersion": "v2.0.1", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/flutter-sdk/", "repositoryGuideSlugs": [ "mappls-flutter-sdk" ], "supportedComponents": [ "Map SDK 2.0.5", "Place Search Widget 2.0.0", "Direction Widget 2.0.0", "Nearby Widget 2.0.0" ], "lifecycleOwner": "One route/widget state owns the MethodChannel launch Future, mounted check, cancellation, and application commit.", "returnBoundary": "Validate the returned platform value, Mappls Pin, and request generation before updating Dart state.", "cancellationBoundary": "A null result, PlatformException, route disposal, background interruption, and user cancellation are not interchangeable.", "credentialBoundary": "Use the platform-specific Android/iOS configuration files associated with the final application identities; Web configuration is a separate browser boundary.", "productionChecks": [ "Android and iOS plugin versions are resolved by one lockfile", "Every awaited result checks mounted/generation", "PlatformException is mapped to a typed UI state", "A late result cannot update a disposed route" ], "scaffold": { "language": "dart", "label": "Dart host contract", "code": "final class PlaceSelection {\n const PlaceSelection(this.mapplsPin, this.label);\n final String mapplsPin;\n final String label;\n}\n\nabstract interface class MapplsPlaceWidget {\n Future selectPlace();\n}\n\nFuture choose(MapplsPlaceWidget widget) async {\n final generation = ++_launchGeneration;\n final selected = await widget.selectPlace();\n if (!mounted || generation != _launchGeneration || selected == null) return;\n if (!RegExp(r'^[A-Za-z0-9]{6}$').hasMatch(selected.mapplsPin)) throw const FormatException('invalid_mappls_pin');\n setState(() => _selected = selected); // Persist through the app repository on submit.\n}" }, "verifiedAt": "2026-08-17" } ``` ## native-widget-platform · React Native - Identity: `native-widget-platform:react-native` - Canonical: https://developer.mappls.com/tools/widgets/native ```json { "slug": "react-native", "platform": "React Native", "documentationVersion": "v2.0.0", "officialDocumentationUrl": "https://developer.mappls.com/documentation/sdk/react-native-sdk/", "repositoryGuideSlugs": [ "mappls-react-native-sdk" ], "supportedComponents": [ "Map SDK 2.0.2", "Place Search Widget 2.0.0", "Direction Widget 2.0.1", "Nearby UI Widget 2.0.0", "GeoFence Widget 2.0.0" ], "lifecycleOwner": "One focused screen owns the native Promise, bridge generation, AppState changes, cancellation, and normalized JavaScript result.", "returnBoundary": "Parse unknown bridge data into a versioned TypeScript value; do not store an opaque native result object.", "cancellationBoundary": "Promise rejection, native cancellation, screen blur/unmount, bridge reload, and malformed data are typed separately.", "credentialBoundary": "Configure both native applications with their own issued files and identities. No privileged REST credential belongs in JavaScript or the bundle.", "productionChecks": [ "Public repository and developer-documentation version drift is resolved before dependency pinning", "Peer native SDK versions are compatible", "Only the focused mounted screen accepts a Promise result", "Bridge data is schema-validated", "Fast Refresh and native recreation do not double-commit" ], "scaffold": { "language": "typescript", "label": "TypeScript host contract", "code": "type PlaceSelection = { version: 1; mapplsPin: string; label: string };\n\ninterface MapplsPlaceWidget {\n selectPlace(): Promise;\n}\n\nasync function choose(widget: MapplsPlaceWidget, generation: number) {\n const value = await widget.selectPlace();\n if (!isFocused() || generation !== currentGeneration()) return;\n if (!isPlaceSelection(value)) throw new Error(\"invalid_widget_result\");\n commitCandidate(value); // Store normalized data, never the opaque native object.\n}\n\nfunction isPlaceSelection(value: unknown): value is PlaceSelection {\n const item = value as Partial | null;\n return item?.version === 1 && /^[A-Za-z0-9]{6}$/.test(item.mapplsPin ?? \"\") && typeof item.label === \"string\";\n}" }, "verifiedAt": "2026-08-17", "repositoryObservation": { "documentationVersion": "v2.0.1", "supportedComponents": [ "Map SDK 2.0.3", "Place Search Widget 2.0.1", "Direction Widget 2.0.2", "Nearby UI Widget 2.0.1", "GeoFence Widget 2.0.1" ], "sourceUrl": "https://github.com/mappls-api/mappls-react-native-sdk", "observedAt": "2026-08-17", "boundary": "The public repository main branch is newer than the current developer-documentation root. Confirm the released package, native peer versions, and selected widget guide before pinning dependencies." } } ``` ## native-widget-capability · Place search and picker - Identity: `native-widget-capability:place-search` - Canonical: https://developer.mappls.com/tools/widgets/native - State model: selection ```json { "slug": "place-search", "title": "Place search and picker", "stateModel": "selection", "durableIdentity": "Mappls Pin plus application-owned display label", "platforms": { "android": { "availability": "published", "component": "Place Search Widget", "version": "3.0.2", "documentationUrl": "https://developer.mappls.com/documentation/sdk/android/" }, "ios": { "availability": "published", "component": "MapplsUIWidget", "version": "2.0.1", "documentationUrl": "https://developer.mappls.com/documentation/sdk/ios-sdk/" }, "flutter": { "availability": "published", "component": "Place Search Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/flutter-sdk/" }, "react-native": { "availability": "published", "component": "Place Search Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/react-native-sdk/" } } } ``` ## native-widget-capability · Nearby discovery - Identity: `native-widget-capability:nearby` - Canonical: https://developer.mappls.com/tools/widgets/native - State model: session ```json { "slug": "nearby", "title": "Nearby discovery", "stateModel": "session", "durableIdentity": "Query/category generation plus selected Mappls Pin", "platforms": { "android": { "availability": "published", "component": "Nearby UI Widget", "version": "2.0.1", "documentationUrl": "https://developer.mappls.com/documentation/sdk/android/" }, "ios": { "availability": "published", "component": "MapplsNearbyUI", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/ios-sdk/" }, "flutter": { "availability": "published", "component": "Nearby Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/flutter-sdk/docs/v2.0.0/Nearby-Widget/" }, "react-native": { "availability": "published", "component": "Nearby UI Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/react-native-sdk/docs/v2.0.0/Nearby-Widget/" } } } ``` ## native-widget-capability · Directions UI - Identity: `native-widget-capability:directions` - Canonical: https://developer.mappls.com/tools/widgets/native - State model: session ```json { "slug": "directions", "title": "Directions UI", "stateModel": "session", "durableIdentity": "Application route request/revision identity; provider UI is not a navigation session", "platforms": { "android": { "availability": "published", "component": "Direction Widget", "version": "3.0.1", "documentationUrl": "https://developer.mappls.com/documentation/sdk/android/" }, "ios": { "availability": "published", "component": "MapplsDirectionUI", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/ios-sdk/" }, "flutter": { "availability": "published", "component": "Direction Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/flutter-sdk/" }, "react-native": { "availability": "published", "component": "Direction Widget", "version": "2.0.1", "documentationUrl": "https://developer.mappls.com/documentation/sdk/react-native-sdk/" } } } ``` ## native-widget-capability · Geofence editor - Identity: `native-widget-capability:geofence` - Canonical: https://developer.mappls.com/tools/widgets/native - State model: draft ```json { "slug": "geofence", "title": "Geofence editor", "stateModel": "draft", "durableIdentity": "Versioned application geofence draft and provider rule identity after separate publication", "platforms": { "android": { "availability": "published", "component": "GeoFence Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/android/" }, "ios": { "availability": "published", "component": "MapplsGeofenceUI", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/ios-sdk/" }, "flutter": { "availability": "not-listed-in-current-overview", "component": null, "version": null, "documentationUrl": "https://developer.mappls.com/documentation/sdk/flutter-sdk/" }, "react-native": { "availability": "published", "component": "GeoFence Widget", "version": "2.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/react-native-sdk/docs/v2.0.0/Geofence-Widget/" } } } ``` ## native-widget-capability · Feedback UI - Identity: `native-widget-capability:feedback` - Canonical: https://developer.mappls.com/tools/widgets/native - State model: draft ```json { "slug": "feedback", "title": "Feedback UI", "stateModel": "draft", "durableIdentity": "Application feedback draft and attributable submission/reconciliation identity", "platforms": { "android": { "availability": "published", "component": "Feedback UI", "version": "4.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/android/" }, "ios": { "availability": "published", "component": "MapplsFeedbackUIKit", "version": "3.0.0", "documentationUrl": "https://developer.mappls.com/documentation/sdk/ios-sdk/" }, "flutter": { "availability": "not-listed-in-current-overview", "component": null, "version": null, "documentationUrl": "https://developer.mappls.com/documentation/sdk/flutter-sdk/" }, "react-native": { "availability": "not-listed-in-current-overview", "component": null, "version": null, "documentationUrl": "https://developer.mappls.com/documentation/sdk/react-native-sdk/" } } } ``` ## deep-link-intent · Start navigation - Identity: `deep-link-intent:navigation` - Canonical: https://developer.mappls.com/tools/deep-links ```json { "slug": "navigation", "title": "Start navigation", "summary": "Hand a validated destination to Mappls navigation through an HTTPS universal link, with an optional installed-app URI.", "fields": [ "latitude", "longitude", "destinationName", "mode" ] } ``` ## deep-link-intent · Share a Mappls Pin - Identity: `deep-link-intent:share-place` - Canonical: https://developer.mappls.com/tools/deep-links ```json { "slug": "share-place", "title": "Share a Mappls Pin", "summary": "Open one stable six-character Mappls place identity without coordinates or a credential in the URL.", "fields": [ "mapplsPin" ] } ``` ## deep-link-intent · Open a point on map - Identity: `deep-link-intent:point-on-map` - Canonical: https://developer.mappls.com/tools/deep-links ```json { "slug": "point-on-map", "title": "Open a point on map", "summary": "Open one validated latitude/longitude point using the documented point-on-map route.", "fields": [ "latitude", "longitude" ] } ``` ## deep-link-intent · Get a Mappls Pin - Identity: `deep-link-intent:get-pin` - Canonical: https://developer.mappls.com/tools/deep-links ```json { "slug": "get-pin", "title": "Get a Mappls Pin", "summary": "Open the documented signed-in Mappls flow for creating or retrieving a Mappls Pin.", "fields": [] } ``` ## environment · Local fixture - Identity: `environment:local-fixture` - Canonical: https://developer.mappls.com/environments ```json { "slug": "local-fixture", "kind": "execution-mode", "title": "Local fixture", "purpose": "Learn contracts, build UI states, and prove hostile paths without a provider credential or network call.", "identity": "No provider application identity. Use deterministic fixture identities that can never be confused with provider evidence.", "traffic": "Fixture only", "exitEvidence": [ "Success, empty, validation, authentication, throttling, timeout, and unavailable paths are deterministic", "No credential or provider payload appears in source, logs, screenshots, URLs, or archives", "The live adapter is disabled by default and fails closed when configuration is absent" ] } ``` ## environment · Development - Identity: `environment:development` - Canonical: https://developer.mappls.com/environments ```json { "slug": "development", "kind": "control-plane-environment", "title": "Development", "purpose": "Prove one narrow integration against a separately provisioned non-production identity.", "identity": "Dedicated development project, application, credential, entitlement, region, quota, logs, and callback boundary.", "traffic": "Synthetic and approved test data", "exitEvidence": [ "One exact runtime path and product set is active", "A restricted credential produces an attributable successful request", "Negative, quota, teardown, and stateful reconciliation paths are proven" ] } ``` ## environment · Staging - Identity: `environment:staging` - Canonical: https://developer.mappls.com/environments ```json { "slug": "staging", "kind": "control-plane-environment", "title": "Staging", "purpose": "Rehearse the production journey with production-like topology and isolated identities.", "identity": "Dedicated staging application and secrets; never a production credential copied into a pre-production host.", "traffic": "Synthetic or explicitly approved representative data", "exitEvidence": [ "Release candidate, configuration schema, region, quotas, and dependency versions are frozen", "Stateful events, duplicate delivery, timeout reconciliation, and recovery are exercised end to end", "Monitoring, alerts, owner escalation, rollback, and support evidence are rehearsed" ] } ``` ## environment · Production - Identity: `environment:production` - Canonical: https://developer.mappls.com/environments ```json { "slug": "production", "kind": "control-plane-environment", "title": "Production", "purpose": "Serve approved real workloads under the independently reviewed release contract.", "identity": "Dedicated production project, application, least-privilege credential, entitlement, region, quotas, owners, and audit trail.", "traffic": "Approved production data only", "exitEvidence": [ "Product, security, operations, and required finance authorities approved immutable evidence", "Progressive rollout, live health signals, rollback trigger, and accountable owners are active", "Provider binding, entitlement, inventory, metering, webhook, and audit evidence reconcile" ] } ``` ## agent-pattern · Developer integration assistant - Identity: `agent-pattern:developer-research` - Canonical: https://developer.mappls.com/ai/agents#developer-research ```json { "slug": "developer-research", "title": "Developer integration assistant", "industry": "Software platforms", "scenario": "A platform engineer asks which Mappls runtime, authentication path, SDK, and state model fit a multi-channel mobility product before any account is connected.", "outcome": "A cited implementation plan with exact contracts, quickstarts, source fingerprints, unresolved entitlement questions, and no provider call.", "recommendedMode": "offline", "offlineTools": [ "mappls_find_documentation", "mappls_plan_solution", "mappls_get_quickstart", "mappls_get_source_launchpad", "mappls_get_api_contract", "mappls_get_sdk", "mappls_get_authentication_path", "mappls_plan_environment", "mappls_diagnose_error" ], "liveTools": [], "resources": [ "mappls://catalog/documentation", "mappls://catalog/source-launchpads", "mappls://catalog/solution-plans", "mappls://catalog/authentication", "mappls://catalog/environments" ], "humanBoundary": "A developer selects the final product generation, account entitlement, credential path, and release target; the agent cannot provision or approve them.", "stateBoundary": "Research results are disposable context. Accepted architecture decisions belong in versioned application documentation and release evidence.", "sampleSlug": "spatial-agent", "tutorialSlug": "mappls-mcp-agent", "acceptance": [ "Every proposed API or SDK resolves to catalog evidence", "Unknown package, entitlement, and region questions remain explicit", "No provider credential, payload, or invented endpoint enters the conversation" ] } ``` ## agent-pattern · Place discovery concierge - Identity: `agent-pattern:place-concierge` - Canonical: https://developer.mappls.com/ai/agents#place-concierge ```json { "slug": "place-concierge", "title": "Place discovery concierge", "industry": "Retail, healthcare, travel", "scenario": "A hospital network or marketplace helps a user find a relevant, open, nearby destination while preserving the user's location choice and the returned Mappls identity.", "outcome": "A short, explainable set of provider-backed places with distance context, ambiguity handling, and a browser or app handoff.", "recommendedMode": "live-read", "offlineTools": [ "mappls_find_documentation", "mappls_build_deep_link", "mappls_get_authentication_path", "mappls_diagnose_error" ], "liveTools": [ "mappls_search_autosuggest", "mappls_search_nearby", "mappls_geocode", "mappls_reverse_geocode" ], "resources": [ "mappls://catalog/contracts", "mappls://catalog/deep-links", "mappls://guides/agent-safety" ], "humanBoundary": "The user confirms precise-location use and the selected destination. The agent may retrieve and rank places but cannot silently begin navigation or share location onward.", "stateBoundary": "Store consent, purpose, Mappls Pin, selection, and expiry in application state; do not treat chat history as the consent or place ledger.", "sampleSlug": "store-locator", "tutorialSlug": "nearby-discovery", "acceptance": [ "Ambiguous intent produces a clarification instead of a guessed coordinate", "Every recommendation preserves the returned Mappls identity and provenance", "Consent denial and no-result paths remain useful and non-coercive" ] } ``` ## agent-pattern · Route decision assistant - Identity: `agent-pattern:route-decision` - Canonical: https://developer.mappls.com/ai/agents#route-decision ```json { "slug": "route-decision", "title": "Route decision assistant", "industry": "Mobility, logistics, tourism", "scenario": "A traveller, dispatcher, or delivery customer compares route options and receives a handoff without the assistant representing a calculated route as a live navigation session.", "outcome": "Origin and destination are resolved, alternatives are compared against declared constraints, and the chosen destination is handed to an approved navigation surface.", "recommendedMode": "live-read", "offlineTools": [ "mappls_plan_solution", "mappls_build_deep_link", "mappls_get_api_contract", "mappls_diagnose_error" ], "liveTools": [ "mappls_search_autosuggest", "mappls_geocode", "mappls_route", "mappls_route_matrix" ], "resources": [ "mappls://catalog/contracts", "mappls://catalog/deep-links", "mappls://guides/agent-safety" ], "humanBoundary": "A person confirms endpoints, travel mode, and the final route or handoff. Any dispatch, booking, reroute, or navigation start remains outside this read-only MCP surface.", "stateBoundary": "Persist the requested constraints, resolved place identities, route response identity, choice, and expiry outside the model so a later turn cannot silently alter them.", "sampleSlug": "trip-planner", "tutorialSlug": "route-preview", "acceptance": [ "The selected route is traceable to confirmed endpoints and constraints", "Stale or materially changed route evidence triggers a new read", "The UI distinguishes route calculation, recommendation, and navigation handoff" ] } ``` ## agent-pattern · Fleet operations copilot - Identity: `agent-pattern:fleet-operations` - Canonical: https://developer.mappls.com/ai/agents#fleet-operations ```json { "slug": "fleet-operations", "title": "Fleet operations copilot", "industry": "Transport, cold chain, emergency response", "scenario": "An operator investigates a delayed refrigerated vehicle, reads asset and trip evidence, compares recovery routes, and prepares an intervention for human authorization.", "outcome": "A time-bounded operational brief separates observed telemetry, inferred risk, recommended response, and the person accountable for the decision.", "recommendedMode": "live-read", "offlineTools": [ "mappls_plan_stateful_integration", "mappls_get_event_contract", "mappls_get_industry_blueprint", "mappls_diagnose_error" ], "liveTools": [ "mappls_asset_status", "mappls_asset_events", "mappls_geofence_activity", "mappls_trip_status", "mappls_route" ], "resources": [ "mappls://catalog/stateful", "mappls://catalog/events", "mappls://guides/stateful-operations", "mappls://guides/agent-safety" ], "humanBoundary": "The copilot can inspect and recommend. Dispatch, driver contact, geofence change, trip mutation, incident closure, and customer notification require an attributable operator in the owning system.", "stateBoundary": "Trip, asset, incident, recommendation, approval, and action are durable versioned aggregates. Telemetry event time and receipt time remain distinct from model-generated analysis.", "sampleSlug": "delivery-control-tower", "tutorialSlug": "intouch-trip-lifecycle", "acceptance": [ "The brief labels observed, derived, and missing evidence", "Out-of-order telemetry cannot overwrite newer known state", "Every operational recommendation has an owner, expiry, and explicit non-execution boundary" ] } ``` ## agent-pattern · Field operations analyst - Identity: `agent-pattern:field-operations` - Canonical: https://developer.mappls.com/ai/agents#field-operations ```json { "slug": "field-operations", "title": "Field operations analyst", "industry": "Utilities, construction, insurance, public safety", "scenario": "A control room triages a service incident, locates a qualified crew, plans travel, and prepares a task pack while technicians retain control over arrival and completion evidence.", "outcome": "A grounded task recommendation joins place, route, workforce, and journey evidence without allowing generated prose to become operational truth.", "recommendedMode": "live-read", "offlineTools": [ "mappls_plan_solution", "mappls_plan_stateful_integration", "mappls_get_journey_blueprint", "mappls_get_event_contract", "mappls_diagnose_error" ], "liveTools": [ "mappls_search_nearby", "mappls_route", "mappls_route_matrix", "mappls_asset_status" ], "resources": [ "mappls://catalog/use-cases", "mappls://catalog/journeys", "mappls://catalog/events", "mappls://guides/stateful-operations" ], "humanBoundary": "A dispatcher approves assignment; the technician supplies arrival and field proof; an independent reviewer accepts consequential completion. The agent does none of those writes.", "stateBoundary": "Incident, task, assignment, visit, proof, review, and reconciliation are application-owned aggregates with idempotent commands and immutable evidence references.", "sampleSlug": "field-service", "tutorialSlug": "workmate-proof-review", "acceptance": [ "Candidate ranking cannot assign a worker", "Location and skill evidence are fresh enough for the stated purpose", "Completion remains pending until required human and source evidence reconcile" ] } ``` ## agent-pattern · Compatibility and release reviewer - Identity: `agent-pattern:release-review` - Canonical: https://developer.mappls.com/ai/agents#release-review ```json { "slug": "release-review", "title": "Compatibility and release reviewer", "industry": "Platform engineering, automotive, regulated enterprise", "scenario": "A release team evaluates an SDK upgrade or offline navigation package using repository lifecycle, migration, environment, and rollback evidence before independent authorities decide.", "outcome": "A conservative release dossier identifies source drift, compatibility unknowns, test gaps, environment blockers, and exact evidence still needed.", "recommendedMode": "offline", "offlineTools": [ "mappls_get_release_intelligence", "mappls_get_sdk", "mappls_get_migration", "mappls_plan_environment", "mappls_diagnose_error" ], "liveTools": [], "resources": [ "mappls://catalog/releases", "mappls://catalog/sdks", "mappls://catalog/migrations", "mappls://catalog/environments" ], "humanBoundary": "The agent summarizes evidence but cannot assert package availability, compatibility, entitlement, production approval, deployment, or cutover. Exact assigned authorities decide the frozen release record.", "stateBoundary": "Artifacts, digests, test runs, reviewer identities, decisions, deployment, and post-release evidence stay in governed release systems—not conversation memory.", "sampleSlug": "offline-release-control", "tutorialSlug": "offline-package-update", "acceptance": [ "Repository activity is never promoted into compatibility or support", "Every unknown maps to an owner and executable acceptance check", "Approval, deployment, traffic cutover, and post-release verification remain distinct states" ] } ``` ## marketing-evidence · APIs - Identity: `marketing-evidence:api-breadth` - Canonical: https://developer.mappls.com/why-mappls ```json { "id": "api-breadth", "metric": "120+", "label": "APIs", "claim": "A broad API and SDK surface for maps, location, telematics, analytics, and digital transformation.", "explanation": "The official Mappls API overview describes more than 120 APIs spanning the core developer and enterprise location stack.", "sourceLabel": "Mappls API & SDK overview", "sourceUrl": "https://about.mappls.com/api/", "verifiedOn": "2026-08-16", "category": "platform" } ``` ## marketing-evidence · countries supported - Identity: `marketing-evidence:global-coverage` - Canonical: https://developer.mappls.com/why-mappls ```json { "id": "global-coverage", "metric": "238", "label": "countries supported", "claim": "Build global maps, search, routing, tracking, optimization, and analytics experiences.", "explanation": "Mappls' official Global APIs page states that its global APIs and SDKs are available across 238 nations.", "sourceLabel": "Mappls Global APIs", "sourceUrl": "https://about.mappls.com/api/global-api/", "verifiedOn": "2026-08-16", "category": "reach" } ``` ## marketing-evidence · developers - Identity: `marketing-evidence:developer-community` - Canonical: https://developer.mappls.com/why-mappls ```json { "id": "developer-community", "metric": "200,000+", "label": "developers", "claim": "Join a large developer community already building with the Mappls platform.", "explanation": "The official Mappls API overview reports a developer community of more than 200,000.", "sourceLabel": "Mappls API & SDK overview", "sourceUrl": "https://about.mappls.com/api/", "verifiedOn": "2026-08-16", "category": "scale" } ``` ## marketing-evidence · SaaS platforms - Identity: `marketing-evidence:saas-platforms` - Canonical: https://developer.mappls.com/why-mappls ```json { "id": "saas-platforms", "metric": "5+", "label": "SaaS platforms", "claim": "Move beyond individual calls into operational products for tracking, field work, GIS, and analytics.", "explanation": "The official Mappls developer platform overview describes more than five SaaS platforms alongside its API portfolio.", "sourceLabel": "Mappls API & SDK overview", "sourceUrl": "https://about.mappls.com/api/", "verifiedOn": "2026-08-16", "category": "platform" } ``` ## marketing-evidence · mapping heritage - Identity: `marketing-evidence:mapping-heritage` - Canonical: https://developer.mappls.com/why-mappls ```json { "id": "mapping-heritage", "metric": "Since 1995", "label": "mapping heritage", "claim": "Develop on technology shaped by decades of geospatial work in India and around the world.", "explanation": "Mappls' official company profile describes C.E. Info Systems as a publicly listed, India-headquartered deep-tech company pursuing geospatial transformation since 1995.", "sourceLabel": "About Mappls", "sourceUrl": "https://about.mappls.com/about/", "verifiedOn": "2026-08-16", "category": "company" } ``` ## marketing-evidence · deployment choice - Identity: `marketing-evidence:deployment-and-privacy` - Canonical: https://developer.mappls.com/why-mappls ```json { "id": "deployment-and-privacy", "metric": "Cloud + on-prem", "label": "deployment choice", "claim": "Match location infrastructure to enterprise architecture and data-boundary requirements.", "explanation": "The official API overview describes cloud and on-premise deployment options, data-privacy commitments, encryption, versioning, and developer support. Exact controls remain product- and contract-specific.", "sourceLabel": "Mappls API & SDK overview", "sourceUrl": "https://about.mappls.com/api/", "verifiedOn": "2026-08-16", "category": "trust" } ``` ## developer-platform-release · Agent interoperability and evidence-led developer experience - Identity: `developer-platform-release:2026.08.18-ai-dx` - Canonical: https://developer.mappls.com/changelog#2026.08.18-ai-dx ```json { "id": "2026.08.18-ai-dx", "version": "2026.08.18", "date": "2026-08-18", "title": "Agent interoperability and evidence-led developer experience", "summary": "Added a deployable A2A service and journey studio, a source-linked developer-experience benchmark, version-bound documentation feedback, and clean PostgreSQL 16/17 release evidence.", "changes": [ { "kind": "added", "title": "Deployable A2A service and journey studio", "description": "Published offline and governed live-read A2A profiles, Agent Card discovery, JSON-RPC and HTTP bindings, durable task recovery, complete coordination journeys, and a checksummed mini-application.", "href": "/ai/a2a" }, { "kind": "added", "title": "Developer-experience benchmark", "description": "Turned current official Stripe, Google, and Apple interaction patterns into twenty repository-backed Mappls regression controls while preserving the anonymous-live-sandbox gap.", "href": "/benchmark" }, { "kind": "changed", "title": "Version-bound documentation feedback", "description": "Connected every searchable page revision to privacy-minimized helpfulness evidence and an independently reviewed correction handoff without claiming publication.", "href": "/coverage" }, { "kind": "operations", "title": "PostgreSQL 16 and 17 compatibility evidence", "description": "Verified all checksum-locked migrations, real-role isolation, append-only controls, command journeys, and runtime query serialization on clean external PostgreSQL 16 and 17 clusters.", "href": "/trust" } ] } ``` ## developer-platform-release · Production operations and public trust - Identity: `developer-platform-release:2026.08.17-operations` - Canonical: https://developer.mappls.com/changelog#2026.08.17-operations ```json { "id": "2026.08.17-operations", "version": "2026.08.17", "date": "2026-08-17", "title": "Production operations and public trust", "summary": "Added governed service-level objectives, multi-service incidents, immutable evidence timelines, public status publication, and append-only postmortems.", "changes": [ { "kind": "operations", "title": "Public status and incident evidence", "description": "Published component health, active incidents, durable updates, resolution evidence, and postmortem boundaries without exposing tenant or operator data.", "href": "/status" }, { "kind": "security", "title": "One-way public projection", "description": "Separated authenticated administration from a function-owned, redacted public reader so status publication cannot become a control-plane write path.", "href": "/trust" }, { "kind": "added", "title": "Source lifecycle registry", "description": "Classified every public source, pinned its snapshot fingerprint, and attached conservative compatibility and migration actions.", "href": "/changelog?view=sources" }, { "kind": "added", "title": "Runnable contract-generation migrations", "description": "Added one checksummed offline workbench for every exact InTouch and mGIS transition, with eight adapter languages, target-only projection, fixture tests, acceptance evidence, and rollback.", "href": "/api-generations" } ] } ``` ## developer-platform-release · Governed developer and administrator control planes - Identity: `developer-platform-release:2026.08.16-control-plane` - Canonical: https://developer.mappls.com/changelog#2026.08.16-control-plane ```json { "id": "2026.08.16-control-plane", "version": "2026.08.16", "date": "2026-08-16", "title": "Governed developer and administrator control planes", "summary": "Connected onboarding, applications, credentials, usage, billing, alerts, webhooks, access review, release evidence, and administrative provisioning to auditable lifecycle controls.", "changes": [ { "kind": "added", "title": "Developer console", "description": "Added organization, application, environment, credential, usage, alert, billing, webhook, and evidence workflows with explicit ownership boundaries.", "href": "/console" }, { "kind": "security", "title": "Independent release approvals", "description": "Bound immutable gate evidence to independent product, security, operations, and conditional finance reviewers with optimistic concurrency.", "href": "/admin" }, { "kind": "operations", "title": "Replay-safe operations", "description": "Added durable lifecycle evidence, idempotent commands, observable delivery state, reconciliation, and production-readiness gates for stateful workflows.", "href": "/tools/stateful" } ] } ``` ## developer-platform-release · Unified docs, samples, builders, and AI surface - Identity: `developer-platform-release:2026.08.15-build-surface` - Canonical: https://developer.mappls.com/changelog#2026.08.15-build-surface ```json { "id": "2026.08.15-build-surface", "version": "2026.08.15", "date": "2026-08-15", "title": "Unified docs, samples, builders, and AI surface", "summary": "Established the source-grounded documentation corpus, progressive learning system, downloadable applications, deterministic builders, and credential-safe MCP discovery plane.", "changes": [ { "kind": "added", "title": "Platform and solution paths", "description": "Connected platform quickstarts, tutorials, use cases, stateful journeys, event contracts, migration tracks, and downloadable starter applications.", "href": "/docs" }, { "kind": "added", "title": "Credential-safe builders", "description": "Added deterministic API, deep-link, widget, native-widget, mGIS, automotive, and vision planning surfaces with explicit evidence gaps.", "href": "/tools" }, { "kind": "added", "title": "Agent-readable catalog", "description": "Exposed offline MCP tools and resources for source-grounded discovery and planning while keeping provider credentials outside model context.", "href": "/ai" } ] } ``` ## search-destination · Mappls API Client Studio - Identity: `search-destination:SDK & guide:sdk-guide:api-client-studio` - Canonical: https://developer.mappls.com/client-libraries ```json { "id": "sdk-guide:api-client-studio", "kind": "SDK & guide", "title": "Mappls API Client Studio", "description": "Download eight source-grounded contract-client packages with exact operation identities, generation metadata, fixture-first tests, checksums, and explicit live-transport qualification boundaries.", "href": "/client-libraries", "eyebrow": "8 languages · 1,296 exact bindings", "keywords": "API client generated library TypeScript Python Java Kotlin C# Go PHP Ruby fixture checksum source fingerprint" } ``` ## search-destination · Mappls developer-experience benchmark - Identity: `search-destination:Solution:solution:developer-experience-benchmark` - Canonical: https://developer.mappls.com/benchmark ```json { "id": "solution:developer-experience-benchmark", "kind": "Solution", "title": "Mappls developer-experience benchmark", "description": "Inspect the twenty repository-backed developer-experience criteria, current official Stripe, Google Maps, and Apple comparison patterns, exact proof metrics, and one explicit external sandbox gate.", "href": "/benchmark", "eyebrow": "20 evidenced criteria · official-source comparison", "keywords": "developer experience benchmark scorecard Stripe Google Maps Apple Developer onboarding documentation sample code AI native sandbox trust evidence" } ``` ## search-destination · Mappls solution architect - Identity: `search-destination:Solution:solution:solution-architect` - Canonical: https://developer.mappls.com/architect ```json { "id": "solution:solution-architect", "kind": "Solution", "title": "Mappls solution architect", "description": "Compose an evidence-bounded product, platform, contract, journey, tutorial, and runnable-app plan from a real industry scenario.", "href": "/architect", "eyebrow": "Interactive architecture planner", "keywords": "capability explorer API picker industry platform stateless stateful build plan architecture" } ``` ## search-destination · Mappls product × platform capability matrix - Identity: `search-destination:Platform:platform:product-platform-capability-matrix` - Canonical: https://developer.mappls.com/platforms/matrix ```json { "id": "platform:product-platform-capability-matrix", "kind": "Platform", "title": "Mappls product × platform capability matrix", "description": "Compare every Mappls product across every REST, web, native, hybrid, embedded, widget, deep-link, and MCP platform without inferring availability from adjacent evidence.", "href": "/platforms/matrix", "eyebrow": "130 exact decision records · honest not-listed cells", "keywords": "product platform matrix compatibility availability support SDK API runtime REST Web Android iOS Flutter React Native Cordova Xamarin Linux Automotive Widgets Deep links MCP selection required" } ``` ## search-destination · Mappls Capability Qualification Center - Identity: `search-destination:Platform:platform:capability-qualification-center` - Canonical: https://developer.mappls.com/platforms/qualify ```json { "id": "platform:capability-qualification-center", "kind": "Platform", "title": "Mappls Capability Qualification Center", "description": "Turn any product-platform decision into a source lock, runtime and authentication choice, offline proof, non-production conformance plan, hostile-path suite, and independent release handoff.", "href": "/platforms/qualify", "eyebrow": "130 portable qualification journeys · 43 evidence-ready", "keywords": "capability qualification conformance compatibility test entitlement source lock credential class fixture non-production hostile path stateful replay unknown outcome release evidence download JSON" } ``` ## search-destination · Mappls Live Conformance Center - Identity: `search-destination:Platform:platform:live-conformance-center` - Canonical: https://developer.mappls.com/conformance ```json { "id": "platform:live-conformance-center", "kind": "Platform", "title": "Mappls Live Conformance Center", "description": "Plan eight bounded non-production reads, keep credentials and provider bodies inside a trusted runner, inspect canonical reports locally, and prepare digest-bound release evidence.", "href": "/conformance", "eyebrow": "8 allowlisted reads · 10 product-family boundaries", "keywords": "live conformance entitlement proof non-production read only report inspector SHA-256 release evidence search route matrix InTouch credential safe" } ``` ## search-destination · Mappls integration manifests - Identity: `search-destination:Solution:solution:integration-manifests` - Canonical: https://developer.mappls.com/integration-manifests ```json { "id": "solution:integration-manifests", "kind": "Solution", "title": "Mappls integration manifests", "description": "Generate a portable, deterministic integration decision binding platform, products, authentication generations, exact source-fingerprinted operations, journeys, runnable proof, and release gates.", "href": "/integration-manifests", "eyebrow": "624 reviewable integration contracts · zero provider calls", "keywords": "integration manifest lock file CI source fingerprint contract authentication generation platform journey reproducible download JSON" } ``` ## search-destination · Mappls Developer Academy - Identity: `search-destination:Tutorial:tutorial:developer-academy` - Canonical: https://developer.mappls.com/academy ```json { "id": "tutorial:developer-academy", "kind": "Tutorial", "title": "Mappls Developer Academy", "description": "Build one progressive curriculum from industry outcome, exact platform, and entry experience through source evidence, code labs, hostile journeys, a tested capstone, and production acceptance.", "href": "/academy", "eyebrow": "624 personalized curricula · 21 capstones", "keywords": "academy learning path curriculum beginner intermediate advanced training capstone tutorial industry platform production readiness no credential" } ``` ## search-destination · Mappls credential-free API sandbox - Identity: `search-destination:Platform:platform:api-sandbox` - Canonical: https://developer.mappls.com/sandbox ```json { "id": "platform:api-sandbox", "kind": "Platform", "title": "Mappls credential-free API sandbox", "description": "Execute every normalized contract against deterministic success, empty, validation, authentication, rate-limit, and unavailable fixtures before connecting a live account.", "href": "/sandbox", "eyebrow": "162 contracts · 6 fixture scenarios", "keywords": "sandbox mock fixture try it API success empty 401 429 503 no credential source example" } ``` ## search-destination · Mappls API generation comparisons - Identity: `search-destination:API generation:api-generation:contract-generation-ledger` - Canonical: https://developer.mappls.com/api-generations ```json { "id": "api-generation:contract-generation-ledger", "kind": "API generation", "title": "Mappls API generation comparisons", "description": "Compare exact retained InTouch and mGIS source generations, structural changes, compatibility signals, fingerprints, and application-owned migration checklists.", "href": "/api-generations", "eyebrow": "17 version transitions · no support inference", "keywords": "API version contract generation migration compatibility breaking change OpenAPI source fingerprint InTouch mGIS" } ``` ## search-destination · Mappls SDK and distribution center - Identity: `search-destination:SDK & guide:sdk-guide:sdk-directory` - Canonical: https://developer.mappls.com/sdks ```json { "id": "sdk-guide:sdk-directory", "kind": "SDK & guide", "title": "Mappls SDK and distribution center", "description": "Compare every public SDK and binary distribution by platform, lifecycle, install evidence, source activity, migration risk, and local correspondence before selecting a package.", "href": "/sdks", "eyebrow": "58 source-backed records · 7 platforms", "keywords": "SDK library package binary distribution compatibility install Android iOS Flutter React Native Web Cordova" } ``` ## search-destination · Mappls authentication and credential center - Identity: `search-destination:Platform:platform:authentication-center` - Canonical: https://developer.mappls.com/authentication ```json { "id": "platform:authentication-center", "kind": "Platform", "title": "Mappls authentication and credential center", "description": "Choose, place, restrict, rotate, revoke, and troubleshoot the correct credential generation across trusted servers, browser, mobile, widgets, devices, enterprise surfaces, and MCP.", "href": "/authentication", "eyebrow": "14 paths · fail-closed placement advisor", "keywords": "authentication credentials static key OAuth bearer public key origin package signing bundle rotation revocation MCP InTouch" } ``` ## search-destination · Mappls errors and diagnostics center - Identity: `search-destination:Platform:platform:error-diagnostics-center` - Canonical: https://developer.mappls.com/errors ```json { "id": "platform:error-diagnostics-center", "kind": "Platform", "title": "Mappls errors and diagnostics center", "description": "Classify failures by safe status, code, runtime, and operation safety; choose fix, retry, or reconciliation; and build a credential-safe support packet.", "href": "/errors", "eyebrow": "11 recovery classes · retry-safe classifier", "keywords": "error diagnostics status request ID 401 403 409 429 500 503 504 retry timeout unknown outcome reconcile support" } ``` ## search-destination · Mappls Developer Console webhook receiver guide - Identity: `search-destination:Platform:platform:webhook-receiver-guide` - Canonical: https://developer.mappls.com/webhooks ```json { "id": "platform:webhook-receiver-guide", "kind": "Platform", "title": "Mappls Developer Console webhook receiver guide", "description": "Verify signed raw bodies, prove destination ownership, deduplicate durable effects, preserve ordering, survive bounded retries, and operate independently approved replay.", "href": "/webhooks", "eyebrow": "4 signed topics · 4 receiver languages", "keywords": "webhook HMAC SHA256 signature raw body challenge retry ordering deduplication idempotency replay TypeScript Python Java Go" } ``` ## search-destination · Mappls environments and deployment readiness - Identity: `search-destination:Platform:platform:environment-readiness-center` - Canonical: https://developer.mappls.com/environments ```json { "id": "platform:environment-readiness-center", "kind": "Platform", "title": "Mappls environments and deployment readiness", "description": "Separate fixture, development, staging, and production identities; assess conditional release controls; and promote builds without copying credentials or state.", "href": "/environments", "eyebrow": "4 boundaries · 11 evidence controls", "keywords": "environment fixture development staging production deployment promotion release rollback credential isolation stateful reconciliation" } ``` ## search-destination · Mappls Agent Integration Center - Identity: `search-destination:Platform:platform:agent-integration-center` - Canonical: https://developer.mappls.com/ai/agents ```json { "id": "platform:agent-integration-center", "kind": "Platform", "title": "Mappls Agent Integration Center", "description": "Design a purpose-bound Mappls AI application with an exact MCP allowlist, data and durable-state boundaries, human approval, hostile-path evaluations, operational controls, and release evidence.", "href": "/ai/agents", "eyebrow": "6 patterns · 12 controls · 8 evaluation dimensions", "keywords": "AI agent MCP copilot tool allowlist human in the loop precise location operational state evaluation evals prompt injection data minimization kill switch release" } ``` ## search-destination · Mappls A2A agent server - Identity: `search-destination:Platform:platform:a2a-agent-server` - Canonical: https://developer.mappls.com/ai/a2a ```json { "id": "platform:a2a-agent-server", "kind": "Platform", "title": "Mappls A2A agent server", "description": "Discover and delegate three source-grounded offline skills or ten opt-in purpose-bound Mappls provider reads over Agent2Agent Protocol v1.0, with server-held credentials and zero writes.", "href": "/ai/a2a", "eyebrow": "A2A v1.0 · JSON-RPC + HTTP+JSON · 3 offline + 10 live reads", "keywords": "A2A Agent2Agent agent card multi agent JSON-RPC HTTP JSON task lifecycle offline live read purpose solution plan capability journey simulation Search Routes InTouch" } ``` ## search-destination · Build with Mappls Agent Skill - Identity: `search-destination:Platform:platform:build-with-mappls-agent-skill` - Canonical: https://developer.mappls.com/ai/skills ```json { "id": "platform:build-with-mappls-agent-skill", "kind": "Platform", "title": "Build with Mappls Agent Skill", "description": "Install a standards-compatible, offline-first skill that teaches AI coding agents to select exact Mappls capabilities, freeze a canonical manifest, implement stateless and stateful paths, and preserve entitlement and release authority.", "href": "/ai/skills", "eyebrow": "Agent Skills format · checksummed offline package", "keywords": "Agent Skills SKILL.md Codex Claude AI coding agent offline integration manifest source grounded stateful MCP A2A download" } ``` ## search-destination · Mappls AI Integration Evaluation Lab - Identity: `search-destination:Platform:platform:ai-integration-evaluation-lab` - Canonical: https://developer.mappls.com/ai/evals ```json { "id": "platform:ai-integration-evaluation-lab", "kind": "Platform", "title": "Mappls AI Integration Evaluation Lab", "description": "Run deterministic MCP, A2A, Agent Skill, stateful-journey, and hostile-boundary cases with path-level diagnostics and no provider call.", "href": "/ai/evals", "eyebrow": "90 cases · 918 assertions · offline runner", "keywords": "AI evals evaluation benchmark MCP A2A Agent Skill stateful journey hostile prompt injection authority JSONL CI offline" } ``` ## search-destination · Mappls Developer CLI - Identity: `search-destination:Platform:platform:developer-cli` - Canonical: https://developer.mappls.com/cli ```json { "id": "platform:developer-cli", "kind": "Platform", "title": "Mappls Developer CLI", "description": "Search the canonical catalog, create any of 13 source-bounded platform projects, and inspect credential and evidence gates without making a provider call.", "href": "/cli", "eyebrow": "Offline developer tool · 13 platform starters", "keywords": "command line terminal CLI scaffold starter create doctor project audit JSON offline credential safe" } ``` ## search-destination · Mappls deep-link handoff lab - Identity: `search-destination:Platform:platform:deep-link-handoff-lab` - Canonical: https://developer.mappls.com/tools/deep-links ```json { "id": "platform:deep-link-handoff-lab", "kind": "Platform", "title": "Mappls deep-link handoff lab", "description": "Build and validate source-documented place, navigation, point-on-map, and Pin links with native and browser fallback evidence.", "href": "/tools/deep-links", "eyebrow": "Zero-SDK integration tool", "keywords": "deep link universal link app URI Mappls Pin navigation Kotlin Swift fallback" } ``` ## search-destination · Mappls widget integration lab - Identity: `search-destination:Platform:platform:widget-integration-lab` - Canonical: https://developer.mappls.com/tools/widgets ```json { "id": "platform:widget-integration-lab", "kind": "Platform", "title": "Mappls widget integration lab", "description": "Configure source-documented iframe widgets without accepting secrets, and select guarded enterprise or native integration tracks.", "href": "/tools/widgets", "eyebrow": "Credential-safe integration tool", "keywords": "widget iframe Places Nearby EarthView RealView Metaverse mGIS native entitlement CSP" } ``` ## search-destination · Mappls Add a Place contribution guide - Identity: `search-destination:Platform:platform:add-a-place-contribution-guide` - Canonical: https://developer.mappls.com/tools/widgets/add-a-place ```json { "id": "platform:add-a-place-contribution-guide", "kind": "Platform", "title": "Mappls Add a Place contribution guide", "description": "Generate the corrected public iframe and operate reported submission, independent reconciliation, publication evidence, rejection, retry, and application-side withdrawal.", "href": "/tools/widgets/add-a-place", "eyebrow": "Credential-free embed · stateful host journey", "keywords": "Add a Place contribution iframe publication moderation reconciliation Mappls Pin evidence withdrawal" } ``` ## search-destination · Mappls RealView inspection guide - Identity: `search-destination:Platform:platform:realview-inspection-guide` - Canonical: https://developer.mappls.com/tools/widgets/realview ```json { "id": "platform:realview-inspection-guide", "kind": "Platform", "title": "Mappls RealView inspection guide", "description": "Configure the paid Auth2 iframe boundary, exact-origin no-imagery adapter, ephemeral browser-token ownership, human observation, review, rework, and accessible fallback.", "href": "/tools/widgets/realview", "eyebrow": "Paid entitlement · governed visual inspection", "keywords": "RealView panorama 360 Auth2 iframe status 204 inspection entitlement token coverage review" } ``` ## search-destination · Mappls offline and automotive release control - Identity: `search-destination:Platform:platform:offline-automotive-release-guide` - Canonical: https://developer.mappls.com/tools/automotive ```json { "id": "platform:offline-automotive-release-guide", "kind": "Platform", "title": "Mappls offline and automotive release control", "description": "Operate runtime, map data, configuration, voice, target compatibility, activation, dual-slot update, qualification, interruption, rollback, and retirement as one governed release.", "href": "/tools/automotive", "eyebrow": "Entitled runtime · A/B release control", "keywords": "offline automotive NaviMaps NCASE Telecons embedded A/B slots map package power loss rollback activation qualification" } ``` ## search-destination · Mappls SkyDNN vision evidence workflow - Identity: `search-destination:Platform:platform:skydnn-vision-evidence-guide` - Canonical: https://developer.mappls.com/tools/vision ```json { "id": "platform:skydnn-vision-evidence-guide", "kind": "Platform", "title": "Mappls SkyDNN vision evidence workflow", "description": "Lock a discovered model to an immutable asset hash, validate synchronous inference geometry and confidence, review independently, and redact derived detections without persisting media or credentials.", "href": "/tools/vision", "eyebrow": "SkyDNN AI · governed inference evidence", "keywords": "SkyDNN computer vision predict modelhub bounding box polygon polyline confidence image satellite review redaction human in the loop" } ``` ## search-destination · Mappls native widget implementation matrix - Identity: `search-destination:Platform:platform:native-widget-matrix` - Canonical: https://developer.mappls.com/tools/widgets/native ```json { "id": "platform:native-widget-matrix", "kind": "Platform", "title": "Mappls native widget implementation matrix", "description": "Select a versioned Android, iOS, Flutter, or React Native widget path with explicit lifecycle, state ownership, release tests, and capability gaps.", "href": "/tools/widgets/native", "eyebrow": "20-path mobile implementation selector", "keywords": "native widget Android iOS Flutter React Native place search nearby directions geofence feedback lifecycle state" } ``` ## search-destination · Mappls mGIS integration planner - Identity: `search-destination:Platform:platform:mgis-integration-planner` - Canonical: https://developer.mappls.com/tools/mgis ```json { "id": "platform:mgis-integration-planner", "kind": "Platform", "title": "Mappls mGIS integration planner", "description": "Choose the entitled widget wrapper, twelve Web JS methods, durable dataset workspace, or separate sovereign MIGIST deployment with explicit state and evidence boundaries.", "href": "/tools/mgis", "eyebrow": "Enterprise geospatial contract selector", "keywords": "mGIS MGIS.Widget dataset WMS style raster analysis workspace MIGIST sovereign air gap" } ``` ## search-destination · Mappls public and local repository reconciliation - Identity: `search-destination:Source:source:repository-reconciliation` - Canonical: https://developer.mappls.com/sources/reconciliation ```json { "id": "source:repository-reconciliation", "kind": "Source", "title": "Mappls public and local repository reconciliation", "description": "Inspect every public mappls-api repository against deterministic exact or normalized local candidates, including unmatched public and local-only evidence.", "href": "/sources/reconciliation", "eyebrow": "82 public repositories · identity-safe correspondence", "keywords": "GitHub public repository local repository MMI Mappls MapmyIndia exact match normalized match unmatched local-only source evidence" } ``` ## search-destination · Mappls documentation coverage - Identity: `search-destination:Source:source:documentation-coverage` - Canonical: https://developer.mappls.com/coverage ```json { "id": "source:documentation-coverage", "kind": "Source", "title": "Mappls documentation coverage", "description": "Inspect required source-exact documentation, code, API/SDK selection, quickstart, tutorial, stateful journey, runnable app, and migration evidence across every source, product, and platform.", "href": "/coverage", "eyebrow": "105 coverage records · explicit required gaps", "keywords": "documentation coverage completeness quality gap source exact adjacent evidence stateful journey quickstart tutorial sample app migration" } ``` ## search-destination · Mappls stateful operations planner - Identity: `search-destination:Platform:platform:stateful-operations-planner` - Canonical: https://developer.mappls.com/tools/stateful ```json { "id": "platform:stateful-operations-planner", "kind": "Platform", "title": "Mappls stateful operations planner", "description": "Select any journey-bearing product and generate its state-ownership boundary, aggregates, lifecycle evidence, eight implementation controls, runnable apps, and release gates.", "href": "/tools/stateful", "eyebrow": "9 product tracks · 17 complete state machines", "keywords": "stateful hybrid application state provider state aggregate idempotency optimistic concurrency audit outbox reconciliation privacy recovery" } ``` ## search-destination · Mappls Stateful Journey Lab - Identity: `search-destination:Platform:platform:stateful-journey-lab` - Canonical: https://developer.mappls.com/tools/journey-lab ```json { "id": "platform:stateful-journey-lab", "kind": "Platform", "title": "Mappls Stateful Journey Lab", "description": "Execute all eighteen application journeys through complete, idempotent replay, stale-version, invalid-transition, and unknown-outcome fixtures with immutable event and recovery evidence.", "href": "/tools/journey-lab", "eyebrow": "18 journeys · 90 deterministic fixture paths", "keywords": "journey simulator state machine idempotency optimistic concurrency version conflict invalid transition unknown outcome reconciliation event outbox fixture no credential" } ``` ## search-destination · Maps - Identity: `search-destination:Product:product:maps` - Canonical: https://developer.mappls.com/docs/maps ```json { "id": "product:maps", "kind": "Product", "title": "Maps", "description": "Fast, expressive vector and raster maps across web, mobile, hybrid, and embedded apps.", "href": "/docs/maps", "eyebrow": "stateless · Core location", "keywords": "maps Vector and raster basemaps Markers, shapes, layers, and overlays Traffic and thematic visualization Custom styles and camera controls Static and travelled-route images Offline and embedded map packages Web Android iOS React Native Flutter Cordova Xamarin REST mappls-web-maps-js mappls-android-sdk mappls-ios-sdk mappls-flutter-sdk mappls-react-native-sdk mappls-map-ios-distribution" } ``` ## search-destination · Search & Places - Identity: `search-destination:Product:product:search-places` - Canonical: https://developer.mappls.com/docs/search-places ```json { "id": "product:search-places", "kind": "Product", "title": "Search & Places", "description": "Autosuggest, geocoding, nearby discovery, place details, and Mappls Pin addressing.", "href": "/docs/search-places", "eyebrow": "stateless · Core location", "keywords": "search-places Autosuggest and text search Forward and reverse geocoding Nearby and route-corridor search Place details and categories Address validation and standardization Mappls Pin and DIGIPIN workflows REST Web Android iOS React Native Flutter Widgets mappls-rest-apis mappls-android-sdk mappls-ios-sdk mappls-web-plugins" } ``` ## search-destination · Routes & Navigation - Identity: `search-destination:Product:product:routes-navigation` - Canonical: https://developer.mappls.com/docs/routes-navigation ```json { "id": "product:routes-navigation", "kind": "Product", "title": "Routes & Navigation", "description": "Routes, matrices, optimization, map matching, predictive ETAs, and turn-by-turn navigation.", "href": "/docs/routes-navigation", "eyebrow": "hybrid · Mobility", "keywords": "routes-navigation Multi-profile routing and alternatives Distance and time matrices Trip and vehicle-route optimization Map matching and snap-to-road Predictive routes and refreshed ETAs Online and offline turn-by-turn navigation REST Android iOS Automotive Linux React Native mappls-rest-apis mappls-android-sdk mappls-ios-sdk mapmyindia-navigation-sdk mappls-routenet mappls-telecons-offline-sdk" } ``` ## search-destination · InTouch Telematics - Identity: `search-destination:Product:product:intouch-telematics` - Canonical: https://developer.mappls.com/docs/intouch-telematics ```json { "id": "product:intouch-telematics", "kind": "Product", "title": "InTouch Telematics", "description": "Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.", "href": "/docs/intouch-telematics", "eyebrow": "stateful · Operations", "keywords": "intouch-telematics Device and vehicle provisioning Live location and historical trails Trips, stoppages, and events Geofences, alerts, and notifications Driver behavior and fleet reports Mobile sensor-based tracking SDKs REST Android iOS React Native Web Widgets mappls-intouch-rest-apis mappls-intouch-android-sdk mappls-intouch-ios-sdk mappls-react-native-intouch-sdk" } ``` ## search-destination · Workmate - Identity: `search-destination:Product:product:workmate` - Canonical: https://developer.mappls.com/docs/workmate ```json { "id": "product:workmate", "kind": "Product", "title": "Workmate", "description": "Workforce automation for people, clients, tasks, attendance, proof, and live operations.", "href": "/docs/workmate", "eyebrow": "stateful · Operations", "keywords": "workmate Worker and team management Task assignment and dispatch Attendance and shift workflows Client visits and proof of service Live operations and exceptions Forms, evidence, and completion reports REST Android Web mapmyindia-workmate-apis mappls-workmate-android-sdk" } ``` ## search-destination · GIS & Analytics - Identity: `search-destination:Product:product:gis-analytics` - Canonical: https://developer.mappls.com/docs/gis-analytics ```json { "id": "product:gis-analytics", "kind": "Product", "title": "GIS & Analytics", "description": "Spatial data, analysis, maps, dashboards, and embeddable location intelligence.", "href": "/docs/gis-analytics", "eyebrow": "hybrid · Intelligence", "keywords": "gis-analytics Dataset upload and cataloguing Layer styling and thematic maps Spatial queries and analysis Dashboards and embedded insights Workspace roles and governed sharing Import, export, and lineage REST Web Widgets MCP mapmyindia-mgis-apis mapmyindia-mgis-libraries mappls-insight-sdk migist-complete" } ``` ## search-destination · App Widgets & Deep Links - Identity: `search-destination:Product:product:app-widgets-deep-links` - Canonical: https://developer.mappls.com/docs/app-widgets-deep-links ```json { "id": "product:app-widgets-deep-links", "kind": "Product", "title": "App Widgets & Deep Links", "description": "Embeddable Mappls experiences for places, directions, 3D views, RealView, and app hand-off.", "href": "/docs/app-widgets-deep-links", "eyebrow": "stateless · Experience", "keywords": "app-widgets-deep-links Place and map visualization Directions and navigation hand-off Immersive 3D and RealView experiences Cross-platform universal links Low-code embeds Credential-free entry points Widgets Deep links Web Android iOS mappls-app-widgets mappls-web-plugins" } ``` ## search-destination · Offline & Automotive - Identity: `search-destination:Product:product:offline-automotive` - Canonical: https://developer.mappls.com/docs/offline-automotive ```json { "id": "product:offline-automotive", "kind": "Product", "title": "Offline & Automotive", "description": "Offline maps, search, routing, guidance, compilers, and embedded navigation runtimes.", "href": "/docs/offline-automotive", "eyebrow": "stateful · Embedded", "keywords": "offline-automotive Offline maps, search, and routing Turn-by-turn guidance runtime Regional data compilation Voice and traffic customization GPS health and dead reckoning hooks Signed data and software updates Automotive Linux Android mappls-telecons-offline-sdk mappls-telecons-compiler mappls-telecons-search-compiler mappls-telecons-background-compiler mappls-routenet linuxsdk-dev1 linuxsdk-dev2 yahaan" } ``` ## search-destination · AI & Location - Identity: `search-destination:Product:product:ai-location` - Canonical: https://developer.mappls.com/docs/ai-location ```json { "id": "product:ai-location", "kind": "Product", "title": "AI & Location", "description": "AI/ML APIs, vision, location-aware agents, ranking, and natural-language spatial workflows.", "href": "/docs/ai-location", "eyebrow": "hybrid · Intelligence", "keywords": "ai-location Vision and imagery analysis Location-aware retrieval and ranking Natural-language map operations Typed tools for AI agents Spatial workflow orchestration Evaluation and grounding patterns REST Web MCP mappls-ai-apis skydnn-aiapi-docs genesis-toolkit mapplsaiwebtesting" } ``` ## search-destination · Capture & Feedback - Identity: `search-destination:Product:product:capture-feedback` - Canonical: https://developer.mappls.com/docs/capture-feedback ```json { "id": "product:capture-feedback", "kind": "Product", "title": "Capture & Feedback", "description": "On-demand location capture, camera evidence, map feedback, and update workflows.", "href": "/docs/capture-feedback", "eyebrow": "hybrid · Data operations", "keywords": "capture-feedback Single-shot and subscribed location Accuracy and timeout policies Camera and field evidence Map issue reporting Reviewable update workflows Battery-aware capture Android iOS mappls-camera-sdk-android mappls-camera-sdk-ios mappls-location-capture-android-sdk mappls-location-capture-ios-sdk mappls-feedback-kit-ios-distribution mappls-feedback-uikit-ios-distribution" } ``` ## search-destination · REST implementation - Identity: `search-destination:Platform:platform:rest` - Canonical: https://developer.mappls.com/platforms/rest ```json { "id": "platform:rest", "kind": "Platform", "title": "REST implementation", "description": "Put Mappls behind a stable service boundary in any stack.", "href": "/platforms/rest", "eyebrow": "Platform playbook", "keywords": "REST REST Credentials never reach a browser or mobile bundle Timeout, retry, and idempotency policies are explicit Coordinates, addresses, and identifiers have data-retention rules Every operation is attributable in logs and usage reporting" } ``` ## search-destination · Web implementation - Identity: `search-destination:Platform:platform:web` - Canonical: https://developer.mappls.com/platforms/web ```json { "id": "platform:web", "kind": "Platform", "title": "Web implementation", "description": "Build expressive browser maps without surrendering performance or control.", "href": "/platforms/web", "eyebrow": "Platform playbook", "keywords": "Web Web Origin restrictions include every deployed hostname Map lifecycle follows the framework lifecycle Large datasets are tiled, clustered, or progressively loaded Keyboard, touch, reduced-motion, and failure states are tested" } ``` ## search-destination · Android implementation - Identity: `search-destination:Platform:platform:android` - Canonical: https://developer.mappls.com/platforms/android ```json { "id": "platform:android", "kind": "Platform", "title": "Android implementation", "description": "Compose native maps, places, tracking, and navigation with Android lifecycle discipline.", "href": "/platforms/android", "eyebrow": "Platform playbook", "keywords": "Android Android Dependency versions are pinned and reproducible Location permission is contextual and revocable Background work complies with current Android policy SDK resources and observers are released deterministically" } ``` ## search-destination · iOS implementation - Identity: `search-destination:Platform:platform:ios` - Canonical: https://developer.mappls.com/platforms/ios ```json { "id": "platform:ios", "kind": "Platform", "title": "iOS implementation", "description": "Deliver Mappls-native Apple experiences through modular, lifecycle-safe frameworks.", "href": "/platforms/ios", "eyebrow": "Platform playbook", "keywords": "iOS iOS Package and binary versions belong to the same release line Secrets are not recoverable from the app bundle Info.plist purpose strings match actual collection Delegates, observers, and background sessions terminate cleanly" } ``` ## search-destination · React Native implementation - Identity: `search-destination:Platform:platform:react-native` - Canonical: https://developer.mappls.com/platforms/react-native ```json { "id": "platform:react-native", "kind": "Platform", "title": "React Native implementation", "description": "Share product logic while keeping native Mappls capabilities honest on both platforms.", "href": "/platforms/react-native", "eyebrow": "Platform playbook", "keywords": "React Native React Native Native and wrapper releases are compatible High-frequency events are throttled before crossing the bridge Unmount releases native views and listeners Platform-specific behavior is documented, not hidden" } ``` ## search-destination · Flutter implementation - Identity: `search-destination:Platform:platform:flutter` - Canonical: https://developer.mappls.com/platforms/flutter ```json { "id": "platform:flutter", "kind": "Platform", "title": "Flutter implementation", "description": "Use one Dart experience with deliberate native Mappls configuration underneath.", "href": "/platforms/flutter", "eyebrow": "Platform playbook", "keywords": "Flutter Flutter Android and iOS configuration is version-controlled Controllers are used only after readiness Streams and platform views are disposed Release builds are tested on physical devices" } ``` ## search-destination · Cordova implementation - Identity: `search-destination:Platform:platform:cordova` - Canonical: https://developer.mappls.com/platforms/cordova ```json { "id": "platform:cordova", "kind": "Platform", "title": "Cordova implementation", "description": "Maintain hybrid location experiences with explicit native ownership and a migration path.", "href": "/platforms/cordova", "eyebrow": "Platform playbook", "keywords": "Cordova Cordova/Ionic Supported status is verified before new development Toolchain and plugin versions are frozen Bridge inputs are validated and bounded A tested migration and rollback path exists" } ``` ## search-destination · Xamarin implementation - Identity: `search-destination:Platform:platform:xamarin` - Canonical: https://developer.mappls.com/platforms/xamarin ```json { "id": "platform:xamarin", "kind": "Platform", "title": "Xamarin implementation", "description": "Stabilize existing .NET mobile integrations and move forward without losing behavior.", "href": "/platforms/xamarin", "eyebrow": "Platform playbook", "keywords": "Xamarin Xamarin/.NET The support and security posture is documented Build inputs can be reproduced Native resources have deterministic ownership Migration parity is measured with journey-level tests" } ``` ## search-destination · Linux implementation - Identity: `search-destination:Platform:platform:linux` - Canonical: https://developer.mappls.com/platforms/linux ```json { "id": "platform:linux", "kind": "Platform", "title": "Linux implementation", "description": "Run location and navigation reliably on controlled, embedded Linux systems.", "href": "/platforms/linux", "eyebrow": "Platform playbook", "keywords": "Linux Linux/Embedded Runtime and data compatibility is enforced Device identity and activation can be rotated Updates are signed, resumable, and reversible Health and resource telemetry survive application restarts" } ``` ## search-destination · Automotive implementation - Identity: `search-destination:Platform:platform:automotive` - Canonical: https://developer.mappls.com/platforms/automotive ```json { "id": "platform:automotive", "kind": "Platform", "title": "Automotive implementation", "description": "Treat in-vehicle navigation as a safety-aware, upgradeable system—not a screen.", "href": "/platforms/automotive", "eyebrow": "Platform playbook", "keywords": "Automotive Automotive Linux/Embedded Driver-distraction and safety requirements are testable Navigation recovers after power and connectivity loss Runtime and map data roll out as a compatible unit Simulation and road-test evidence cover full journeys" } ``` ## search-destination · Widgets implementation - Identity: `search-destination:Platform:platform:widgets` - Canonical: https://developer.mappls.com/platforms/widgets ```json { "id": "platform:widgets", "kind": "Platform", "title": "Widgets implementation", "description": "Embed complete Mappls experiences while keeping hand-off, privacy, and fallback deliberate.", "href": "/platforms/widgets", "eyebrow": "Platform playbook", "keywords": "Widgets Widgets/Deep links Web Embedding and content-security policies permit only required origins No sensitive business state lives only inside the widget Loading, failure, and unsupported-browser fallbacks exist Analytics distinguish view, engagement, completion, and hand-off" } ``` ## search-destination · Deep links implementation - Identity: `search-destination:Platform:platform:deep-links` - Canonical: https://developer.mappls.com/platforms/deep-links ```json { "id": "platform:deep-links", "kind": "Platform", "title": "Deep links implementation", "description": "Open useful Mappls place and journey experiences from any channel—with no SDK requirement.", "href": "/platforms/deep-links", "eyebrow": "Platform playbook", "keywords": "Deep links Widgets/Deep links User or confidential data never appears in query parameters All variable values are encoded and length-bounded App and browser fallbacks reach the same intent Redirect and campaign domains are allow-listed and monitored" } ``` ## search-destination · MCP implementation - Identity: `search-destination:Platform:platform:mcp` - Canonical: https://developer.mappls.com/platforms/mcp ```json { "id": "platform:mcp", "kind": "Platform", "title": "MCP implementation", "description": "Give AI systems typed Mappls capabilities with policy, evidence, and human control.", "href": "/platforms/mcp", "eyebrow": "Platform playbook", "keywords": "MCP AI/MCP Tools expose the least authority needed State-changing calls require explicit policy and approval Responses identify source, freshness, and uncertainty Every tool call is tenant-scoped, metered, redacted, and traceable" } ``` ## search-destination · Your first trusted Mappls request - Identity: `search-destination:Quickstart:quickstart:rest-api` - Canonical: https://developer.mappls.com/quickstart/rest-api ```json { "id": "quickstart:rest-api", "kind": "Quickstart", "title": "Your first trusted Mappls request", "description": "a validated autosuggest result from a credential-safe server boundary", "href": "/quickstart/rest-api", "eyebrow": "REST · 15 minutes · public-source", "keywords": "Load the current restricted static key only inside the trusted process. Legacy OAuth and InTouch bearer credentials are separate generations and must never be mixed by inference. The public REST repository and normalized operation are repository evidence; the issued account remains authoritative for host, auth generation, quota, and region. Node.js 20 or newer A Mappls project and restricted non-production server key An approved region and one autosuggest test query Request logging configured to omit URLs containing key query parameters mappls-rest-apis The successful response retains a Mappls place identity and the failure response is typed and redacted. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. A request succeeds locally but its key appears in proxy traces The current key uses a query transport and an intermediary records full URLs. Disable query-string logging, restrict the key to server egress, redact telemetry, and rotate any exposed credential before continuing. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Render one accessible web map - Identity: `search-destination:Quickstart:quickstart:web-map` - Canonical: https://developer.mappls.com/quickstart/web-map ```json { "id": "quickstart:web-map", "kind": "Quickstart", "title": "Render one accessible web map", "description": "a responsive map and text-synchronized selected place", "href": "/quickstart/web-map", "eyebrow": "Web · 15 minutes · public-source", "keywords": "Use only the browser-supported public key restricted to exact origins. Privileged REST credentials stay on a backend-for-frontend. The selected Web Maps source contains current and sample evidence; confirm the script/package line and allowed origin against the target project. A static HTML or framework application An exact localhost origin A domain-restricted browser key A visible fallback container and selected-place text region mappls-web-maps mappls-web-maps-js Map, text fallback, and selected identity stay synchronized at mobile and desktop widths. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. The map is blank while no provider error is visible The host has zero height, the script was blocked, the origin is not allowed, or initialization ran before the DOM existed. Inspect host dimensions and script/network status, surface the load error beside the text fallback, and initialize exactly once after mount. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Create a lifecycle-safe Android map - Identity: `search-destination:Quickstart:quickstart:android-native` - Canonical: https://developer.mappls.com/quickstart/android-native ```json { "id": "quickstart:android-native", "kind": "Quickstart", "title": "Create a lifecycle-safe Android map", "description": "a native map screen that survives recreation and permission denial", "href": "/quickstart/android-native", "eyebrow": "Android · 25 minutes · public-source", "keywords": "Use only the documented Android credential configuration restricted to the package and signing identity. Server credentials never belong in the APK. The public repositories are sample-classified evidence; confirm Maven coordinates, BoM, AGP/Kotlin, min/target SDK, and supported release with Mappls. Android Studio and a clean Kotlin app Confirmed AGP, Kotlin, minSdk, and targetSdk matrix A package/signature-restricted non-production key At least one physical device for release validation mappls-android-sdk mappls-android-compose-demo Camera/selection state restores intentionally and no map listener or location request survives the owning lifecycle. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. Debug works but release crashes or renders nothing Repository, dependency, shrinker, manifest, signing restriction, architecture, or resource configuration differs in release. Resolve the release dependency graph, inspect merged manifest/resources, verify signing identity and restrictions, and test the smallest release screen on hardware. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Create a lifecycle-safe iOS map - Identity: `search-destination:Quickstart:quickstart:ios-native` - Canonical: https://developer.mappls.com/quickstart/ios-native ```json { "id": "quickstart:ios-native", "kind": "Quickstart", "title": "Create a lifecycle-safe iOS map", "description": "a native Swift map feature with explicit package and view ownership", "href": "/quickstart/ios-native", "eyebrow": "iOS · 25 minutes · public-source", "keywords": "Use only the documented app credential restricted to the bundle/team context. Keep server secrets and privileged exchanges outside the application bundle. Public distribution repositories identify candidate package lines, not a universal version matrix. Confirm SwiftPM products, binary checksums, Xcode/Swift, deployment target, and extension compatibility together. A clean Swift application Confirmed Xcode, Swift, deployment target, and package line A bundle-restricted non-production app credential An iPhone or iPad for release and lifecycle tests mappls-map-ios-distribution mappls-api-kit-ios-distribution The selected place survives intended scene restoration and released views retain no delegates, observers, tasks, or background sessions. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. SwiftPM resolves but archive or launch fails Package/binary release lines, deployment target, architecture, privacy manifest, or dependent extensions are incompatible. Inspect Package.resolved and archive linkage, verify checksums and platform slices, then confirm the complete package matrix with the owning product guide. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Bridge one map feature across Android and iOS - Identity: `search-destination:Quickstart:quickstart:react-native-map` - Canonical: https://developer.mappls.com/quickstart/react-native-map ```json { "id": "quickstart:react-native-map", "kind": "Quickstart", "title": "Bridge one map feature across Android and iOS", "description": "a typed shared map feature with separately verified native halves", "href": "/quickstart/react-native-map", "eyebrow": "React Native · 30 minutes · public-source", "keywords": "Configure Android and iOS app credentials independently and keep privileged calls on a backend. JavaScript configuration is not a secret store. The public wrapper is sample-classified. Confirm React Native, wrapper, New Architecture status, Gradle/Kotlin, Xcode/Swift, and underlying native Mappls versions as one release unit. A clean React Native TypeScript app Approved wrapper/native version matrix Separate restricted Android and iOS app credentials Physical Android and iOS devices mappls-react-native-sdk Android and iOS return the same application-level selected ID while platform-specific failures remain visible and attributable. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. One platform works while the other reports missing native view/module Only one native project, dependency graph, architecture mode, autolinking step, credential restriction, or build cache is correct. Treat each platform as its own build: inspect resolved native dependencies and registration, clean only scoped build output, and prove the native example before the shared wrapper. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Build a native-backed Flutter place picker - Identity: `search-destination:Quickstart:quickstart:flutter-map` - Canonical: https://developer.mappls.com/quickstart/flutter-map ```json { "id": "quickstart:flutter-map", "kind": "Quickstart", "title": "Build a native-backed Flutter place picker", "description": "a Dart form that commits one accepted Mappls place identity", "href": "/quickstart/flutter-map", "eyebrow": "Flutter · 30 minutes · public-source", "keywords": "Configure separately restricted Android and iOS app credentials in their native projects. Do not put server secrets in Dart assets or compile-time constants. The corpus contains Mappls sample evidence and an older current-classified MapmyIndia wrapper. Confirm the supported Flutter/Dart plugin and both native SDK lines before choosing one. A clean Flutter application Confirmed Flutter, Dart, plugin, Android, and iOS matrix Restricted credentials for both native runners Physical devices and release signing mappls-flutter-sdk flutter-mapmyindia-gl The form cannot submit stale text as a selected place and platform views/controllers are disposed after navigation. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. The Dart API resolves but the platform view fails at runtime Android/iOS native configuration, plugin/native version, renderer, architecture, permission, or credential setup is incomplete. Run the plugin's minimal native-backed screen on each platform, inspect native logs and dependency graphs, and wait for controller readiness before commands. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Stabilize a Cordova map before migration - Identity: `search-destination:Quickstart:quickstart:cordova-maintenance` - Canonical: https://developer.mappls.com/quickstart/cordova-maintenance ```json { "id": "quickstart:cordova-maintenance", "kind": "Quickstart", "title": "Stabilize a Cordova map before migration", "description": "a reproducible legacy screen behind a replaceable capability facade", "href": "/quickstart/cordova-maintenance", "eyebrow": "Cordova · 35 minutes · legacy-maintenance", "keywords": "Treat all client credentials as platform-restricted public credentials and keep privileged REST work on a backend. Never reuse legacy auth with a current host by resemblance. Only legacy/beta Cordova sources exist in the public corpus. This quickstart is for stabilizing an existing estate—not recommending Cordova for new development. Use the migration track to select a supported target. An existing Cordova/Ionic repository A reproducible lockfile and build-host image Inventory of plugins, native SDKs, credentials, signing, and store constraints A chosen migration owner and target decision date mapmyindia-map-cordova-ionic-beta mapmyindia-restapi-cordova-ionic-beta One legacy journey is reproducible, has a fallback, and can switch to a replacement adapter without changing domain state. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. A fresh machine cannot reproduce the signed build Unpinned Node/Cordova/plugin/native build inputs, removed repositories, certificates, or generated native edits are part of the hidden build. Capture the entire toolchain manifest and generated-project changes before feature work; if dependencies are unavailable, prioritize the migration seam and replacement cohort. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Extract a Xamarin map integration for replacement - Identity: `search-destination:Quickstart:quickstart:xamarin-maintenance` - Canonical: https://developer.mappls.com/quickstart/xamarin-maintenance ```json { "id": "quickstart:xamarin-maintenance", "kind": "Quickstart", "title": "Extract a Xamarin map integration for replacement", "description": "a shared .NET contract with independently owned Android and iOS adapters", "href": "/quickstart/xamarin-maintenance", "eyebrow": "Xamarin · 40 minutes · entitlement-required", "keywords": "Use separately restricted native app credentials and keep privileged service credentials on a backend. Do not move secrets into shared assemblies during extraction. No public repository in the snapshot provides a current Xamarin successor. Obtain the existing binding/source and target-platform contract from Mappls and use the migration principles before implementation. An existing Xamarin solution and reproducible build host Inventory of NuGet packages, native bindings, binaries, and licenses Android and iOS journey fixtures A confirmed supported migration target Shared tests prove equivalent place identity and errors while no shared state retains a native view, context, delegate, or credential. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. Shared tests pass but a platform leaks or crashes after navigation Renderer/delegate/event ownership remains implicit or native callbacks target a disposed shared object. Trace creation, subscription, disappearance, disposal, and late callbacks per platform; introduce cancellation/version fencing at the adapter boundary. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Boot a supervised embedded map client - Identity: `search-destination:Quickstart:quickstart:linux-embedded` - Canonical: https://developer.mappls.com/quickstart/linux-embedded ```json { "id": "quickstart:linux-embedded", "kind": "Quickstart", "title": "Boot a supervised embedded map client", "description": "a health-checked native process with an atomic data/runtime boundary", "href": "/quickstart/linux-embedded", "eyebrow": "Linux · 45 minutes · entitlement-required", "keywords": "Use device/workload identity and entitlement delivered through the approved provisioning channel; never bake fleet-wide secrets into an image or package. The public snapshot has no platform-specific Linux distribution guide. The runtime, ABI, compiler, graphics, activation, and data contract must come from the entitled private distribution. Target CPU, ABI, libc, GPU/graphics, OS image, storage, and sensor manifest Entitled runtime, data, license, and activation contract A supervised service environment Dual-slot storage or another atomic rollback mechanism Every test leaves exactly one bootable active runtime/data set and health reports the selected versions without leaking device credentials. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. The process starts but rendering or routing fails on target hardware ABI/libc/compiler/GPU/runtime/data epoch or activation is incompatible despite a successful file copy. Compare the signed release manifest to device facts, fail readiness, retain the previous slot, and obtain the exact compatibility decision from the runtime owner. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Simulate one recoverable navigation session - Identity: `search-destination:Quickstart:quickstart:automotive-navigation` - Canonical: https://developer.mappls.com/quickstart/automotive-navigation ```json { "id": "quickstart:automotive-navigation", "kind": "Quickstart", "title": "Simulate one recoverable navigation session", "description": "a safety-aware route-to-arrival state machine over an entitled runtime", "href": "/quickstart/automotive-navigation", "eyebrow": "Automotive · 60 minutes · entitlement-required", "keywords": "Provision per-device identity, activation, regions, runtime, and map data through the approved vehicle/fleet control plane. Avoid shared embedded credentials. The public snapshot does not establish an automotive SDK or safety contract. Obtain the entitled runtime, data, activation, vehicle-interface, HMI, and regulatory requirements before binding an adapter. Vehicle hardware/OS/display/control/sensor operating envelope Entitled runtime, map data, activation, and update contract Deterministic GNSS and vehicle-signal simulator Safety, distraction, privacy, and release owners The session recovers to a safe explainable state with compatible runtime/data and never presents stale guidance as current after a reset. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. Guidance resumes with an old route or unsafe prompt after restart Route/session version, position freshness, vehicle state, HMI policy, or runtime/data identity was not persisted and reconciled atomically. Fail guidance to a safe state, reconcile session and release manifest, replay the deterministic trace, and require simulation evidence before road testing. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Embed a place journey with an owned fallback - Identity: `search-destination:Quickstart:quickstart:widgets-place` - Canonical: https://developer.mappls.com/quickstart/widgets-place ```json { "id": "quickstart:widgets-place", "kind": "Quickstart", "title": "Embed a place journey with an owned fallback", "description": "an accessible host that validates one widget result and survives widget failure", "href": "/quickstart/widgets-place", "eyebrow": "Widgets · 20 minutes · public-source", "keywords": "Use only the widget/browser credential class restricted to exact origins. Validate every postMessage/callback payload and keep privileged operations on the server. The current public Web Plugins guide spans current vector and legacy raster integration branches; source activity is not a support promise. Confirm the exact widget, script, origin, event schema, release, entitlement, and authentication line before implementation. A confirmed Mappls widget and auth generation Exact host and allowed widget origins An accessible host form and manual fallback A versioned callback/message schema mappls-web-plugins The host submits only a validated selected identity and remains usable when the widget is slow, blocked, denied, or unavailable. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. The widget displays but selection never reaches the form Origin, callback name, event schema/version, load timing, or host state invalidation differs from the confirmed integration line. Log only safe message metadata, verify exact origin/schema from the guide, reject unknown shapes, and keep the visible fallback active. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Ship one zero-SDK Mappls hand-off - Identity: `search-destination:Quickstart:quickstart:deep-links` - Canonical: https://developer.mappls.com/quickstart/deep-links ```json { "id": "quickstart:deep-links", "kind": "Quickstart", "title": "Ship one zero-SDK Mappls hand-off", "description": "a place link that reaches the same intent across app and browser fallbacks", "href": "/quickstart/deep-links", "eyebrow": "Deep links · 10 minutes · public-source", "keywords": "Deep links contain no credential. Put only bounded non-sensitive intent in the URL; precise private/user data and server secrets must never become query parameters. Use the exact link shape documented by the current App Widgets source. The scaffold below deliberately receives that approved base rather than inventing an undocumented path. A stable Mappls place identity or validated destination The exact documented link template Installed/uninstalled Android and iOS test devices Browser, messaging, email, and QR test channels mappls-app-widgets Every supported channel reaches the same destination intent or a useful visible fallback without sensitive query data. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. A channel opens a generic page or different destination The association, link shape, encoding, redirector, app installation state, or channel rewriting altered the documented intent. Compare the final URL components without private data, bypass unapproved redirectors, and retest installed/uninstalled fallback against the exact guide. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Connect a read-only Mappls agent - Identity: `search-destination:Quickstart:quickstart:mcp-agent` - Canonical: https://developer.mappls.com/quickstart/mcp-agent ```json { "id": "quickstart:mcp-agent", "kind": "Quickstart", "title": "Connect a read-only Mappls agent", "description": "a grounded documentation query through local stdio or authenticated stateless HTTP", "href": "/quickstart/mcp-agent", "eyebrow": "MCP · 15 minutes · local-reference", "keywords": "Keep provider credentials in the MCP server process or approved secret provider, never model context or client configuration committed to source. A remote internal gateway bearer or issuer-bound OAuth access token is independent from every Mappls provider credential. Documentation and migration tools require no live credential. The MCP implementation is maintained in this repository and protocol-tested over stdio and Streamable HTTP. Live tool success still depends on the issued account, operation, region, and credential scope; production OAuth authorization-server registration, consent, lifecycle, and revocation remain company integrations. Node.js 22 or newer An MCP-capable client or the downloadable Spatial Operations Agent A built `@mappls/mcp-server` package No credential for offline discovery; separately scoped non-production credentials only for approved live reads Fixture, real stdio, and remote HTTP share one governed application client contract. Local stdio and an explicit live-read deployment advertise 42 typed tools; default remote HTTP advertises only the 32 credential-free tools. Both profiles retain 38 resources and two prompts, OAuth mode binds an attributable principal/client/scope to the exact resource, remote HTTP retains no session registry, and no profile exposes writes. A blocked, missing, or unentitled provider produces a useful explicit failure rather than a blank surface or fabricated result. No server credential, bearer value, precise private fixture, or provider response body appears in client bundles, logs, screenshots, or test artifacts. Resources, listeners, sessions, processes, or requests stop cleanly when the owning screen, request, or application ends. The client starts but lists no tools/resources, or a planned tool is unavailable The package was not built, the stdio path/runtime or remote URL/auth is wrong, the configured profile is offline while the plan needs live-read, JWT issuer/audience/scope is mismatched, stdout contains non-protocol output, or a host/origin allowlist rejected the client. Run the package build and protocol test directly, use solution_research and mappls_get_authentication_path to prove offline negotiation and credential placement, check credential-free health and protected-resource metadata, inspect only safe token classification, verify the absolute local entrypoint or exact HTTPS resource identity, then reconnect with the smallest profile. Authentication or entitlement is rejected The credential class, restriction, account region, host/path generation, package application, or subscribed capability does not match. Do not try another credential shape blindly. Capture the safe status/request identity and reconcile the exact contract in the developer console or support packet. The sample works once but not after reload, backgrounding, or a second run Lifecycle ownership, listener disposal, token/session refresh, saved state, or a singleton initialization boundary is incomplete. Instrument create/ready/cancel/destroy transitions and prove one owner before adding product behavior." } ``` ## search-destination · Mappls API Organization Guide: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:github` - Canonical: https://developer.mappls.com/launchpads/github ```json { "id": "source-launchpad:github", "kind": "Source launchpad", "title": "Mappls API Organization Guide: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/github", "eyebrow": ".github · stateless · source-ready", "keywords": "Guide Unspecified maps The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 862c91224d2b3e3fd8d3bed8. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `github` and fingerprint `862c91224d2b3e3fd8d3bed8` recorded in the project A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mapmyindia-angular-sample-websdk-rest` - Canonical: https://developer.mappls.com/launchpads/mapmyindia-angular-sample-websdk-rest ```json { "id": "source-launchpad:mapmyindia-angular-sample-websdk-rest", "kind": "Source launchpad", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web: source launchpad", "description": "Run one reviewed sample seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mapmyindia-angular-sample-websdk-rest", "eyebrow": "mapmyindia-angular-sample-webSDK-REST · stateless · sample-learning", "keywords": "Sample Web REST maps search-places identity-platform This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 4280593e3c2f3278656e1952. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mapmyindia-angular-sample-websdk-rest` and fingerprint `4280593e3c2f3278656e1952` recorded in the project A browser application and an allowed development origin A trusted backend or API client capable of HTTPS requests OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “2. Create file name of proxy.conf.json in your project and put given c” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mapmyindia-purejs-sample-websdk-rest` - Canonical: https://developer.mappls.com/launchpads/mapmyindia-purejs-sample-websdk-rest ```json { "id": "source-launchpad:mapmyindia-purejs-sample-websdk-rest", "kind": "Source launchpad", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS: source launchpad", "description": "Run one reviewed sample seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mapmyindia-purejs-sample-websdk-rest", "eyebrow": "mapmyindia-pureJS-sample-webSDK-REST · stateless · sample-learning", "keywords": "Sample Web REST maps search-places routes-navigation tracking-telematics identity-platform This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 7648d47274423632e0d612ff. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mapmyindia-purejs-sample-websdk-rest` and fingerprint `7648d47274423632e0d612ff` recorded in the project A browser application and an allowed development origin A trusted backend or API client capable of HTTPS requests OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Creating project in Pure Javascript for MapmyIndia REST APIs & Interac” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MAPPLS AI / ML APIs: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-ai-apis` - Canonical: https://developer.mappls.com/launchpads/mappls-ai-apis ```json { "id": "source-launchpad:mappls-ai-apis", "kind": "Source launchpad", "title": "MAPPLS AI / ML APIs: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-ai-apis", "eyebrow": "mappls-ai-apis · stateless · source-ready", "keywords": "REST API REST AI/MCP maps search-places workforce gis-analytics ai-vision capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 80cfbc9b9c7ce4b4590d05e1. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-ai-apis` and fingerprint `80cfbc9b9c7ce4b4590d05e1` recorded in the project A trusted backend or API client capable of HTTPS requests The corresponding product entitlement enabled for the developer application A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Vector Map Android SDK JetPack Compose: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-android-compose-demo` - Canonical: https://developer.mappls.com/launchpads/mappls-android-compose-demo ```json { "id": "source-launchpad:mappls-android-compose-demo", "kind": "Source launchpad", "title": "Mappls Vector Map Android SDK JetPack Compose: source launchpad", "description": "Run one reviewed sample seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-android-compose-demo", "eyebrow": "mappls-android-compose-demo · stateless · sample-learning", "keywords": "Sample Android maps search-places routes-navigation gis-analytics widgets-deep-links capture-feedback This is sample-classified evidence and proves a learning path, not a universally supported production release. The immutable evidence key is 37562302b0fcd2d2115c705f. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-android-compose-demo` and fingerprint `37562302b0fcd2d2115c705f` recorded in the project An Android project with a supported Gradle and Kotlin or Java toolchain OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Setup your project” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Android SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-android-sdk ```json { "id": "source-launchpad:mappls-android-sdk", "kind": "Source launchpad", "title": "Mappls Android SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-android-sdk", "eyebrow": "mappls-android-sdk · stateless · source-ready", "keywords": "SDK Android maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 2ccc51932d1b333b3561336c. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-android-sdk` and fingerprint `2ccc51932d1b333b3561336c` recorded in the project An Android project with a supported Gradle and Kotlin or Java toolchain OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Annotation Extension for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-annotation-extension-ios-distribution ```json { "id": "source-launchpad:mappls-annotation-extension-ios-distribution", "kind": "Source launchpad", "title": "Mappls Annotation Extension for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-annotation-extension-ios-distribution", "eyebrow": "mappls-annotation-extension-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dcb2a91e8716dd659728ce45. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-annotation-extension-ios-distribution` and fingerprint `dcb2a91e8716dd659728ce45` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Circles (MGLCircleStyleAnnotation)” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Annotation Extension for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-annotation-extension-ios-distribution-base ```json { "id": "source-launchpad:mappls-annotation-extension-ios-distribution-base", "kind": "Source launchpad", "title": "Mappls Annotation Extension for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-annotation-extension-ios-distribution-base", "eyebrow": "mappls-annotation-extension-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dcb2a91e8716dd659728ce45. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-annotation-extension-ios-distribution-base` and fingerprint `dcb2a91e8716dd659728ce45` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Circles (MGLCircleStyleAnnotation)” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [MapplsAPICore](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-api-core-ios-distribution ```json { "id": "source-launchpad:mappls-api-core-ios-distribution", "kind": "Source launchpad", "title": "[MapplsAPICore](): source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-api-core-ios-distribution", "eyebrow": "mappls-api-core-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS routes-navigation tracking-telematics capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 32bdcb00147ba07812b6903e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-api-core-ios-distribution` and fingerprint `32bdcb00147ba07812b6903e` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [MapplsAPIKit (REST API Kit for iOS)](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-api-kit-ios-distribution ```json { "id": "source-launchpad:mappls-api-kit-ios-distribution", "kind": "Source launchpad", "title": "[MapplsAPIKit (REST API Kit for iOS)](): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-api-kit-ios-distribution", "eyebrow": "mappls-api-kit-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics workforce gis-analytics capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 8067ef763bd59da11448365f. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-api-kit-ios-distribution` and fingerprint `8067ef763bd59da11448365f` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Objective C” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [MapplsAPIKit (REST API Kit for iOS)](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-api-kit-ios-distribution-base ```json { "id": "source-launchpad:mappls-api-kit-ios-distribution-base", "kind": "Source launchpad", "title": "[MapplsAPIKit (REST API Kit for iOS)](): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-api-kit-ios-distribution-base", "eyebrow": "mappls-api-kit-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics workforce capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fef99dda42ad1a82220474a2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-api-kit-ios-distribution-base` and fingerprint `fef99dda42ad1a82220474a2` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Objective C” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls App Widgets: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-app-widgets` - Canonical: https://developer.mappls.com/launchpads/mappls-app-widgets ```json { "id": "source-launchpad:mappls-app-widgets", "kind": "Source launchpad", "title": "Mappls App Widgets: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-app-widgets", "eyebrow": "mappls-app-widgets · stateless · source-ready", "keywords": "Deep link Widgets/Deep links search-places widgets-deep-links The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 1cb282714a115237fb8e116d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `mappls-app-widgets` and fingerprint `1cb282714a115237fb8e116d` recorded in the project A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsCamera SDK for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-camera-ios-distribution ```json { "id": "source-launchpad:mappls-camera-ios-distribution", "kind": "Source launchpad", "title": "MapplsCamera SDK for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-camera-ios-distribution", "eyebrow": "mappls-camera-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics offline-automotive capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 5188dcc0949df5e35f014373. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client. The exact source guide `mappls-camera-ios-distribution` and fingerprint `5188dcc0949df5e35f014373` recorded in the project An iOS project with Xcode and the package manager required by the source release A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Swift Package Manager” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Camera SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/launchpads/mappls-camera-sdk-android ```json { "id": "source-launchpad:mappls-camera-sdk-android", "kind": "Source launchpad", "title": "Mappls Camera SDK: source launchpad", "description": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-camera-sdk-android", "eyebrow": "mappls-camera-sdk-android · stateless · source-ready", "keywords": "SDK Android maps search-places tracking-telematics workforce widgets-deep-links offline-automotive capture-feedback The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 7840f9c22c6b19e5eafd7e97. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client. The exact source guide `mappls-camera-sdk-android` and fingerprint `7840f9c22c6b19e5eafd7e97` recorded in the project An Android project with a supported Gradle and Kotlin or Java toolchain A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Kotlin (build.gradle.kts)” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsCamera SDK for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/launchpads/mappls-camera-sdk-ios ```json { "id": "source-launchpad:mappls-camera-sdk-ios", "kind": "Source launchpad", "title": "MapplsCamera SDK for iOS: source launchpad", "description": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-camera-sdk-ios", "eyebrow": "mappls-camera-sdk-ios · stateless · source-ready", "keywords": "SDK iOS maps search-places tracking-telematics offline-automotive capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is be2f3bb17147aef1890e71e5. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client. The exact source guide `mappls-camera-sdk-ios` and fingerprint `be2f3bb17147aef1890e71e5` recorded in the project An iOS project with Xcode and the package manager required by the source release A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Swift Package Manager” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsDirectionUI for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-direction-ui-ios-distribution ```json { "id": "source-launchpad:mappls-direction-ui-ios-distribution", "kind": "Source launchpad", "title": "MapplsDirectionUI for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-direction-ui-ios-distribution", "eyebrow": "mappls-direction-ui-ios-distribution · hybrid · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c8594d45a1d168c0c9d4df60. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-direction-ui-ios-distribution` and fingerprint `c8594d45a1d168c0c9d4df60` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “MapplsDirectionsViewController” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsDirectionUI for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-direction-ui-ios-distribution-base ```json { "id": "source-launchpad:mappls-direction-ui-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsDirectionUI for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-direction-ui-ios-distribution-base", "eyebrow": "mappls-direction-ui-ios-distribution-base · hybrid · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c8594d45a1d168c0c9d4df60. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-direction-ui-ios-distribution-base` and fingerprint `c8594d45a1d168c0c9d4df60` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “MapplsDirectionsViewController” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsDrivingRangePlugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-drivingrange-plugin-ios-distribution ```json { "id": "source-launchpad:mappls-drivingrange-plugin-ios-distribution", "kind": "Source launchpad", "title": "MapplsDrivingRangePlugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution", "eyebrow": "mappls-drivingrange-plugin-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ab30151929b38a436eb0bfee. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-drivingrange-plugin-ios-distribution` and fingerprint `ab30151929b38a436eb0bfee` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “MapplsDrivingRangePlugin” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsDrivingRangePlugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-drivingrange-plugin-ios-distribution-base ```json { "id": "source-launchpad:mappls-drivingrange-plugin-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsDrivingRangePlugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-drivingrange-plugin-ios-distribution-base", "eyebrow": "mappls-drivingrange-plugin-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is d45431cb565d97f838db4aef. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-drivingrange-plugin-ios-distribution-base` and fingerprint `d45431cb565d97f838db4aef` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “MapplsDrivingRangePlugin” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsFeedbackKit for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-kit-ios-distribution ```json { "id": "source-launchpad:mappls-feedback-kit-ios-distribution", "kind": "Source launchpad", "title": "MapplsFeedbackKit for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-feedback-kit-ios-distribution", "eyebrow": "mappls-feedback-kit-ios-distribution · hybrid · binary-review", "keywords": "Distribution iOS search-places tracking-telematics widgets-deep-links offline-automotive capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 505b2357a59292ab056a8375. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-feedback-kit-ios-distribution` and fingerprint `505b2357a59292ab056a8375` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Get Report Categories” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsFeedbackKit for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-kit-ios-distribution-base ```json { "id": "source-launchpad:mappls-feedback-kit-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsFeedbackKit for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-feedback-kit-ios-distribution-base", "eyebrow": "mappls-feedback-kit-ios-distribution-base · hybrid · binary-review", "keywords": "Distribution iOS search-places tracking-telematics widgets-deep-links offline-automotive capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 505b2357a59292ab056a8375. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-feedback-kit-ios-distribution-base` and fingerprint `505b2357a59292ab056a8375` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Get Report Categories” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsFeedbackUIKit for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-uikit-ios-distribution ```json { "id": "source-launchpad:mappls-feedback-uikit-ios-distribution", "kind": "Source launchpad", "title": "MapplsFeedbackUIKit for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-feedback-uikit-ios-distribution", "eyebrow": "mappls-feedback-uikit-ios-distribution · hybrid · binary-review", "keywords": "Distribution iOS maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ce9bd0f45c46db6da97d67b3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-feedback-uikit-ios-distribution` and fingerprint `ce9bd0f45c46db6da97d67b3` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Present Navigation Controller” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsFeedbackUIKit for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-feedback-uikit-ios-distribution-base ```json { "id": "source-launchpad:mappls-feedback-uikit-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsFeedbackUIKit for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-feedback-uikit-ios-distribution-base", "eyebrow": "mappls-feedback-uikit-ios-distribution-base · hybrid · binary-review", "keywords": "Distribution iOS maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is ce9bd0f45c46db6da97d67b3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-feedback-uikit-ios-distribution-base` and fingerprint `ce9bd0f45c46db6da97d67b3` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Present Navigation Controller” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Flutter SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-flutter-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-flutter-sdk ```json { "id": "source-launchpad:mappls-flutter-sdk", "kind": "Source launchpad", "title": "Mappls Flutter SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-flutter-sdk", "eyebrow": "mappls-flutter-sdk · stateless · source-ready", "keywords": "SDK Flutter maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 512ead785542761a9bff4f58. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-flutter-sdk` and fingerprint `512ead785542761a9bff4f58` recorded in the project A Flutter project with Android and iOS platform configuration OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsGeoanalytics Plugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-geoanalytics-ios-distribution ```json { "id": "source-launchpad:mappls-geoanalytics-ios-distribution", "kind": "Source launchpad", "title": "MapplsGeoanalytics Plugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-geoanalytics-ios-distribution", "eyebrow": "mappls-geoanalytics-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is b68a2b4329dc3c4db762969b. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-geoanalytics-ios-distribution` and fingerprint `b68a2b4329dc3c4db762969b` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Initialization MapplsGeoanalyticsPlugin” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsGeoanalytics Plugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-geoanalytics-ios-distribution-base ```json { "id": "source-launchpad:mappls-geoanalytics-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsGeoanalytics Plugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-geoanalytics-ios-distribution-base", "eyebrow": "mappls-geoanalytics-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is b68a2b4329dc3c4db762969b. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-geoanalytics-ios-distribution-base` and fingerprint `b68a2b4329dc3c4db762969b` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Initialization MapplsGeoanalyticsPlugin” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsGeofenceUI Plugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-geofence-ui-ios-distribution ```json { "id": "source-launchpad:mappls-geofence-ui-ios-distribution", "kind": "Source launchpad", "title": "MapplsGeofenceUI Plugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-geofence-ui-ios-distribution", "eyebrow": "mappls-geofence-ui-ios-distribution · hybrid · binary-review", "keywords": "Distribution iOS maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dc9ee3cb13b907b481c65810. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-geofence-ui-ios-distribution` and fingerprint `dc9ee3cb13b907b481c65810` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Step 3 :- Initialization of GeofenceViewUI” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsGeofenceUI Plugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-geofence-ui-ios-distribution-base ```json { "id": "source-launchpad:mappls-geofence-ui-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsGeofenceUI Plugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-geofence-ui-ios-distribution-base", "eyebrow": "mappls-geofence-ui-ios-distribution-base · hybrid · binary-review", "keywords": "Distribution iOS maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is dc9ee3cb13b907b481c65810. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-geofence-ui-ios-distribution-base` and fingerprint `dc9ee3cb13b907b481c65810` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Step 3 :- Initialization of GeofenceViewUI” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Insight Embeddable Visualizations: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-insight-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-insight-sdk ```json { "id": "source-launchpad:mappls-insight-sdk", "kind": "Source launchpad", "title": "Mappls Insight Embeddable Visualizations: source launchpad", "description": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-insight-sdk", "eyebrow": "mappls-insight-sdk · stateless · source-ready", "keywords": "SDK Web gis-analytics offline-automotive capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 0ae2cda7c0a988f9a2be664e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-insight-sdk` and fingerprint `0ae2cda7c0a988f9a2be664e` recorded in the project A browser application and an allowed development origin OAuth client credentials issued for the intended Mappls project A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Sample code for Insight Dashboard” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Intouch Android SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-android-sdk ```json { "id": "source-launchpad:mappls-intouch-android-sdk", "kind": "Source launchpad", "title": "Mappls Intouch Android SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-intouch-android-sdk", "eyebrow": "mappls-intouch-android-sdk · stateful · source-ready", "keywords": "SDK Android tracking-telematics workforce gis-analytics widgets-deep-links capture-feedback The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 47e2aea8b4e7549e12b44dfe. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-intouch-android-sdk` and fingerprint `47e2aea8b4e7549e12b44dfe` recorded in the project An Android project with a supported Gradle and Kotlin or Java toolchain OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · Mappls Intouch IOS Distribution: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-ios-distribution ```json { "id": "source-launchpad:mappls-intouch-ios-distribution", "kind": "Source launchpad", "title": "Mappls Intouch IOS Distribution: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-intouch-ios-distribution", "eyebrow": "mappls-intouch-ios-distribution · stateful · selection-required", "keywords": "Distribution iOS tracking-telematics No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 9b4522931dc0fa13f91cd719. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-intouch-ios-distribution` and fingerprint `9b4522931dc0fa13f91cd719` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · Mappls Intouch IOS Distribution Base: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-ios-distribution-base ```json { "id": "source-launchpad:mappls-intouch-ios-distribution-base", "kind": "Source launchpad", "title": "Mappls Intouch IOS Distribution Base: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-intouch-ios-distribution-base", "eyebrow": "mappls-intouch-ios-distribution-base · stateful · selection-required", "keywords": "Distribution iOS tracking-telematics No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 01ba4719c80b6fe911b091a7. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-intouch-ios-distribution-base` and fingerprint `01ba4719c80b6fe911b091a7` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · [Mappls Intouch SDK](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-ios-sdk ```json { "id": "source-launchpad:mappls-intouch-ios-sdk", "kind": "Source launchpad", "title": "[Mappls Intouch SDK](): source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-intouch-ios-sdk", "eyebrow": "mappls-intouch-ios-sdk · stateful · source-ready", "keywords": "SDK iOS tracking-telematics workforce gis-analytics capture-feedback The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is d11c093839d4dfcabfdba4e9. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-intouch-ios-sdk` and fingerprint `d11c093839d4dfcabfdba4e9` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · Mappls Intouch REST Apis: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-intouch-rest-apis` - Canonical: https://developer.mappls.com/launchpads/mappls-intouch-rest-apis ```json { "id": "source-launchpad:mappls-intouch-rest-apis", "kind": "Source launchpad", "title": "Mappls Intouch REST Apis: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-intouch-rest-apis", "eyebrow": "mappls-intouch-rest-apis · stateful · source-ready", "keywords": "REST API REST routes-navigation tracking-telematics capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 06df37d758e9eed1e65f69df. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-intouch-rest-apis` and fingerprint `06df37d758e9eed1e65f69df` recorded in the project A trusted backend or API client capable of HTTPS requests OAuth client credentials issued for the intended Mappls project A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · Mappls iOS SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-ios-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-ios-sdk ```json { "id": "source-launchpad:mappls-ios-sdk", "kind": "Source launchpad", "title": "Mappls iOS SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-ios-sdk", "eyebrow": "mappls-ios-sdk · stateless · source-ready", "keywords": "SDK iOS maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 3e3adfeaccf78bbea89a8cbb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-ios-sdk` and fingerprint `3e3adfeaccf78bbea89a8cbb` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls LMS IOS Distribution: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-lms-ios-distribution ```json { "id": "source-launchpad:mappls-lms-ios-distribution", "kind": "Source launchpad", "title": "Mappls LMS IOS Distribution: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-lms-ios-distribution", "eyebrow": "mappls-lms-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS other This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is a9995a27ea65a15fcd371bcb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-lms-ios-distribution` and fingerprint `a9995a27ea65a15fcd371bcb` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls LMS IOS Distribution Base: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-lms-ios-distribution-base ```json { "id": "source-launchpad:mappls-lms-ios-distribution-base", "kind": "Source launchpad", "title": "Mappls LMS IOS Distribution Base: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-lms-ios-distribution-base", "eyebrow": "mappls-lms-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS other This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c5f9894dd4d6f5a5c44eba24. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-lms-ios-distribution-base` and fingerprint `c5f9894dd4d6f5a5c44eba24` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Location Capture SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-location-capture-android-sdk ```json { "id": "source-launchpad:mappls-location-capture-android-sdk", "kind": "Source launchpad", "title": "Mappls Location Capture SDK: source launchpad", "description": "Run one reviewed sdk seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-location-capture-android-sdk", "eyebrow": "mappls-location-capture-android-sdk · hybrid · source-ready", "keywords": "SDK Android search-places tracking-telematics workforce widgets-deep-links capture-feedback The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is b698bbb4e4a361b24ec4a5d2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `mappls-location-capture-android-sdk` and fingerprint `b698bbb4e4a361b24ec4a5d2` recorded in the project An Android project with a supported Gradle and Kotlin or Java toolchain A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Kotlin (settings.gradle.kts)” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Location Capture IOS SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-location-capture-ios-sdk ```json { "id": "source-launchpad:mappls-location-capture-ios-sdk", "kind": "Source launchpad", "title": "Mappls Location Capture IOS SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-location-capture-ios-sdk", "eyebrow": "mappls-location-capture-ios-sdk · hybrid · selection-required", "keywords": "SDK iOS capture-feedback No readable public README was retrieved, so provider-specific binding stops at source and entitlement selection. The immutable evidence key is 01ba4719c80b6fe911b091a7. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `mappls-location-capture-ios-sdk` and fingerprint `01ba4719c80b6fe911b091a7` recorded in the project An iOS project with Xcode and the package manager required by the source release A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Location Capture SDK (iOS): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-location-capture-sdk-ios-distribution ```json { "id": "source-launchpad:mappls-location-capture-sdk-ios-distribution", "kind": "Source launchpad", "title": "Mappls Location Capture SDK (iOS): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-location-capture-sdk-ios-distribution", "eyebrow": "mappls-location-capture-sdk-ios-distribution · hybrid · binary-review", "keywords": "Distribution iOS tracking-telematics workforce capture-feedback This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is aa62d5d6bb832bc41af55ce8. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-location-capture-sdk-ios-distribution` and fingerprint `aa62d5d6bb832bc41af55ce8` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Using Swift Package Manager (SPM)” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [Mappls Map SDK](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-map-ios-distribution ```json { "id": "source-launchpad:mappls-map-ios-distribution", "kind": "Source launchpad", "title": "[Mappls Map SDK](): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-map-ios-distribution", "eyebrow": "mappls-map-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fd3d74d52bd9f7cd6db39df1. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-map-ios-distribution` and fingerprint `fd3d74d52bd9f7cd6db39df1` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Dependencies” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [Mappls Map SDK](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-map-ios-distribution-base ```json { "id": "source-launchpad:mappls-map-ios-distribution-base", "kind": "Source launchpad", "title": "[Mappls Map SDK](): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-map-ios-distribution-base", "eyebrow": "mappls-map-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c44a5c147bbf3ed89e854974. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-map-ios-distribution-base` and fingerprint `c44a5c147bbf3ed89e854974` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Dependencies” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [Mappls Map SDK](): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-map-move-ios-distribution-base ```json { "id": "source-launchpad:mappls-map-move-ios-distribution-base", "kind": "Source launchpad", "title": "[Mappls Map SDK](): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-map-move-ios-distribution-base", "eyebrow": "mappls-map-move-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is df6752e592f6282a73260c2e. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-map-move-ios-distribution-base` and fingerprint `df6752e592f6282a73260c2e` recorded in the project An iOS project with Xcode and the package manager required by the source release OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Dependencies” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-finder-ios-distribution ```json { "id": "source-launchpad:mappls-nearby-finder-ios-distribution", "kind": "Source launchpad", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-nearby-finder-ios-distribution", "eyebrow": "mappls-nearby-finder-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c98e46c291897e99300024c3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client. The exact source guide `mappls-nearby-finder-ios-distribution` and fingerprint `c98e46c291897e99300024c3` recorded in the project An iOS project with Xcode and the package manager required by the source release A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Installation” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · [Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-finder-ios-distribution-base ```json { "id": "source-launchpad:mappls-nearby-finder-ios-distribution-base", "kind": "Source launchpad", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records): source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-nearby-finder-ios-distribution-base", "eyebrow": "mappls-nearby-finder-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is c98e46c291897e99300024c3. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Use only the public application credential class documented for the exact package, origin, bundle, or signing identity. Privileged server credentials remain outside the client. The exact source guide `mappls-nearby-finder-ios-distribution-base` and fingerprint `c98e46c291897e99300024c3` recorded in the project An iOS project with Xcode and the package manager required by the source release A Mappls project key restricted to the intended app, domain, or backend The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Installation” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Nearby Search Widget for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-ui-ios-distribution ```json { "id": "source-launchpad:mappls-nearby-ui-ios-distribution", "kind": "Source launchpad", "title": "Mappls Nearby Search Widget for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-nearby-ui-ios-distribution", "eyebrow": "mappls-nearby-ui-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 139be695050e0183761cf105. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-nearby-ui-ios-distribution` and fingerprint `139be695050e0183761cf105` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “MapplsNearbyCategoriesViewController” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Nearby Search Widget for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-nearby-ui-ios-distribution-base ```json { "id": "source-launchpad:mappls-nearby-ui-ios-distribution-base", "kind": "Source launchpad", "title": "Mappls Nearby Search Widget for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-nearby-ui-ios-distribution-base", "eyebrow": "mappls-nearby-ui-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps search-places tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 97c2b14769200eece962afc2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-nearby-ui-ios-distribution-base` and fingerprint `97c2b14769200eece962afc2` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “MapplsNearbyCategoriesViewController” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsRasterCatalogue Plugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-raster-catalogue-ios-distribution ```json { "id": "source-launchpad:mappls-raster-catalogue-ios-distribution", "kind": "Source launchpad", "title": "MapplsRasterCatalogue Plugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-raster-catalogue-ios-distribution", "eyebrow": "mappls-raster-catalogue-ios-distribution · stateless · binary-review", "keywords": "Distribution iOS maps tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 4bc01e5166d2793f3a0ca310. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-raster-catalogue-ios-distribution` and fingerprint `4bc01e5166d2793f3a0ca310` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Initialization MapplsRasterCatalogue Plugin” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsRasterCatalogue Plugin for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-raster-catalogue-ios-distribution-base ```json { "id": "source-launchpad:mappls-raster-catalogue-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsRasterCatalogue Plugin for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-raster-catalogue-ios-distribution-base", "eyebrow": "mappls-raster-catalogue-ios-distribution-base · stateless · binary-review", "keywords": "Distribution iOS maps tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is 4bc01e5166d2793f3a0ca310. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-raster-catalogue-ios-distribution-base` and fingerprint `4bc01e5166d2793f3a0ca310` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Initialization MapplsRasterCatalogue Plugin” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Intouch React Native SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-react-native-intouch-sdk ```json { "id": "source-launchpad:mappls-react-native-intouch-sdk", "kind": "Source launchpad", "title": "Mappls Intouch React Native SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-react-native-intouch-sdk", "eyebrow": "mappls-react-native-intouch-sdk · stateful · source-ready", "keywords": "SDK React Native tracking-telematics workforce capture-feedback The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is cb0703543c8025cdd17cc535. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `mappls-react-native-intouch-sdk` and fingerprint `cb0703543c8025cdd17cc535` recorded in the project A React Native project with both native build environments A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · Mappls React Native SDK: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-react-native-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-react-native-sdk ```json { "id": "source-launchpad:mappls-react-native-sdk", "kind": "Source launchpad", "title": "Mappls React Native SDK: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-react-native-sdk", "eyebrow": "mappls-react-native-sdk · stateless · source-ready", "keywords": "SDK React Native maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 2bf827b9457541a5e1624942. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-react-native-sdk` and fingerprint `2bf827b9457541a5e1624942` recorded in the project A React Native project with both native build environments OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Map APIs (REST) !: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-rest-apis` - Canonical: https://developer.mappls.com/launchpads/mappls-rest-apis ```json { "id": "source-launchpad:mappls-rest-apis", "kind": "Source launchpad", "title": "Mappls Map APIs (REST) !: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-rest-apis", "eyebrow": "mappls-rest-apis · stateless · source-ready", "keywords": "REST API REST maps search-places routes-navigation gis-analytics capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is a27fe1435b9cd778f7d5352d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-rest-apis` and fingerprint `a27fe1435b9cd778f7d5352d` recorded in the project A trusted backend or API client capable of HTTPS requests OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsUIWidgets - UI Components SDK for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/launchpads/mappls-ui-widget-ios-distribution ```json { "id": "source-launchpad:mappls-ui-widget-ios-distribution", "kind": "Source launchpad", "title": "MapplsUIWidgets - UI Components SDK for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-ui-widget-ios-distribution", "eyebrow": "mappls-ui-widget-ios-distribution · hybrid · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is fa23204b72658dbd8f725bcd. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-ui-widget-ios-distribution` and fingerprint `fa23204b72658dbd8f725bcd` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Add a full-screen control” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · MapplsUIWidgets - UI Components SDK for iOS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/launchpads/mappls-ui-widget-ios-distribution-base ```json { "id": "source-launchpad:mappls-ui-widget-ios-distribution-base", "kind": "Source launchpad", "title": "MapplsUIWidgets - UI Components SDK for iOS: source launchpad", "description": "Run one reviewed distribution seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-ui-widget-ios-distribution-base", "eyebrow": "mappls-ui-widget-ios-distribution-base · hybrid · binary-review", "keywords": "Distribution iOS maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform This repository is distribution evidence; package presence does not prove the owning product contract or compatibility matrix. The immutable evidence key is e117a13d81e7182e759a4d72. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-ui-widget-ios-distribution-base` and fingerprint `e117a13d81e7182e759a4d72` recorded in the project An iOS project with Xcode and the package manager required by the source release The corresponding product entitlement enabled for the developer application An approved package version, checksum, dependency matrix, entitlement, and owning product guide A reviewed, credential-free source example starting with “Add a full-screen control” An application-owned intent, generation, candidate, commit/review, cancellation, and cleanup model The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Sign up for Mappls: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-web-maps` - Canonical: https://developer.mappls.com/launchpads/mappls-web-maps ```json { "id": "source-launchpad:mappls-web-maps", "kind": "Source launchpad", "title": "Sign up for Mappls: source launchpad", "description": "Run one reviewed guide seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-web-maps", "eyebrow": "mappls-web-maps · stateless · source-ready", "keywords": "Guide Web maps search-places routes-navigation gis-analytics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 6d102a2fe3c3301e12220a39. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Record a non-secret entitlement reference and the approved package identity. License material, activation payloads, private package URLs, and provider credentials never enter this starter archive. The exact source guide `mappls-web-maps` and fingerprint `6d102a2fe3c3301e12220a39` recorded in the project A browser application and an allowed development origin The corresponding product entitlement enabled for the developer application A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Installation” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Web Maps JS: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-web-maps-js` - Canonical: https://developer.mappls.com/launchpads/mappls-web-maps-js ```json { "id": "source-launchpad:mappls-web-maps-js", "kind": "Source launchpad", "title": "Mappls Web Maps JS: source launchpad", "description": "Run one reviewed guide seam from the exact repository evidence, then prove its failure and lifecycle boundary.", "href": "/launchpads/mappls-web-maps-js", "eyebrow": "mappls-web-maps-js · stateless · source-ready", "keywords": "Guide Web maps search-places routes-navigation gis-analytics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 5b7bd5c66a780e8315d64bec. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-web-maps-js` and fingerprint `5b7bd5c66a780e8315d64bec` recorded in the project A browser application and an allowed development origin OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A reviewed, credential-free source example starting with “Adding the Map Script to your web page” A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Mappls Web Plugins: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-web-plugins` - Canonical: https://developer.mappls.com/launchpads/mappls-web-plugins ```json { "id": "source-launchpad:mappls-web-plugins", "kind": "Source launchpad", "title": "Mappls Web Plugins: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-web-plugins", "eyebrow": "mappls-web-plugins · stateless · source-ready", "keywords": "Widget Web Widgets/Deep links maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 0500ead3cc1dcb4e9f2fcd08. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. Keep OAuth client credentials and token exchange in an approved trusted runtime. Client UI receives only bounded application results, never the client secret or refresh material. The exact source guide `mappls-web-plugins` and fingerprint `0500ead3cc1dcb4e9f2fcd08` recorded in the project A browser application and an allowed development origin OAuth client credentials issued for the intended Mappls project A Mappls project key restricted to the intended app, domain, or backend A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Workmate SDK - Android: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/launchpads/mappls-workmate-android-sdk ```json { "id": "source-launchpad:mappls-workmate-android-sdk", "kind": "Source launchpad", "title": "Workmate SDK - Android: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/mappls-workmate-android-sdk", "eyebrow": "mappls-workmate-android-sdk · stateful · source-ready", "keywords": "SDK Android tracking-telematics workforce identity-platform The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is e04a9f1e646d0348e9df1cdb. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `mappls-workmate-android-sdk` and fingerprint `e04a9f1e646d0348e9df1cdb` recorded in the project An Android project with a supported Gradle and Kotlin or Java toolchain A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A durable aggregate identity, idempotency key, optimistic version, audit, outbox, reconciliation, privacy, and retirement design The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content. A state-changing response is lost The provider may have committed while the application lacks acknowledgement. Reconcile by stable provider/business identity and original idempotency key; never send a new command identity until authoritative state is known." } ``` ## search-destination · Skydnn AI APIs: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:skydnn-aiapi-docs` - Canonical: https://developer.mappls.com/launchpads/skydnn-aiapi-docs ```json { "id": "source-launchpad:skydnn-aiapi-docs", "kind": "Source launchpad", "title": "Skydnn AI APIs: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/skydnn-aiapi-docs", "eyebrow": "skydnn-aiapi-docs · stateless · source-ready", "keywords": "REST API REST AI/MCP maps gis-analytics ai-vision capture-feedback The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is f407d95bd8b3db716f04033d. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `skydnn-aiapi-docs` and fingerprint `f407d95bd8b3db716f04033d` recorded in the project A trusted backend or API client capable of HTTPS requests A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · V1.2.0 Logs: source launchpad - Identity: `search-destination:Source launchpad:source-launchpad:v1-2-0-logs` - Canonical: https://developer.mappls.com/launchpads/v1-2-0-logs ```json { "id": "source-launchpad:v1-2-0-logs", "kind": "Source launchpad", "title": "V1.2.0 Logs: source launchpad", "description": "Complete source, release, entitlement, and adapter selection without inventing provider syntax.", "href": "/launchpads/v1-2-0-logs", "eyebrow": "v1.2.0-logs · stateless · source-ready", "keywords": "Sample Unspecified other The current repository snapshot provides a readable source guide for this first-success path. The immutable evidence key is 29445321439b02ac0adff1a2. Confirm the released version, account region, entitlement, authentication, and supported product contract before live traffic. This source does not establish a complete credential contract. Keep the adapter credential-free until the developer application, runtime, restriction, entitlement, and current authentication generation are approved. The exact source guide `v1-2-0-logs` and fingerprint `29445321439b02ac0adff1a2` recorded in the project A clean project or adapter module with no inherited Mappls credential or opaque provider state A product-owner decision for the first supported operation because this source provides no credential-free copyable fenced example A bounded request or screen lifecycle with explicit timeout, error, and teardown behavior The repository exists but the selected package, endpoint, or product cannot be confirmed A distribution, sample, legacy name, public README, local candidate, and account entitlement are being treated as interchangeable authority. Keep binding selection-required; capture the exact source and account evidence, then obtain an owning product decision instead of borrowing adjacent syntax. Authentication or entitlement is rejected The application identity, credential generation, restriction, host, region, package, product, or entitlement does not match the selected source line. Retain only safe request/configuration identity, reconcile the developer application and source manifest, rotate anything exposed, and retry only after the mismatch is explicit. The first interaction times out, returns empty, or becomes unavailable Network, provider, region, quota, lifecycle readiness, or input constraints are unresolved. Return a typed unavailable/empty result, preserve the same request identity for a safe read retry, and never manufacture a fixture success as provider evidence. A callback, result, or event arrives after cancellation or replacement Screen, request, controller, subscription, or aggregate generation ownership is missing. Reject the stale generation, dispose it once, retain current application state, and count the late result without persisting opaque content." } ``` ## search-destination · Trusted REST service starter - Identity: `search-destination:Starter kit:starter-kit:rest-api-starter` - Canonical: https://developer.mappls.com/starter-kits/rest-api-starter ```json { "id": "starter-kit:rest-api-starter", "kind": "Starter kit", "title": "Trusted REST service starter", "description": "A dependency-free autosuggest service with bounded input, fixture-first behavior, abortable live calls, normalized output, and credential-safe errors.", "href": "/starter-kits/rest-api-starter", "eyebrow": "REST · JavaScript · public-source", "keywords": "Node.js service rest-api mappls-rest-apis Load the current restricted static key only inside the trusted process. Legacy OAuth and InTouch bearer credentials are separate generations and must never be mixed by inference. The public REST repository and normalized operation are repository evidence; the issued account remains authoritative for host, auth generation, quota, and region. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof package.json json Run and test commands src/service.mjs javascript Fixture/live provider seam src/server.mjs javascript Bounded application endpoint test/service.test.mjs javascript Credential-free contract tests" } ``` ## search-destination · Accessible web map host starter - Identity: `search-destination:Starter kit:starter-kit:web-map-starter` - Canonical: https://developer.mappls.com/starter-kits/web-map-starter ```json { "id": "starter-kit:web-map-starter", "kind": "Starter kit", "title": "Accessible web map host starter", "description": "A responsive keyboard-accessible map host with explicit loading, ready, unavailable, selection, and teardown states around a replaceable SDK adapter.", "href": "/starter-kits/web-map-starter", "eyebrow": "Web · HTML + JavaScript · public-source", "keywords": "Static web application web-map mappls-web-maps mappls-web-maps-js Use only the browser-supported public key restricted to exact origins. Privileged REST credentials stay on a backend-for-frontend. The selected Web Maps source contains current and sample evidence; confirm the script/package line and allowed origin against the target project. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof index.html html Accessible visual and text shell src/app.js javascript SDK-owned lifecycle seam styles.css css Responsive visible states" } ``` ## search-destination · Android lifecycle adapter starter - Identity: `search-destination:Starter kit:starter-kit:android-native-starter` - Canonical: https://developer.mappls.com/starter-kits/android-native-starter ```json { "id": "starter-kit:android-native-starter", "kind": "Starter kit", "title": "Android lifecycle adapter starter", "description": "A Kotlin contract that keeps camera, selection, permission, recreation, and teardown state outside unconfirmed SDK types.", "href": "/starter-kits/android-native-starter", "eyebrow": "Android · Kotlin · public-source", "keywords": "Android adapter module android-native mappls-android-sdk mappls-android-compose-demo Use only the documented Android credential configuration restricted to the package and signing identity. Server credentials never belong in the APK. The public repositories are sample-classified evidence; confirm Maven coordinates, BoM, AGP/Kotlin, min/target SDK, and supported release with Mappls. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof src/main/kotlin/MapFeature.kt kotlin SDK-independent feature contract src/main/kotlin/FixtureMapAdapter.kt kotlin Deterministic native lifecycle fixture BUILD_SELECTION.md markdown AGP, Kotlin, repository, and SDK gate" } ``` ## search-destination · iOS view-ownership starter - Identity: `search-destination:Starter kit:starter-kit:ios-native-starter` - Canonical: https://developer.mappls.com/starter-kits/ios-native-starter ```json { "id": "starter-kit:ios-native-starter", "kind": "Starter kit", "title": "iOS view-ownership starter", "description": "A dependency-free Swift feature contract that isolates selected package types behind main-actor lifecycle and restoration.", "href": "/starter-kits/ios-native-starter", "eyebrow": "iOS · Swift · public-source", "keywords": "Swift package ios-native mappls-map-ios-distribution mappls-api-kit-ios-distribution Use only the documented app credential restricted to the bundle/team context. Keep server secrets and privileged exchanges outside the application bundle. Public distribution repositories identify candidate package lines, not a universal version matrix. Confirm SwiftPM products, binary checksums, Xcode/Swift, deployment target, and extension compatibility together. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof Package.swift swift Dependency-free contract package Sources/MapplsStarter/MapFeature.swift swift Main-actor SDK seam Sources/MapplsStarter/FixtureMapAdapter.swift swift Deterministic view lifecycle fixture" } ``` ## search-destination · React Native bridge-contract starter - Identity: `search-destination:Starter kit:starter-kit:react-native-map-starter` - Canonical: https://developer.mappls.com/starter-kits/react-native-map-starter ```json { "id": "starter-kit:react-native-map-starter", "kind": "Starter kit", "title": "React Native bridge-contract starter", "description": "A typed shared state contract with independent Android and iOS adapter qualification instead of assumed wrapper parity.", "href": "/starter-kits/react-native-map-starter", "eyebrow": "React Native · TypeScript · public-source", "keywords": "Cross-platform feature module react-native-map mappls-react-native-sdk Configure Android and iOS app credentials independently and keep privileged calls on a backend. JavaScript configuration is not a secret store. The public wrapper is sample-classified. Confirm React Native, wrapper, New Architecture status, Gradle/Kotlin, Xcode/Swift, and underlying native Mappls versions as one release unit. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof src/mappls-feature.ts typescript Shared bridge contract src/fixture-adapter.ts typescript Deterministic bridge fixture NATIVE_MATRIX.md markdown Independent native release checklist" } ``` ## search-destination · Flutter place-selection starter - Identity: `search-destination:Starter kit:starter-kit:flutter-map-starter` - Canonical: https://developer.mappls.com/starter-kits/flutter-map-starter ```json { "id": "starter-kit:flutter-map-starter", "kind": "Starter kit", "title": "Flutter place-selection starter", "description": "A Dart selection aggregate and adapter seam preserving Mappls Pin identity while Android and iOS distributions are verified independently.", "href": "/starter-kits/flutter-map-starter", "eyebrow": "Flutter · Dart · public-source", "keywords": "Flutter feature package flutter-map mappls-flutter-sdk flutter-mapmyindia-gl Configure separately restricted Android and iOS app credentials in their native projects. Do not put server secrets in Dart assets or compile-time constants. The corpus contains Mappls sample evidence and an older current-classified MapmyIndia wrapper. Confirm the supported Flutter/Dart plugin and both native SDK lines before choosing one. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof pubspec.yaml yaml Dependency-neutral package lib/mappls_feature.dart dart Stable selection and adapter contract lib/fixture_adapter.dart dart Credential-free fixture" } ``` ## search-destination · Cordova stabilization starter - Identity: `search-destination:Starter kit:starter-kit:cordova-maintenance-starter` - Canonical: https://developer.mappls.com/starter-kits/cordova-maintenance-starter ```json { "id": "starter-kit:cordova-maintenance-starter", "kind": "Starter kit", "title": "Cordova stabilization starter", "description": "A legacy-safe WebView facade that waits for device readiness, owns teardown, and keeps a web/deep-link fallback available for migration.", "href": "/starter-kits/cordova-maintenance-starter", "eyebrow": "Cordova · JavaScript · legacy-maintenance", "keywords": "Legacy capability facade cordova-maintenance mapmyindia-map-cordova-ionic-beta mapmyindia-restapi-cordova-ionic-beta Treat all client credentials as platform-restricted public credentials and keep privileged REST work on a backend. Never reuse legacy auth with a current host by resemblance. Only legacy/beta Cordova sources exist in the public corpus. This quickstart is for stabilizing an existing estate—not recommending Cordova for new development. Use the migration track to select a supported target. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof config.xml xml Minimal legacy host identity www/index.html html WebView host with deep-link fallback www/js/index.js javascript Device-ready lifecycle facade" } ``` ## search-destination · Xamarin extraction starter - Identity: `search-destination:Starter kit:starter-kit:xamarin-maintenance-starter` - Canonical: https://developer.mappls.com/starter-kits/xamarin-maintenance-starter ```json { "id": "starter-kit:xamarin-maintenance-starter", "kind": "Starter kit", "title": "Xamarin extraction starter", "description": "A shared .NET contract extracting business identity and commands from legacy bindings before independent Android and iOS successor selection.", "href": "/starter-kits/xamarin-maintenance-starter", "eyebrow": "Xamarin · C# · entitlement-required", "keywords": "Migration contract library xamarin-maintenance Use separately restricted native app credentials and keep privileged service credentials on a backend. Do not move secrets into shared assemblies during extraction. No public repository in the snapshot provides a current Xamarin successor. Obtain the existing binding/source and target-platform contract from Mappls and use the migration principles before implementation. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof MapplsMigration.csproj xml Portable contract build MapplsFeature.cs csharp Binding-independent contract MIGRATION.md markdown Characterization and replacement sequence" } ``` ## search-destination · Embedded Linux supervisor starter - Identity: `search-destination:Starter kit:starter-kit:linux-embedded-starter` - Canonical: https://developer.mappls.com/starter-kits/linux-embedded-starter ```json { "id": "starter-kit:linux-embedded-starter", "kind": "Starter kit", "title": "Embedded Linux supervisor starter", "description": "A proprietary-runtime-neutral C++ seam with boot, health, degraded, stopped, and teardown states for entitled Linux distributions.", "href": "/starter-kits/linux-embedded-starter", "eyebrow": "Linux · C++ · entitlement-required", "keywords": "Supervised native process linux-embedded Use device/workload identity and entitlement delivered through the approved provisioning channel; never bake fleet-wide secrets into an image or package. The public snapshot has no platform-specific Linux distribution guide. The runtime, ABI, compiler, graphics, activation, and data contract must come from the entitled private distribution. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof CMakeLists.txt cmake Dependency-neutral native build src/runtime_adapter.hpp cpp Entitled runtime boundary src/main.cpp cpp Bounded fixture entrypoint" } ``` ## search-destination · Automotive release-manifest starter - Identity: `search-destination:Starter kit:starter-kit:automotive-navigation-starter` - Canonical: https://developer.mappls.com/starter-kits/automotive-navigation-starter ```json { "id": "starter-kit:automotive-navigation-starter", "kind": "Starter kit", "title": "Automotive release-manifest starter", "description": "A protected-artifact-neutral release skeleton for runtime/data/configuration/voice compatibility, qualification, atomic switch, and rollback.", "href": "/starter-kits/automotive-navigation-starter", "eyebrow": "Automotive · C++ + JSON · entitlement-required", "keywords": "Dual-slot release controller automotive-navigation Provision per-device identity, activation, regions, runtime, and map data through the approved vehicle/fleet control plane. Avoid shared embedded credentials. The public snapshot does not establish an automotive SDK or safety contract. Obtain the entitled runtime, data, activation, vehicle-interface, HMI, and regulatory requirements before binding an adapter. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof release-manifest.example.json json Compatible release unit src/release_controller.hpp cpp Atomic update contract QUALIFICATION.md markdown Vehicle and interruption matrix" } ``` ## search-destination · Widget journey host starter - Identity: `search-destination:Starter kit:starter-kit:widgets-place-starter` - Canonical: https://developer.mappls.com/starter-kits/widgets-place-starter ```json { "id": "starter-kit:widgets-place-starter", "kind": "Starter kit", "title": "Widget journey host starter", "description": "A credential-free nearby iframe host with loading, ready, fallback, candidate, committed, and destroyed application states.", "href": "/starter-kits/widgets-place-starter", "eyebrow": "Widgets · HTML + JavaScript · public-source", "keywords": "Accessible iframe host widgets-place mappls-web-plugins Use only the widget/browser credential class restricted to exact origins. Validate every postMessage/callback payload and keep privileged operations on the server. The current public Web Plugins guide spans current vector and legacy raster integration branches; source activity is not a support promise. Confirm the exact widget, script, origin, event schema, release, entitlement, and authentication line before implementation. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof index.html html Accessible widget host host.js javascript Explicit iframe lifecycle HOST_STATES.md markdown Application-owned state" } ``` ## search-destination · Deep-link handoff starter - Identity: `search-destination:Starter kit:starter-kit:deep-links-starter` - Canonical: https://developer.mappls.com/starter-kits/deep-links-starter ```json { "id": "starter-kit:deep-links-starter", "kind": "Starter kit", "title": "Deep-link handoff starter", "description": "A dependency-free navigation-link builder with validation and separate click, app-attempt, fallback, and arrival evidence.", "href": "/starter-kits/deep-links-starter", "eyebrow": "Deep links · HTML + JavaScript · public-source", "keywords": "Zero-SDK web handoff deep-links mappls-app-widgets Deep links contain no credential. Put only bounded non-sensitive intent in the URL; precise private/user data and server secrets must never become query parameters. Use the exact link shape documented by the current App Widgets source. The scaffold below deliberately receives that approved base rather than inventing an undocumented path. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof index.html html Validated destination form app.js javascript Exact documented navigation shape HANDOFF.md markdown Evidence and privacy rules" } ``` ## search-destination · MCP client policy starter - Identity: `search-destination:Starter kit:starter-kit:mcp-agent-starter` - Canonical: https://developer.mappls.com/starter-kits/mcp-agent-starter ```json { "id": "starter-kit:mcp-agent-starter", "kind": "Starter kit", "title": "MCP client policy starter", "description": "A dependency-free policy starter separating offline and live-read MCP resources before adding an SDK transport.", "href": "/starter-kits/mcp-agent-starter", "eyebrow": "MCP · JavaScript + JSON · local-reference", "keywords": "AI tool-governance module mcp-agent Keep provider credentials in the MCP server process or approved secret provider, never model context or client configuration committed to source. A remote internal gateway bearer or issuer-bound OAuth access token is independent from every Mappls provider credential. Documentation and migration tools require no live credential. The MCP implementation is maintained in this repository and protocol-tested over stdio and Streamable HTTP. Live tool success still depends on the issued account, operation, region, and credential scope; production OAuth authorization-server registration, consent, lifecycle, and revocation remain company integrations. README.md markdown Setup and first-success boundary STARTER_MANIFEST.json json Machine-readable project scope .env.example dotenv Blank non-secret configuration EVIDENCE.md markdown Source and selection boundary ACCEPTANCE.md markdown Success and hostile-path proof mcp.config.example.json json Credential-empty transports src/policy.mjs javascript Least-authority tool policy test/policy.test.mjs javascript Executable policy tests" } ``` ## search-destination · Address Standardization API - Identity: `search-destination:API:api:core-location-get-api-places-woodpecker-address-standardization-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-woodpecker-address-standardization-api ```json { "id": "api:core-location-get-api-places-woodpecker-address-standardization-api", "kind": "API", "title": "Address Standardization API", "description": "Address Standardization API is a process to convert the non formatted address into the user readable format by omitting unnecessary information in the address. MapmyIndia address standardization API provides real addresses along with admin and other information. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo", "href": "/api-reference/core-location-get-api-places-woodpecker-address-standardization-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/api/places/woodpecker GET Core Location Address Standardization API WoodpeckerAPI stateless request-response" } ``` ## search-destination · AutoSuggest API - Identity: `search-destination:API:api:core-location-get-api-places-search-json-autosuggest-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-search-json-autosuggest-api ```json { "id": "api:core-location-get-api-places-search-json-autosuggest-api", "kind": "API", "title": "AutoSuggest API", "description": "The Autosuggest API helps users to complete queries faster by adding intelligent search capabilities to your web or mobile app. This API returns a list of results as well as suggested queries as the user types in the search field. This API also supports Hindi language. If a user enters query in hindi language he will get results in Hindi. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-api-places-search-json-autosuggest-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/api/places/search/json GET Core Location Autosuggest API AutoSuggestAPI stateless request-response" } ``` ## search-destination · Distance Matrix API - Identity: `search-destination:API:api:core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api ```json { "id": "api:core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "kind": "API", "title": "Distance Matrix API", "description": "This REST API computes the distance and durations in a matrix of routes between a set of source/primary positions (geographical coordinates) and a set of all supplied secondary positions. Please note that maximum number of points are limited to 100 only including source and secondary positions. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{rest-key}/{resources}/{profile}/{geopositions} GET Core Location Distance Matrix APIs dmAPI stateless request-response" } ``` ## search-destination · Distance Matrix Predictive ETA API - Identity: `search-destination:API:api:core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api ```json { "id": "api:core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "kind": "API", "title": "Distance Matrix Predictive ETA API", "description": "This API computes the distance and duration of a route between a source/primary position (geographical coordinates) and a list of all supplied secondary positions. Optionally one can input the deptime parameter and get the distance and duration optimized for that part of the day of a week. Time based functionality is available for selected cities only. Please note that maximum number of points are limited to 100 only including source and secondary positions. PREMIUM API", "href": "/api-reference/core-location-get-rest-key-distance-matrix-predictive-driving-coordinates-distance-matrix-predictive-eta-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/distance_matrix_predictive/driving/{coordinates} GET Core Location Distance Matrix Predictive API dmPAPI stateless request-response" } ``` ## search-destination · Elevation API - Identity: `search-destination:API:api:core-location-get-rest-key-elevation-elevation-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-elevation-elevation-api ```json { "id": "api:core-location-get-rest-key-elevation-elevation-api", "kind": "API", "title": "Elevation API", "description": "The Elevation API provides elevation data above the sea level for location on Earth’s surface. The Elevation API allows you to retrieve sampled elevation data along a path. This API can be useful for biking, trucking & in other routing applications.", "href": "/api-reference/core-location-get-rest-key-elevation-elevation-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/elevation GET Core Location Elevation API ElevationAPI stateless request-response" } ``` ## search-destination · Geocode API - Identity: `search-destination:API:api:core-location-get-api-places-geocode-geocode-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-geocode-geocode-api ```json { "id": "api:core-location-get-api-places-geocode-geocode-api", "kind": "API", "title": "Geocode API", "description": "All mapping APIs that are used in mobile or web apps need some geo-position coordinates to refer to any given point on the map. Our Geocoding API converts real addresses into these geographic reference positions to be placed on a map, be it for any street, area, postal code, POI or a house number etc. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-api-places-geocode-geocode-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/api/places/geocode GET Core Location Geocode API AtlasGeocodeAPI stateless request-response" } ``` ## search-destination · Nearby API - Identity: `search-destination:API:api:core-location-get-api-places-nearby-json-nearby-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-nearby-json-nearby-api ```json { "id": "api:core-location-get-api-places-nearby-json-nearby-api", "kind": "API", "title": "Nearby API", "description": "Nearby Places API, enables you to add discovery and search of nearby POIs by searching for a generic keyword used to describe a category of places or via the unique code assigned to that category. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-api-places-nearby-json-nearby-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/api/places/nearby/json GET Core Location Nearby API AtlasNearbyAPI stateless request-response" } ``` ## search-destination · POI Along the Route API - Identity: `search-destination:API:api:core-location-post-api-places-along-route-poi-along-the-route-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api ```json { "id": "api:core-location-post-api-places-along-route-poi-along-the-route-api", "kind": "API", "title": "POI Along the Route API", "description": "With POI Along the Route API user will be able to get the details of POIs of a particular category along his set route. The main focus of this API is to provide convenience to the user and help him in locating the place of his interest on his set route. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here", "href": "/api-reference/core-location-post-api-places-along-route-poi-along-the-route-api", "eyebrow": "POST · Core Maps, Search & Routing · legacy-source", "keywords": "/api/places/along_route POST Core Location POI Along the Route API AtlasPOIAlongtheRouteAPI stateless request-response" } ``` ## search-destination · Place Detail API - Identity: `search-destination:API:api:core-location-get-apis-o2o-entity-eloc-place-detail-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api ```json { "id": "api:core-location-get-apis-o2o-entity-eloc-place-detail-api", "kind": "API", "title": "Place Detail API", "description": "MapmyIndia eloc is a simple, standardized and precise pan-India digital address system. Every location has been assigned a unique digital address or an eLoc. Place Detail API can be used to extract the details of a place with the help of its eLoc i.e. a 6 digit code or a placeid. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "href": "/api-reference/core-location-get-apis-o2o-entity-eloc-place-detail-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/apis/O2O/entity/{eLoc} GET Core Location Place Detail API placeDetail stateless request-response" } ``` ## search-destination · Reverse Geocode API - Identity: `search-destination:API:api:core-location-get-rest-key-rev-geocode-reverse-geocode-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api ```json { "id": "api:core-location-get-rest-key-rev-geocode-reverse-geocode-api", "kind": "API", "title": "Reverse Geocode API", "description": "Reverse Geocoding is a process to give the closest matching address to a provided geographical coordinates (latitude/longitude). MapmyIndia reverse geocoding API provides real addresses along with nearest popular landmark for any such geo-positions on the map. This API also works in Hindi language response. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-rev-geocode-reverse-geocode-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/rev_geocode GET Core Location Reverse Geocode API ReverseGeocodeAPI stateless request-response" } ``` ## search-destination · Route Optimization API - Identity: `search-destination:API:api:core-location-get-rest-key-resources-profile-geopositions-route-optimization-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api ```json { "id": "api:core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "kind": "API", "title": "Route Optimization API", "description": "Route Optimization is the process of determining the most cost-efficient route. It needs to include all relevant factors such as the number and location of all the required stops on the route. In other words, this API will solve the Traveling Salesman Problem of routing and the returned path does not have to be the fastest path. As TSP is NP-hard it only returns an approximation. Currently, not all combinations of roundtrip, source and destination are supported. Right now, the following combinations are possible: | roundtrip | source | destination | supported | | --- | --- | --- | --- | | true | first | last | yes | | true | first | any | yes | | true | any | last | yes | | true | any | any | yes | | false | first | last | yes | Live Demo | PREMIUM API", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-route-optimization-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{rest_key}/{resources}/{profile}/{geopositions} GET Core Location Route Optimization API routeOptAPI stateless request-response" } ``` ## search-destination · Routing API - Identity: `search-destination:API:api:core-location-get-rest-key-resources-profile-geopositions-routing-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api ```json { "id": "api:core-location-get-rest-key-resources-profile-geopositions-routing-api", "kind": "API", "title": "Routing API", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-resources-profile-geopositions-routing-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/{resources}/{profile}/{geopositions} GET Core Location Routing API routingAPI stateless request-response" } ``` ## search-destination · Routing API with biking profile - Identity: `search-destination:API:api:core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile ```json { "id": "api:core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "kind": "API", "title": "Routing API with biking profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. The MapmyIndia Bike Routing API takes into consideration routes where bikes are allowed to travel as well as those roads which might be non-navigable to larger vehicles. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-resources-biking-geopositions-routing-api-with-biking-profile", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/{resources}/biking/{geopositions} GET Core Location Routing API with Biking Profile routingAPI stateless request-response" } ``` ## search-destination · Routing API with driving profile - Identity: `search-destination:API:api:core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile ```json { "id": "api:core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "kind": "API", "title": "Routing API with driving profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-resources-driving-geopositions-routing-api-with-driving-profile", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/{resources}/driving/{geopositions} GET Core Location Routing API with Driving Profile routingAPI stateless request-response" } ``` ## search-destination · Routing API with trucking profile - Identity: `search-destination:API:api:core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile ```json { "id": "api:core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "kind": "API", "title": "Routing API with trucking profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. MapmyIndia Truck Routing API calculates routes optimized for trucks and other commercial vehicles. Designed for professional transportation routing logistics, the API calculates safe and efficient routes that consider a vehicle’s attributes in relation to any route limitations. It also uses live traffic to determine precise ETAs, especially for areas that tend to be more congested. The routes include information such as route instructions, travel duration, and travel distance. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-resources-trucking-geopositions-routing-api-with-trucking-profile", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/{resources}/trucking/{geopositions} GET Core Location Routing API with Trucking Profile routingAPI stateless request-response" } ``` ## search-destination · Routing API with walking profile - Identity: `search-destination:API:api:core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile ```json { "id": "api:core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "kind": "API", "title": "Routing API with walking profile", "description": "Routing and displaying driving directions on map, including instructions for navigation, distance to destination, traffic etc. are few of the most important parts of developing a map based application. This REST API calculates driving routes between specified locations including via points based on route calculation type(optimal or shortest). Please note that maximum number of points are limited to 100 only including source and secondary positions. MapmyIndia Pedestrian Routing API calculates the best route for pedestrians. It takes into account how easy it is for pedestrians to maneuver between links in the route while disregarding traffic conditions. The API recommends actions that are relevant for pedestrians and the maneuver instructions contain texts that are suitable for someone who is walking. Live Demo | Download Sample Code", "href": "/api-reference/core-location-get-rest-key-resources-walking-geopositions-routing-api-with-walking-profile", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/{resources}/walking/{geopositions} GET Core Location Routing API with Walking Profile routingAPI stateless request-response" } ``` ## search-destination · Snap to Road API - Identity: `search-destination:API:api:core-location-post-rest-key-snaptoroad-snap-to-road-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api ```json { "id": "api:core-location-post-rest-key-snaptoroad-snap-to-road-api", "kind": "API", "title": "Snap to Road API", "description": "Snap-To-Road API, snaps given GPS points to the road network in the most plausible way. Maximum number of points are limited to 100 only. Our USP is to take GPS points collected along a route and return a similar set of corrected & aligned data with the points matched to the road with our intelligent Snap To Road API. Now seamlessly calculate accurate distances from points which follow the geometry of the road & show accurate positions on map. This API provides a critical feature that is immensely valuable when tracking assets and for data analytics of path traversed by vehicle, people or assets. Note : The request might result multiple sub-traces. Large jumps in the timestamps (> 60s) or improbable transitions lead to trace splits if a complete matching could not be found. The algorithm might not be able to match all points. Outliers are removed if they cannot be matched successfully. Live Demo", "href": "/api-reference/core-location-post-rest-key-snaptoroad-snap-to-road-api", "eyebrow": "POST · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/snapToRoad POST Core Location Snap to Road API snapToRoadAPI stateless request-response" } ``` ## search-destination · Still Map Image API - Identity: `search-destination:API:api:core-location-get-rest-key-still-image-still-map-image-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-rest-key-still-image-still-map-image-api ```json { "id": "api:core-location-get-rest-key-still-image-still-map-image-api", "kind": "API", "title": "Still Map Image API", "description": "The Still Map Image API creates a map based on URL parameters sent through a standard HTTP request and returns the map as an image which you can display on your application. The API lets you embed MapmyIndia Maps image according to geo-position, pixel size and zoom level of the map on your application without requiring any dynamic page loading. The image can be a retina image and markers can be added to the image to indicate position of any object.", "href": "/api-reference/core-location-get-rest-key-still-image-still-map-image-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/still_image GET Core Location Still Map Image API stillMapImageAPI stateless request-response" } ``` ## search-destination · Text Search API - Identity: `search-destination:API:api:core-location-get-api-places-textsearch-json-text-search-api` - Canonical: https://developer.mappls.com/api-reference/core-location-get-api-places-textsearch-json-text-search-api ```json { "id": "api:core-location-get-api-places-textsearch-json-text-search-api", "kind": "API", "title": "Text Search API", "description": "Text Search API is a service that aims to provide information about a list of places on the basis of a text string entered by the user. It uses the location information that is provided along with the query to try to understand the request. This API now supports Hindi language so you can now search queries in Hindi too. This APIs follow OAuth2 based security. To know more on how to create your authorization tokens, please use our authorization token URL. More details available here. Download Sample Code", "href": "/api-reference/core-location-get-api-places-textsearch-json-text-search-api", "eyebrow": "GET · Core Maps, Search & Routing · legacy-source", "keywords": "/api/places/textsearch/json GET Core Location Text Search API AtlasTextSearchAPI stateless request-response" } ``` ## search-destination · Token Generation API - Identity: `search-destination:API:api:core-location-post-security-oauth-token-token-generation-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-security-oauth-token-token-generation-api ```json { "id": "api:core-location-post-security-oauth-token-token-generation-api", "kind": "API", "title": "Token Generation API", "description": "This API is required to generate tokens authorize the oAuth 2 based APIs. Hence, the developer would need to send a request for access token using their clientid and clientsecret to the Token Generation API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: {tokentype} {accesstoken} Authorization: “tokentype accesstoken”.", "href": "/api-reference/core-location-post-security-oauth-token-token-generation-api", "eyebrow": "POST · Core Maps, Search & Routing · legacy-source", "keywords": "/security/oauth/token POST Core Location Token Generation API tokenGenerationAPI stateless request-response" } ``` ## search-destination · Traveled Route Image API - Identity: `search-destination:API:api:core-location-post-rest-key-still-image-polyline-traveled-route-image-api` - Canonical: https://developer.mappls.com/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api ```json { "id": "api:core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "kind": "API", "title": "Traveled Route Image API", "description": "This API can be used to get an image of map with traveled route plotted on it. The image size can be specified; which will dynamically create an image of varying zoom levels with the start and end locations plotted on it.", "href": "/api-reference/core-location-post-rest-key-still-image-polyline-traveled-route-image-api", "eyebrow": "POST · Core Maps, Search & Routing · legacy-source", "keywords": "/{REST_KEY}/still_image_polyline POST Core Location Traveled Route Image API stillImagePolylineAPI stateless request-response" } ``` ## search-destination · List layer attributes or a layer bounding box - Identity: `search-destination:API:api:geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box` - Canonical: https://developer.mappls.com/api-reference/geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box ```json { "id": "api:geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box", "kind": "API", "title": "List layer attributes or a layer bounding box", "description": "Returns documented attribute values or bbox for one Geo-Analytics layer. Supply addr, or supply geoboundtype together with geobound.", "href": "/api-reference/geoanalytics-get-listingapi-list-layer-attributes-or-a-layer-bounding-box", "eyebrow": "GET · Geo-Analytics Listing · legacy-source", "keywords": "/listingapi GET Geo-Analytics Geo-Analytics Listing listGeoAnalyticsAttributes stateless request-response" } ``` ## search-destination · This API will get all the alarm configurations for a user. - Identity: `search-destination:API:api:intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0 ```json { "id": "api:intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "kind": "API", "title": "This API will get all the alarm configurations for a user.", "description": "Based on the passed token key, the API will return the list of all alarm configs.", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user-v1-0-0", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/alarm GET InTouch alarm stateful observe" } ``` ## search-destination · This API will get all the alarm configurations for a user. - Identity: `search-destination:API:api:intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user ```json { "id": "api:intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "kind": "API", "title": "This API will get all the alarm configurations for a user.", "description": "Based on the passed token key, the API will return the list of all alarm configs.", "href": "/api-reference/intouch-get-alarm-this-api-will-get-all-the-alarm-configurations-for-a-user", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/alarm GET InTouch alarm stateful observe" } ``` ## search-destination · This API will create an alarm. - Identity: `search-destination:API:api:intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0 ```json { "id": "api:intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "kind": "API", "title": "This API will create an alarm.", "description": "Based on the input parameters provided to this POST alarm API, a new alarm will get created for a single or multiple devices", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm-v1-0-0", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/alarm POST InTouch alarm createAlarm stateful command" } ``` ## search-destination · This API will create an alarm. - Identity: `search-destination:API:api:intouch-post-alarm-this-api-will-create-an-alarm` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-this-api-will-create-an-alarm ```json { "id": "api:intouch-post-alarm-this-api-will-create-an-alarm", "kind": "API", "title": "This API will create an alarm.", "description": "Based on the input parameters provided to this POST alarm API, a new alarm will get created for a single or multiple devices", "href": "/api-reference/intouch-post-alarm-this-api-will-create-an-alarm", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/alarm POST InTouch alarm createAlarm stateful command" } ``` ## search-destination · Gets The List Of Alarm Config(s) - Identity: `search-destination:API:api:intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0 ```json { "id": "api:intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "kind": "API", "title": "Gets The List Of Alarm Config(s)", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s-v1-0-0", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/alarm/alarmLog/ GET InTouch alarm stateful observe" } ``` ## search-destination · Gets The List Of Alarm Config(s) - Identity: `search-destination:API:api:intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s ```json { "id": "api:intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "kind": "API", "title": "Gets The List Of Alarm Config(s)", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-get-alarm-alarmlog-gets-the-list-of-alarm-config-s", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/alarm/alarmLog/ GET InTouch alarm stateful observe" } ``` ## search-destination · Deletes An Alarm Config - Identity: `search-destination:API:api:intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0 ```json { "id": "api:intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "kind": "API", "title": "Deletes An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config-v1-0-0", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/alarm/{id} DELETE InTouch alarm stateful retire" } ``` ## search-destination · Deletes An Alarm Config - Identity: `search-destination:API:api:intouch-delete-alarm-id-deletes-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config ```json { "id": "api:intouch-delete-alarm-id-deletes-an-alarm-config", "kind": "API", "title": "Deletes An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-delete-alarm-id-deletes-an-alarm-config", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/alarm/{id} DELETE InTouch alarm stateful retire" } ``` ## search-destination · Updates An Alarm Config - Identity: `search-destination:API:api:intouch-post-alarm-id-updates-an-alarm-config-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-id-updates-an-alarm-config-v1-0-0 ```json { "id": "api:intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "kind": "API", "title": "Updates An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config-v1-0-0", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/alarm/{id} POST InTouch alarm stateful command" } ``` ## search-destination · Updates An Alarm Config - Identity: `search-destination:API:api:intouch-post-alarm-id-updates-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarm-id-updates-an-alarm-config ```json { "id": "api:intouch-post-alarm-id-updates-an-alarm-config", "kind": "API", "title": "Updates An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-post-alarm-id-updates-an-alarm-config", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/alarm/{id} POST InTouch alarm stateful command" } ``` ## search-destination · This API will get all the alarm configurations for a user. - Identity: `search-destination:API:api:intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user ```json { "id": "api:intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "kind": "API", "title": "This API will get all the alarm configurations for a user.", "description": "Based on the passed token key, the API will return the list of all alarm configs.", "href": "/api-reference/intouch-get-alarms-this-api-will-get-all-the-alarm-configurations-for-a-user", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/alarms GET InTouch alarm stateful observe" } ``` ## search-destination · This API will create an alarm. - Identity: `search-destination:API:api:intouch-post-alarms-this-api-will-create-an-alarm` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarms-this-api-will-create-an-alarm ```json { "id": "api:intouch-post-alarms-this-api-will-create-an-alarm", "kind": "API", "title": "This API will create an alarm.", "description": "Based on the input parameters provided to this POST alarm API, a new alarm will get created for a single or multiple devices", "href": "/api-reference/intouch-post-alarms-this-api-will-create-an-alarm", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/alarms POST InTouch alarm createAlarm stateful command" } ``` ## search-destination · Gets The List Of Alarm Config(s) - Identity: `search-destination:API:api:intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s ```json { "id": "api:intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "kind": "API", "title": "Gets The List Of Alarm Config(s)", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-get-alarms-alarmlogs-gets-the-list-of-alarm-config-s", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/alarms/alarmlogs/ GET InTouch alarm stateful observe" } ``` ## search-destination · Deletes An Alarm Config - Identity: `search-destination:API:api:intouch-delete-alarms-id-deletes-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-alarms-id-deletes-an-alarm-config ```json { "id": "api:intouch-delete-alarms-id-deletes-an-alarm-config", "kind": "API", "title": "Deletes An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-delete-alarms-id-deletes-an-alarm-config", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/alarms/{id} DELETE InTouch alarm stateful retire" } ``` ## search-destination · Updates An Alarm Config - Identity: `search-destination:API:api:intouch-post-alarms-id-updates-an-alarm-config` - Canonical: https://developer.mappls.com/api-reference/intouch-post-alarms-id-updates-an-alarm-config ```json { "id": "api:intouch-post-alarms-id-updates-an-alarm-config", "kind": "API", "title": "Updates An Alarm Config", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-post-alarms-id-updates-an-alarm-config", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/alarms/{id} POST InTouch alarm stateful command" } ``` ## search-destination · Gets the basic info of devices. - Identity: `search-destination:API:api:intouch-get-devices-info-gets-the-basic-info-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-info-gets-the-basic-info-of-devices ```json { "id": "api:intouch-get-devices-info-gets-the-basic-info-of-devices", "kind": "API", "title": "Gets the basic info of devices.", "description": "This API returns the basic info of devices such as their registration number, tyre size, manufacturer etc.", "href": "/api-reference/intouch-get-devices-info-gets-the-basic-info-of-devices", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/devices/info GET InTouch device basic info stateful observe" } ``` ## search-destination · Gets the hardware info of devices. - Identity: `search-destination:API:api:intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices ```json { "id": "api:intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices", "kind": "API", "title": "Gets the hardware info of devices.", "description": "This API returns the hardware related info of devices such as their IMEI number, GSM number etc.", "href": "/api-reference/intouch-get-devices-hardwareinfo-gets-the-hardware-info-of-devices", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/devices/hardwareinfo GET InTouch device hardware info stateful observe" } ``` ## search-destination · Gets the live data of devices. - Identity: `search-destination:API:api:intouch-get-devices-gets-the-live-data-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-gets-the-live-data-of-devices ```json { "id": "api:intouch-get-devices-gets-the-live-data-of-devices", "kind": "API", "title": "Gets the live data of devices.", "description": "This API returns accurate live location and related data of vehicles, assets & people with help of connected devices/sensors/mobiles to provide location awareness to users of your app. The API provides real-time visibility of your tracked objects, giving not just location information, but multiple additional fields which add value to your application. The API is capable of being used for multiple use cases: be it for transport - logistics or for personnel information services for all kinds of web or mobile development platforms.", "href": "/api-reference/intouch-get-devices-gets-the-live-data-of-devices", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/devices GET InTouch device live data getDeviceById stateful observe" } ``` ## search-destination · Gets the live data of devices. - Identity: `search-destination:API:api:intouch-get-device-gets-the-live-data-of-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-device-gets-the-live-data-of-devices ```json { "id": "api:intouch-get-device-gets-the-live-data-of-devices", "kind": "API", "title": "Gets the live data of devices.", "description": "This API returns accurate live location and related data of vehicles, assets & people with help of connected devices/sensors/mobiles to provide location awareness to users of your app. The API provides real-time visibility of your tracked objects, giving not just location information, but multiple additional fields which add value to your application. The API is capable of being used for multiple use cases: be it for transport - logistics or for personnel information services for all kinds of web or mobile development platforms.", "href": "/api-reference/intouch-get-device-gets-the-live-data-of-devices", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/device GET InTouch devices getDeviceById stateful observe" } ``` ## search-destination · Gets drive details of a device. - Identity: `search-destination:API:api:intouch-get-device-drive-gets-drive-details-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-device-drive-gets-drive-details-of-a-device ```json { "id": "api:intouch-get-device-drive-gets-drive-details-of-a-device", "kind": "API", "title": "Gets drive details of a device.", "description": "This API is used to request the drive details of a vehicle in an account on our telematics platform. A vehicle can be a device/sensor connected to our telematics platform directly or via a third party data aggregator who utilises our telematics platform for tracking services. Drive is a list of reported geo-positions of any object (such as vehicles, assets or people) according to pre-defined conditions", "href": "/api-reference/intouch-get-device-drive-gets-drive-details-of-a-device", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/device/drive GET InTouch drives getDrives stateful observe" } ``` ## search-destination · Gets drive details of a device. - Identity: `search-destination:API:api:intouch-get-devices-drives-gets-drive-details-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device ```json { "id": "api:intouch-get-devices-drives-gets-drive-details-of-a-device", "kind": "API", "title": "Gets drive details of a device.", "description": "This API is used to request the drive details of a vehicle in an account on our telematics platform. A vehicle can be a device/sensor connected to our telematics platform directly or via a third party data aggregator who utilises our telematics platform for tracking services. Drive is a list of reported geo-positions of any object (such as vehicles, assets or people) according to pre-defined conditions", "href": "/api-reference/intouch-get-devices-drives-gets-drive-details-of-a-device", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/devices/drives GET InTouch drives getDrives stateful observe" } ``` ## search-destination · Gets the historical location events of a device. - Identity: `search-destination:API:api:intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device ```json { "id": "api:intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "kind": "API", "title": "Gets the historical location events of a device.", "description": "This API is used to get the historical location information as well as related additional information for a vehicle. This API can be used thus to create customized reports for users of your apps for different use cases, e.g.: plot the vehicle's past movements on map or get a historical graph of change in a vehicle's altitude.", "href": "/api-reference/intouch-get-device-deviceid-events-gets-the-historical-location-events-of-a-device", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/device/{deviceId}/events GET InTouch events getLocationEvents stateful observe" } ``` ## search-destination · Gets the historical location events of a device. - Identity: `search-destination:API:api:intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device ```json { "id": "api:intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device", "kind": "API", "title": "Gets the historical location events of a device.", "description": "This API is used to get the historical location information as well as related additional information for a vehicle. This API can be used thus to create customized reports for users of your apps for different use cases, e.g.: plot the vehicle's past movements on map or get a historical graph of change in a vehicle's altitude.", "href": "/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/devices/{deviceId}/events GET InTouch events getLocationEvents stateful observe" } ``` ## search-destination · Gets All The Configured Geofence(s) - Identity: `search-destination:API:api:intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0 ```json { "id": "api:intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "kind": "API", "title": "Gets All The Configured Geofence(s)", "description": "This API returns the list of all the configured geofences", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s-v1-0-0", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofence/ GET InTouch geofence stateful observe" } ``` ## search-destination · Gets All The Configured Geofence(s) - Identity: `search-destination:API:api:intouch-get-geofence-gets-all-the-configured-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s ```json { "id": "api:intouch-get-geofence-gets-all-the-configured-geofence-s", "kind": "API", "title": "Gets All The Configured Geofence(s)", "description": "This API returns the list of all the configured geofences", "href": "/api-reference/intouch-get-geofence-gets-all-the-configured-geofence-s", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofence/ GET InTouch geofence stateful observe" } ``` ## search-destination · Create A New Geofence - Identity: `search-destination:API:api:intouch-post-geofence-create-a-new-geofence-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-create-a-new-geofence-v1-0-0 ```json { "id": "api:intouch-post-geofence-create-a-new-geofence-v1-0-0", "kind": "API", "title": "Create A New Geofence", "description": "This API helps to create a new geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence-v1-0-0", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/geofence/ POST InTouch geofence stateful command" } ``` ## search-destination · Create A New Geofence - Identity: `search-destination:API:api:intouch-post-geofence-create-a-new-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-create-a-new-geofence ```json { "id": "api:intouch-post-geofence-create-a-new-geofence", "kind": "API", "title": "Create A New Geofence", "description": "This API helps to create a new geofence", "href": "/api-reference/intouch-post-geofence-create-a-new-geofence", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/geofence/ POST InTouch geofence stateful command" } ``` ## search-destination · Get all the activities done by devices w.r.t various geofences - Identity: `search-destination:API:api:intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences ```json { "id": "api:intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "kind": "API", "title": "Get all the activities done by devices w.r.t various geofences", "description": "This API helps to fetch the details of all the activities, such as geofence entry time, exit time etc, which devices perform w.r.t various geofences across a defined date/time range.", "href": "/api-reference/intouch-get-geofence-activity-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofence/activity GET InTouch geofence stateful observe" } ``` ## search-destination · Delete A Geofence. - Identity: `search-destination:API:api:intouch-delete-geofence-id-delete-a-geofence-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-geofence-id-delete-a-geofence-v1-0-0 ```json { "id": "api:intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "kind": "API", "title": "Delete A Geofence.", "description": "This API helps to delete a geofence.", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence-v1-0-0", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/geofence/{id} DELETE InTouch geofence stateful retire" } ``` ## search-destination · Delete A Geofence. - Identity: `search-destination:API:api:intouch-delete-geofence-id-delete-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-geofence-id-delete-a-geofence ```json { "id": "api:intouch-delete-geofence-id-delete-a-geofence", "kind": "API", "title": "Delete A Geofence.", "description": "This API helps to delete a geofence.", "href": "/api-reference/intouch-delete-geofence-id-delete-a-geofence", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/geofence/{id} DELETE InTouch geofence stateful retire" } ``` ## search-destination · Get A Single Or Multiple Geofence(s). - Identity: `search-destination:API:api:intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0 ```json { "id": "api:intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "kind": "API", "title": "Get A Single Or Multiple Geofence(s).", "description": "This API helps to fetch the details of a particular geofence", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s-v1-0-0", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofence/{id} GET InTouch geofence stateful observe" } ``` ## search-destination · Get A Single Or Multiple Geofence(s). - Identity: `search-destination:API:api:intouch-get-geofence-id-get-a-single-or-multiple-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s ```json { "id": "api:intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "kind": "API", "title": "Get A Single Or Multiple Geofence(s).", "description": "This API helps to fetch the details of a particular geofence", "href": "/api-reference/intouch-get-geofence-id-get-a-single-or-multiple-geofence-s", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofence/{id} GET InTouch geofence stateful observe" } ``` ## search-destination · Update A Geofence. - Identity: `search-destination:API:api:intouch-post-geofence-id-update-a-geofence-v1-0-0` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-id-update-a-geofence-v1-0-0 ```json { "id": "api:intouch-post-geofence-id-update-a-geofence-v1-0-0", "kind": "API", "title": "Update A Geofence.", "description": "This API helps to update a particular geofence.", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence-v1-0-0", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/geofence/{id} POST InTouch geofence stateful command" } ``` ## search-destination · Update A Geofence. - Identity: `search-destination:API:api:intouch-post-geofence-id-update-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofence-id-update-a-geofence ```json { "id": "api:intouch-post-geofence-id-update-a-geofence", "kind": "API", "title": "Update A Geofence.", "description": "This API helps to update a particular geofence.", "href": "/api-reference/intouch-post-geofence-id-update-a-geofence", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/geofence/{id} POST InTouch geofence stateful command" } ``` ## search-destination · Gets All The Configured Geofence(s) - Identity: `search-destination:API:api:intouch-get-geofences-gets-all-the-configured-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofences-gets-all-the-configured-geofence-s ```json { "id": "api:intouch-get-geofences-gets-all-the-configured-geofence-s", "kind": "API", "title": "Gets All The Configured Geofence(s)", "description": "This API returns the list of all the configured geofences", "href": "/api-reference/intouch-get-geofences-gets-all-the-configured-geofence-s", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofences GET InTouch geofence stateful observe" } ``` ## search-destination · Create A New Geofence - Identity: `search-destination:API:api:intouch-post-geofences-create-a-new-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofences-create-a-new-geofence ```json { "id": "api:intouch-post-geofences-create-a-new-geofence", "kind": "API", "title": "Create A New Geofence", "description": "This API helps to create a new geofence", "href": "/api-reference/intouch-post-geofences-create-a-new-geofence", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/geofences POST InTouch geofence stateful command" } ``` ## search-destination · Get all the activities done by devices w.r.t various geofences - Identity: `search-destination:API:api:intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences ```json { "id": "api:intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "kind": "API", "title": "Get all the activities done by devices w.r.t various geofences", "description": "This API helps to fetch the details of all the activities, such as geofence entry time, exit time etc, which devices perform w.r.t various geofences across a defined date/time range.", "href": "/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofences/activities GET InTouch geofence stateful observe" } ``` ## search-destination · Delete A Geofence. - Identity: `search-destination:API:api:intouch-delete-geofences-id-delete-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-geofences-id-delete-a-geofence ```json { "id": "api:intouch-delete-geofences-id-delete-a-geofence", "kind": "API", "title": "Delete A Geofence.", "description": "This API helps to delete a geofence.", "href": "/api-reference/intouch-delete-geofences-id-delete-a-geofence", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/geofences/{id} DELETE InTouch geofence stateful retire" } ``` ## search-destination · Get A Single Or Multiple Geofence(s). - Identity: `search-destination:API:api:intouch-get-geofences-id-get-a-single-or-multiple-geofence-s` - Canonical: https://developer.mappls.com/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s ```json { "id": "api:intouch-get-geofences-id-get-a-single-or-multiple-geofence-s", "kind": "API", "title": "Get A Single Or Multiple Geofence(s).", "description": "This API helps to fetch the details of a particular geofence", "href": "/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/geofences/{id} GET InTouch geofence stateful observe" } ``` ## search-destination · Update A Geofence. - Identity: `search-destination:API:api:intouch-post-geofences-id-update-a-geofence` - Canonical: https://developer.mappls.com/api-reference/intouch-post-geofences-id-update-a-geofence ```json { "id": "api:intouch-post-geofences-id-update-a-geofence", "kind": "API", "title": "Update A Geofence.", "description": "This API helps to update a particular geofence.", "href": "/api-reference/intouch-post-geofences-id-update-a-geofence", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/geofences/{id} POST InTouch geofence stateful command" } ``` ## search-destination · This API will get all the groups for a user. - Identity: `search-destination:API:api:intouch-get-group-this-api-will-get-all-the-groups-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-group-this-api-will-get-all-the-groups-for-a-user ```json { "id": "api:intouch-get-group-this-api-will-get-all-the-groups-for-a-user", "kind": "API", "title": "This API will get all the groups for a user.", "description": "Based on the passed token key, the API will return the list of all groups.", "href": "/api-reference/intouch-get-group-this-api-will-get-all-the-groups-for-a-user", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/group GET InTouch group stateful observe" } ``` ## search-destination · This API will create a group. - Identity: `search-destination:API:api:intouch-post-group-this-api-will-create-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-group-this-api-will-create-a-group ```json { "id": "api:intouch-post-group-this-api-will-create-a-group", "kind": "API", "title": "This API will create a group.", "description": "Based on the input parameters provided to this POST group API, a new group will get created for a single or multiple devices", "href": "/api-reference/intouch-post-group-this-api-will-create-a-group", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/group POST InTouch group stateful command" } ``` ## search-destination · Deletes a group - Identity: `search-destination:API:api:intouch-delete-group-id-deletes-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-group-id-deletes-a-group ```json { "id": "api:intouch-delete-group-id-deletes-a-group", "kind": "API", "title": "Deletes a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-delete-group-id-deletes-a-group", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/group/{id} DELETE InTouch group stateful retire" } ``` ## search-destination · Updates a group - Identity: `search-destination:API:api:intouch-post-group-id-updates-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-group-id-updates-a-group ```json { "id": "api:intouch-post-group-id-updates-a-group", "kind": "API", "title": "Updates a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-post-group-id-updates-a-group", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/group/{id} POST InTouch group stateful command" } ``` ## search-destination · This API will get all the groups for a user. - Identity: `search-destination:API:api:intouch-get-groups-this-api-will-get-all-the-groups-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-groups-this-api-will-get-all-the-groups-for-a-user ```json { "id": "api:intouch-get-groups-this-api-will-get-all-the-groups-for-a-user", "kind": "API", "title": "This API will get all the groups for a user.", "description": "Based on the passed token key, the API will return the list of all groups.", "href": "/api-reference/intouch-get-groups-this-api-will-get-all-the-groups-for-a-user", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/groups GET InTouch group stateful observe" } ``` ## search-destination · This API will create a group. - Identity: `search-destination:API:api:intouch-post-groups-this-api-will-create-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-groups-this-api-will-create-a-group ```json { "id": "api:intouch-post-groups-this-api-will-create-a-group", "kind": "API", "title": "This API will create a group.", "description": "Based on the input parameters provided to this POST group API, a new group will get created for a single or multiple devices", "href": "/api-reference/intouch-post-groups-this-api-will-create-a-group", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/groups POST InTouch group stateful command" } ``` ## search-destination · Deletes a group - Identity: `search-destination:API:api:intouch-delete-groups-id-deletes-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-delete-groups-id-deletes-a-group ```json { "id": "api:intouch-delete-groups-id-deletes-a-group", "kind": "API", "title": "Deletes a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-delete-groups-id-deletes-a-group", "eyebrow": "DELETE · InTouch Telematics · legacy-source", "keywords": "/groups/{id} DELETE InTouch group stateful retire" } ``` ## search-destination · Updates a group - Identity: `search-destination:API:api:intouch-post-groups-id-updates-a-group` - Canonical: https://developer.mappls.com/api-reference/intouch-post-groups-id-updates-a-group ```json { "id": "api:intouch-post-groups-id-updates-a-group", "kind": "API", "title": "Updates a group", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-post-groups-id-updates-a-group", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/groups/{id} POST InTouch group stateful command" } ``` ## search-destination · Gets the list of all the nearby devices. - Identity: `search-destination:API:api:intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices` - Canonical: https://developer.mappls.com/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices ```json { "id": "api:intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "kind": "API", "title": "Gets the list of all the nearby devices.", "description": "This API returns accurate live location and related data of all the nearby vehicles, assets & people, within the specified buffer range, with help of connected devices/sensors/mobiles to provide location awareness to users of your app. The API provides real-time visibility of your tracked objects, giving not just location information, but multiple additional fields which add value to your application. The API is capable of being used for multiple use cases: be it for transport - logistics or for personnel information services for all kinds of web or mobile development platforms.", "href": "/api-reference/intouch-get-devices-nearby-gets-the-list-of-all-the-nearby-devices", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/devices/nearby GET InTouch nearby stateful observe" } ``` ## search-destination · This API will get all the trips for a user. - Identity: `search-destination:API:api:intouch-get-trips-this-api-will-get-all-the-trips-for-a-user` - Canonical: https://developer.mappls.com/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user ```json { "id": "api:intouch-get-trips-this-api-will-get-all-the-trips-for-a-user", "kind": "API", "title": "This API will get all the trips for a user.", "description": "Based on the passed token key, the API will return the list of all the trips.", "href": "/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/trips GET InTouch trips stateful observe" } ``` ## search-destination · This API will create a trip. - Identity: `search-destination:API:api:intouch-post-trips-this-api-will-create-a-trip` - Canonical: https://developer.mappls.com/api-reference/intouch-post-trips-this-api-will-create-a-trip ```json { "id": "api:intouch-post-trips-this-api-will-create-a-trip", "kind": "API", "title": "This API will create a trip.", "description": "Based on the input parameters provided, a new trip will get created.", "href": "/api-reference/intouch-post-trips-this-api-will-create-a-trip", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/trips POST InTouch trips stateful command" } ``` ## search-destination · Gets the details of a single trip - Identity: `search-destination:API:api:intouch-get-trips-id-gets-the-details-of-a-single-trip` - Canonical: https://developer.mappls.com/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip ```json { "id": "api:intouch-get-trips-id-gets-the-details-of-a-single-trip", "kind": "API", "title": "Gets the details of a single trip", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip", "eyebrow": "GET · InTouch Telematics · legacy-source", "keywords": "/trips/{id} GET InTouch trips stateful observe" } ``` ## search-destination · POST API to close a trip. - Identity: `search-destination:API:api:intouch-post-trips-id-close-post-api-to-close-a-trip` - Canonical: https://developer.mappls.com/api-reference/intouch-post-trips-id-close-post-api-to-close-a-trip ```json { "id": "api:intouch-post-trips-id-close-post-api-to-close-a-trip", "kind": "API", "title": "POST API to close a trip.", "description": "A set of powerful telematics APIs which users can use to get all the data related to their devices such as live location,trails,alarms etc. These telematics APIs are powered by MapmyIndia's own INTOUCH platform. MapmyIndia InTouch easily integrates into existing cloud services via our tracking & telematics APIs. The API & SDK libraries provide powerful, efficient and accurate positioning for the IoT devices on InTouch applications for Android, iOS and the web. You can find out more about Intouch at http://mapmyindia.com/intouch", "href": "/api-reference/intouch-post-trips-id-close-post-api-to-close-a-trip", "eyebrow": "POST · InTouch Telematics · legacy-source", "keywords": "/trips/{id}/close POST InTouch trips stateful command" } ``` ## search-destination · Returns the image in which objects of geometry are blurred as given by the client. - Identity: `search-destination:API:api:mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client ```json { "id": "api:mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "kind": "API", "title": "Returns the image in which objects of geometry are blurred as given by the client.", "description": "BlurBox API takes in the bounding box ( the region, area the client want to blur in the image) and then the BlurBox will automatically return the blur region within an image.", "href": "/api-reference/mappls-ai-ml-post-blurbox-returns-the-image-in-which-objects-of-geometry-are-blurred-as-given-by-the-client", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/blurbox POST AI & Vision Blurring Bbox blurbox hybrid command" } ``` ## search-destination · Returns the Brands bounding box array for the inputs Images - Identity: `search-destination:API:api:mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images ```json { "id": "api:mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "kind": "API", "title": "Returns the Brands bounding box array for the inputs Images", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the Brands in the given image.", "href": "/api-reference/mappls-ai-ml-post-brand-detection-returns-the-brands-bounding-box-array-for-the-inputs-images", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/brand_detection POST AI & Vision Brands Detection APIs describeDatasetGet hybrid command" } ``` ## search-destination · Returns the array of features which contains objects of geometry of the uploaded image. - Identity: `search-destination:API:api:mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image ```json { "id": "api:mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "kind": "API", "title": "Returns the array of features which contains objects of geometry of the uploaded image.", "description": "Face Blur API can automatically detect all faces within an image and blurs them. No need for manual face selection.", "href": "/api-reference/mappls-ai-ml-post-faceblur-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/faceblur POST AI & Vision Face Detection and Blurring faceBlur hybrid command" } ``` ## search-destination · Returns different output depending upon the inputs given. - Identity: `search-destination:API:api:mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given ```json { "id": "api:mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "kind": "API", "title": "Returns different output depending upon the inputs given.", "description": "Using these APIs developers can fully leverage and embed the power of AI / ML Analytics, intelligence. These APIs allow our client to integrate into their own application the power and full set of functionalities of the mGIS product and platform. It’s a fact: people have a right of getting digital privacy. Here’s one more: online publishers and businesses worldwide must respect those rights and provide visual anonymity when it’s needed. That’s why we decided to give you the fastest and easiest way to keep people’s privacy in photos. Meet Face Detection & Blurring by MapmyIndia. This tool completely automates Face Detection, Face Blurring in photos and helps you get the job done in just a few clicks without graphic editors and manual work. Keep reading to find out how it works, when it comes in handy, and how you can actually use it in MapmyIndia.", "href": "/api-reference/mappls-ai-ml-post-facedetection-returns-different-output-depending-upon-the-inputs-given", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/facedetection POST AI & Vision Face Detection and Blurring faceDetection hybrid command" } ``` ## search-destination · Returns the image which contains objects of geometry of the detected face plotted on it with the bounding box. - Identity: `search-destination:API:api:mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box ```json { "id": "api:mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "kind": "API", "title": "Returns the image which contains objects of geometry of the detected face plotted on it with the bounding box.", "description": "This tool completely automates Face Detection, Face Blurring in photos and helps you get the job done in just a few clicks without graphic editors and manual work. Keep reading to find out how it works, when it comes in handy, and how you can actually use it in MapmyIndia. You can detect faces in an image, identify key facial features, and get the contours of detected faces. Note that the API detects faces, it does not recognize people . When you have face contour detection enabled, you also get a list of points for each facial feature that was detected. These points represent the shape of the feature. The following image illustrates how these points map to a face.", "href": "/api-reference/mappls-ai-ml-post-faceplot-returns-the-image-which-contains-objects-of-geometry-of-the-detected-face-plotted-on-it-with-the-bounding-box", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/faceplot POST AI & Vision Face Detection and Blurring facePlot hybrid command" } ``` ## search-destination · Returns the face blured images of the uploaded 2D image - Identity: `search-destination:API:api:mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image ```json { "id": "api:mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "kind": "API", "title": "Returns the face blured images of the uploaded 2D image", "description": "This API completely automates Face Detection, Face Blurring in 2D Images, without any extra effort", "href": "/api-reference/mappls-ai-ml-post-face-blur-returns-the-face-blured-images-of-the-uploaded-2d-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/face_blur POST AI & Vision Face Detection and Blurring 2D API describeDataset1 hybrid command" } ``` ## search-destination · Returns the bounding box array for the inputs Image - Identity: `search-destination:API:api:mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image ```json { "id": "api:mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "kind": "API", "title": "Returns the bounding box array for the inputs Image", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the faces in the given 2D image.", "href": "/api-reference/mappls-ai-ml-post-face-detection-returns-the-bounding-box-array-for-the-inputs-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/face_detection POST AI & Vision Face Detection and Blurring 2D API describeDatasetGet hybrid command" } ``` ## search-destination · Returns the box drawn faces on the uploaded 2D image - Identity: `search-destination:API:api:mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image ```json { "id": "api:mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "kind": "API", "title": "Returns the box drawn faces on the uploaded 2D image", "description": "This API detects faces in 2D images and draw their box around faces.", "href": "/api-reference/mappls-ai-ml-post-face-draw-returns-the-box-drawn-faces-on-the-uploaded-2d-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/face_draw POST AI & Vision Face Detection and Blurring 2D API describeDataset2 hybrid command" } ``` ## search-destination · Returns the face blured images of the uploaded panorama image - Identity: `search-destination:API:api:mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image ```json { "id": "api:mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image", "kind": "API", "title": "Returns the face blured images of the uploaded panorama image", "description": "This API completely automates Face Detection, Face Blurring in panorama Images, without any extra effort", "href": "/api-reference/mappls-ai-ml-post-face-blur-pano-returns-the-face-blured-images-of-the-uploaded-panorama-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/face_blur_pano POST AI & Vision Face Detection and Blurring 360 APIs describeDataset1 hybrid command" } ``` ## search-destination · Returns the bounding box array for the inputs panorama Images - Identity: `search-destination:API:api:mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images ```json { "id": "api:mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images", "kind": "API", "title": "Returns the bounding box array for the inputs panorama Images", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the faces in the given panorama image.", "href": "/api-reference/mappls-ai-ml-post-face-detection-pano-returns-the-bounding-box-array-for-the-inputs-panorama-images", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/face_detection_pano POST AI & Vision Face Detection and Blurring 360 APIs describeDatasetGet hybrid command" } ``` ## search-destination · Returns the box drawn faces on the uploaded panorama image - Identity: `search-destination:API:api:mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image ```json { "id": "api:mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image", "kind": "API", "title": "Returns the box drawn faces on the uploaded panorama image", "description": "Without any additional effort, This API detects faces in panorama images and draw their box around faces.", "href": "/api-reference/mappls-ai-ml-post-face-draw-pano-returns-the-box-drawn-faces-on-the-uploaded-panorama-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/face_draw_pano POST AI & Vision Face Detection and Blurring 360 APIs describeDataset2 hybrid command" } ``` ## search-destination · Returns the License Plate blured images of the uploaded 2D image - Identity: `search-destination:API:api:mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image ```json { "id": "api:mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image", "kind": "API", "title": "Returns the License Plate blured images of the uploaded 2D image", "description": "This API completely automates License Plate Detection, License Plate Blurring in 2D Images, without any extra effort", "href": "/api-reference/mappls-ai-ml-post-license-plate-blur-returns-the-license-plate-blured-images-of-the-uploaded-2d-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/license_plate_blur POST AI & Vision License Plate Detection and Blurring 2D API describeDataset1 hybrid command" } ``` ## search-destination · Returns the bounding box array for the inputs Image - Identity: `search-destination:API:api:mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image ```json { "id": "api:mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image", "kind": "API", "title": "Returns the bounding box array for the inputs Image", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the License Plate in the given 2D image.", "href": "/api-reference/mappls-ai-ml-post-license-plate-detection-returns-the-bounding-box-array-for-the-inputs-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/license_plate_detection POST AI & Vision License Plate Detection and Blurring 2D API describeDatasetGet hybrid command" } ``` ## search-destination · Returns the box drawn License Plate on the uploaded 2D image - Identity: `search-destination:API:api:mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image ```json { "id": "api:mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image", "kind": "API", "title": "Returns the box drawn License Plate on the uploaded 2D image", "description": "This API detects License Plate in 2D images and draw their box around License Plate.", "href": "/api-reference/mappls-ai-ml-post-license-plate-draw-returns-the-box-drawn-license-plate-on-the-uploaded-2d-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/license_plate_draw POST AI & Vision License Plate Detection and Blurring 2D API describeDataset2 hybrid command" } ``` ## search-destination · Returns the License plate blured images of the uploaded panorama image - Identity: `search-destination:API:api:mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image ```json { "id": "api:mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image", "kind": "API", "title": "Returns the License plate blured images of the uploaded panorama image", "description": "This API completely automates License plate Detection, License plate Blurring in panorama Images, without any extra effort", "href": "/api-reference/mappls-ai-ml-post-license-plate-blur-pano-returns-the-license-plate-blured-images-of-the-uploaded-panorama-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/license_plate_blur_pano POST AI & Vision License Plate Detection and Blurring 360 APIs describeDataset1 hybrid command" } ``` ## search-destination · Returns the bounding box array of License plate in panorama Images - Identity: `search-destination:API:api:mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images ```json { "id": "api:mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images", "kind": "API", "title": "Returns the bounding box array of License plate in panorama Images", "description": "API will predict the bounding box co-ordinates(x1, y1, x2, y2) i.e (left most coordinate, right most coordinate) of the License Plate in the given panorama image.", "href": "/api-reference/mappls-ai-ml-post-license-plate-detection-pano-returns-the-bounding-box-array-of-license-plate-in-panorama-images", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/license_plate_detection_pano POST AI & Vision License Plate Detection and Blurring 360 APIs describeDatasetGet hybrid command" } ``` ## search-destination · Returns the box drawn License plate in the uploaded panorama image - Identity: `search-destination:API:api:mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image` - Canonical: https://developer.mappls.com/api-reference/mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image ```json { "id": "api:mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image", "kind": "API", "title": "Returns the box drawn License plate in the uploaded panorama image", "description": "Without any additional effort, This API detects License plate in panorama images and draw their box around License plate.", "href": "/api-reference/mappls-ai-ml-post-license-plate-draw-pano-returns-the-box-drawn-license-plate-in-the-uploaded-panorama-image", "eyebrow": "POST · Mappls AI / ML · source-snapshot", "keywords": "/license_plate_draw_pano POST AI & Vision License Plate Detection and Blurring 360 APIs describeDataset2 hybrid command" } ``` ## search-destination · Perform aggregate operation on a single dataset - Identity: `search-destination:API:api:mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset ```json { "id": "api:mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset", "kind": "API", "title": "Perform aggregate operation on a single dataset", "description": "Perform aggregate operation on a single dataset", "href": "/api-reference/mgis-get-aggregate-perform-aggregate-operation-on-a-single-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/aggregate GET mGIS Dataset, Query and Validate (DQV) API aggregateOperationId stateful observe" } ``` ## search-destination · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `search-destination:API:api:mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry ```json { "id": "api:mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "kind": "API", "title": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "href": "/api-reference/mgis-get-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/catchement_query/join GET mGIS Dataset, Query and Validate (DQV) API catchement_queryId stateful observe" } ``` ## search-destination · Perform aggregate operation on a single dataset - Identity: `search-destination:API:api:mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset ```json { "id": "api:mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset", "kind": "API", "title": "Perform aggregate operation on a single dataset", "description": "Perform aggregate operation on a single dataset", "href": "/api-reference/mgis-get-dqv-aggregate-perform-aggregate-operation-on-a-single-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/aggregate GET mGIS Dataset, Query and Validate (DQV) API aggregateOperationId stateful observe" } ``` ## search-destination · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `search-destination:API:api:mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry ```json { "id": "api:mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "kind": "API", "title": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "href": "/api-reference/mgis-get-dqv-catchement-query-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/catchement_query/join GET mGIS Dataset, Query and Validate (DQV) API catchement_queryId stateful observe" } ``` ## search-destination · Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input. - Identity: `search-destination:API:api:mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input ```json { "id": "api:mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "kind": "API", "title": "Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input.", "description": "Performs arithmetic,string,geometric and aggregate operations on a column of a dataset passed as an input. Arithmetic operations are +, -, , /. String operations are concat, lower, upper, initcap, replace, length, substring. Geometric operations are area,length,latitude,longitude,centroid. Aggregate operations are count,min,max,median,stddev,sum,avg.", "href": "/api-reference/mgis-get-dqv-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/expression GET mGIS Dataset, Query and Validate (DQV) API expressionId stateful observe" } ``` ## search-destination · Performs geometric operations. - Identity: `search-destination:API:api:mgis-get-dqv-geometricfunction-performs-geometric-operations` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-geometricfunction-performs-geometric-operations ```json { "id": "api:mgis-get-dqv-geometricfunction-performs-geometric-operations", "kind": "API", "title": "Performs geometric operations.", "description": "Performs geometric operations between two user-defined geometry as well as within the dataset. The geometric opertaions available for user defined geometry are (the brackets consists of the parameters to be passed while using the geometric function): Area (geom1) Centroid (geom1) Buffer (geom1, distance) Intersection (geom1, geom2) Distance (geom1, geom2) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString) The geometric opertaions available for within dataset are: Area (geom1) Centroid (geom1) Buffer (geom1, distance) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString)", "href": "/api-reference/mgis-get-dqv-geometricfunction-performs-geometric-operations", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/geometricFunction GET mGIS Dataset, Query and Validate (DQV) API geometricFunctionID stateful observe" } ``` ## search-destination · Returns the BoundingBox of the particular layer. - Identity: `search-destination:API:api:mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer ```json { "id": "api:mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "kind": "API", "title": "Returns the BoundingBox of the particular layer.", "description": "Returns the Bounding Box of the particular layer without cqlfilter and returns the bounding box of feature with cqlfilter.", "href": "/api-reference/mgis-get-dqv-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/getBoundingBox GET mGIS Dataset, Query and Validate (DQV) API BoundingBoxID stateful observe" } ``` ## search-destination · Fetches the entire dataset. - Identity: `search-destination:API:api:mgis-get-dqv-getdataset-fetches-the-entire-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-getdataset-fetches-the-entire-dataset ```json { "id": "api:mgis-get-dqv-getdataset-fetches-the-entire-dataset", "kind": "API", "title": "Fetches the entire dataset.", "description": "Fetches the entire dataset. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together", "href": "/api-reference/mgis-get-dqv-getdataset-fetches-the-entire-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/getDataset GET mGIS Dataset, Query and Validate (DQV) API getDatasetId stateful observe" } ``` ## search-destination · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `search-destination:API:api:mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry ```json { "id": "api:mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "kind": "API", "title": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "href": "/api-reference/mgis-post-dqv-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/dqv/query_apply/join POST mGIS Dataset, Query and Validate (DQV) API applyQueryCrossId stateful command" } ``` ## search-destination · Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together. - Identity: `search-destination:API:api:mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together` - Canonical: https://developer.mappls.com/api-reference/mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together ```json { "id": "api:mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together", "kind": "API", "title": "Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together.", "description": "You cannot pass query, summerizeValue and uniqueValue paramater together. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together You can perform geometric operation (area and length) when queryType = 'functionBased' is passed. The query parameter is an optional paramater in this case. summerizeValue and uniqueValue paramater are not applicable in this case.", "href": "/api-reference/mgis-post-dqv-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/dqv/query_apply/single POST mGIS Dataset, Query and Validate (DQV) API applyQuerySingleId stateful command" } ``` ## search-destination · Validates the query to be applied on a dataset. - Identity: `search-destination:API:api:mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset ```json { "id": "api:mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset", "kind": "API", "title": "Validates the query to be applied on a dataset.", "description": "Validates the query to be applied on a dataset.", "href": "/api-reference/mgis-get-dqv-query-validation-validates-the-query-to-be-applied-on-a-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/dqv/query_validation GET mGIS Dataset, Query and Validate (DQV) API queryValidateId stateful observe" } ``` ## search-destination · Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input. - Identity: `search-destination:API:api:mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input` - Canonical: https://developer.mappls.com/api-reference/mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input ```json { "id": "api:mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "kind": "API", "title": "Performs arithmetic,geometric,aggregate and string operations on column(s) of a dataset passed as an input.", "description": "Performs arithmetic,string,geometric and aggregate operations on a column of a dataset passed as an input. Arithmetic operations are +, -, , /. String operations are concat, lower, upper, initcap, replace, length, substring. Geometric operations are area,length,latitude,longitude,centroid. Aggregate operations are count,min,max,median,stddev,sum,avg.", "href": "/api-reference/mgis-get-expression-performs-arithmetic-geometric-aggregate-and-string-operations-on-column-s-of-a-dataset-passed-as-an-input", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/expression GET mGIS Dataset, Query and Validate (DQV) API expressionId stateful observe" } ``` ## search-destination · Performs geometric operations. - Identity: `search-destination:API:api:mgis-get-geometricfunction-performs-geometric-operations` - Canonical: https://developer.mappls.com/api-reference/mgis-get-geometricfunction-performs-geometric-operations ```json { "id": "api:mgis-get-geometricfunction-performs-geometric-operations", "kind": "API", "title": "Performs geometric operations.", "description": "Performs geometric operations between two user-defined geometry as well as within the dataset. The geometric opertaions available for user defined geometry are (the brackets consists of the parameters to be passed while using the geometric function): Area (geom1) Centroid (geom1) Buffer (geom1, distance) Intersection (geom1, geom2) Distance (geom1, geom2) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString) The geometric opertaions available for within dataset are: Area (geom1) Centroid (geom1) Buffer (geom1, distance) isEmpty (geom1) length (geom1) endPoint (geom1) (has to be a lineString or multiLineString)", "href": "/api-reference/mgis-get-geometricfunction-performs-geometric-operations", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/geometricFunction GET mGIS Dataset, Query and Validate (DQV) API geometricFunctionID stateful observe" } ``` ## search-destination · Returns the BoundingBox of the particular layer. - Identity: `search-destination:API:api:mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer ```json { "id": "api:mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "kind": "API", "title": "Returns the BoundingBox of the particular layer.", "description": "Returns the Bounding Box of the particular layer without cqlfilter and returns the bounding box of feature with cqlfilter.", "href": "/api-reference/mgis-get-getboundingbox-returns-the-boundingbox-of-the-particular-layer", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getBoundingBox GET mGIS Dataset, Query and Validate (DQV) API BoundingBoxID stateful observe" } ``` ## search-destination · Fetches the entire dataset. - Identity: `search-destination:API:api:mgis-get-getdataset-fetches-the-entire-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getdataset-fetches-the-entire-dataset ```json { "id": "api:mgis-get-getdataset-fetches-the-entire-dataset", "kind": "API", "title": "Fetches the entire dataset.", "description": "Fetches the entire dataset. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together", "href": "/api-reference/mgis-get-getdataset-fetches-the-entire-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getDataset GET mGIS Dataset, Query and Validate (DQV) API getDatasetId stateful observe" } ``` ## search-destination · Returns the geometry of the particular layer on the basis of the featureID provided by the user. - Identity: `search-destination:API:api:mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user ```json { "id": "api:mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user", "kind": "API", "title": "Returns the geometry of the particular layer on the basis of the featureID provided by the user.", "description": "Returns the geometry of the particular layer on the basis of the featureID or filter provided by the user.(Any one of the filter or featureID can be provided)", "href": "/api-reference/mgis-get-getgeometry-returns-the-geometry-of-the-particular-layer-on-the-basis-of-the-featureid-provided-by-the-user", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getGeometry GET mGIS Dataset, Query and Validate (DQV) API GetGeometryID stateful observe" } ``` ## search-destination · Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry. - Identity: `search-destination:API:api:mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry ```json { "id": "api:mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "kind": "API", "title": "Fetches the results of the query applied between two dataset as well as between one datset and user defimed geometry.", "description": "User can performed both the following tasks: Non Spatial Query Spatial Query For spatial query user can perform the query between 2 datasets as well as between one dataset and user defined geometry in geojson format. Whereas Non-Spatial Query is only applicable between 2 datasets.", "href": "/api-reference/mgis-post-query-apply-join-fetches-the-results-of-the-query-applied-between-two-dataset-as-well-as-between-one-datset-and-user-defimed-geometry", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/query_apply/join POST mGIS Dataset, Query and Validate (DQV) API applyQueryCrossId stateful command" } ``` ## search-destination · Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together. - Identity: `search-destination:API:api:mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together` - Canonical: https://developer.mappls.com/api-reference/mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together ```json { "id": "api:mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together", "kind": "API", "title": "Fetches the results of the query applied on the single dataset. You cannot pass query, summerizeValue and uniqueValue paramater together.", "description": "You cannot pass query, summerizeValue and uniqueValue paramater together. You can perform 'order(sort) By' and 'groupBy' in 'query'. This has 3 cases: Only Order By Only Group By Both Order By and Group By together You can perform geometric operation (area and length) when queryType = 'functionBased' is passed. The query parameter is an optional paramater in this case. summerizeValue and uniqueValue paramater are not applicable in this case.", "href": "/api-reference/mgis-post-query-apply-single-fetches-the-results-of-the-query-applied-on-the-single-dataset-you-cannot-pass-query-summerizevalue-and-uniquevalue-paramater-together", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/query_apply/single POST mGIS Dataset, Query and Validate (DQV) API applyQuerySingleId stateful command" } ``` ## search-destination · Validates the query to be applied on a dataset. - Identity: `search-destination:API:api:mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset ```json { "id": "api:mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset", "kind": "API", "title": "Validates the query to be applied on a dataset.", "description": "Validates the query to be applied on a dataset.", "href": "/api-reference/mgis-get-query-validation-validates-the-query-to-be-applied-on-a-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/query_validation GET mGIS Dataset, Query and Validate (DQV) API queryValidateId stateful observe" } ``` ## search-destination · fetches the attribute names. - Identity: `search-destination:API:api:mgis-get-describedataset-fetches-the-attribute-names-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-describedataset-fetches-the-attribute-names-v1 ```json { "id": "api:mgis-get-describedataset-fetches-the-attribute-names-v1", "kind": "API", "title": "fetches the attribute names.", "description": "Fetches the attribute names of the dataset except geometry in response.", "href": "/api-reference/mgis-get-describedataset-fetches-the-attribute-names-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/describeDataset GET mGIS Describe Dataset API describeDatasetGet stateful observe" } ``` ## search-destination · fetches the attribute names. - Identity: `search-destination:API:api:mgis-get-describedataset-fetches-the-attribute-names` - Canonical: https://developer.mappls.com/api-reference/mgis-get-describedataset-fetches-the-attribute-names ```json { "id": "api:mgis-get-describedataset-fetches-the-attribute-names", "kind": "API", "title": "fetches the attribute names.", "description": "Fetches the attribute names of the dataset except geometry in response.", "href": "/api-reference/mgis-get-describedataset-fetches-the-attribute-names", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/describeDataset GET mGIS Describe Dataset API describeDatasetGet stateful observe" } ``` ## search-destination · Download the dataset files in .kml, .shp or .geojson files on server. - Identity: `search-destination:API:api:mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server` - Canonical: https://developer.mappls.com/api-reference/mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server ```json { "id": "api:mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server", "kind": "API", "title": "Download the dataset files in .kml, .shp or .geojson files on server.", "description": "Download the dataset files in .kml, .shp or .geojson files on server.", "href": "/api-reference/mgis-get-export-feature-download-the-dataset-files-in-kml-shp-or-geojson-files-on-server", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/export_feature GET mGIS Export Feature API getLegendsImgId stateful observe" } ``` ## search-destination · Fetches Geometry type of datasetNme - Identity: `search-destination:API:api:mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme ```json { "id": "api:mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "kind": "API", "title": "Fetches Geometry type of datasetNme", "description": "Fetches Geometry type of datasetNme includes vector and raster both.", "href": "/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getGeometryType GET mGIS Get Feature Centroid/ Geometry Type API getgeometryID stateful observe" } ``` ## search-destination · Fetches Geometry type of datasetNme - Identity: `search-destination:API:api:mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1 ```json { "id": "api:mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1", "kind": "API", "title": "Fetches Geometry type of datasetNme", "description": "Fetches Geometry type of datasetNme", "href": "/api-reference/mgis-get-getgeometrytype-fetches-geometry-type-of-datasetnme-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getGeometryType GET mGIS Get Geometry Type API getgeometryID stateful observe" } ``` ## search-destination · Fetches the feature information. - Identity: `search-destination:API:api:mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1 ```json { "id": "api:mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1", "kind": "API", "title": "Fetches the feature information.", "description": "Fetches the feature information of the dataset name of a bounding box.", "href": "/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/map/getFeatureInfo GET mGIS Get Map and Get Feature Info API getFeatureInfoId stateful observe" } ``` ## search-destination · Fetches the feature information. - Identity: `search-destination:API:api:mgis-get-map-getfeatureinfo-fetches-the-feature-information` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information ```json { "id": "api:mgis-get-map-getfeatureinfo-fetches-the-feature-information", "kind": "API", "title": "Fetches the feature information.", "description": "Fetches the feature information of the dataset name of a bounding box.", "href": "/api-reference/mgis-get-map-getfeatureinfo-fetches-the-feature-information", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/map/getFeatureInfo GET mGIS Get Map and Get Feature Info API getFeatureInfoId stateful observe" } ``` ## search-destination · Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry. - Identity: `search-destination:API:api:mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1 ```json { "id": "api:mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1", "kind": "API", "title": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "description": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "href": "/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/map/getLayerJoin GET mGIS Get Map and Get Feature Info API stateful observe" } ``` ## search-destination · Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry. - Identity: `search-destination:API:api:mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry ```json { "id": "api:mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "kind": "API", "title": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "description": "Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry.", "href": "/api-reference/mgis-get-map-getlayerjoin-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-for-spatial-join-between-2-datasets-as-well-as-between-one-dataset-and-userdefined-geometry", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/map/getLayerJoin GET mGIS Get Map and Get Feature Info API stateful observe" } ``` ## search-destination · Fetches the maptiles of the dataset name of a bounding box. - Identity: `search-destination:API:api:mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1 ```json { "id": "api:mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1", "kind": "API", "title": "Fetches the maptiles of the dataset name of a bounding box.", "description": "Fetches the maptiles of the dataset name of a bounding box in response.", "href": "/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/map/getMap GET mGIS Get Map and Get Feature Info API getMapId stateful observe" } ``` ## search-destination · Fetches the maptiles of the dataset name of a bounding box. - Identity: `search-destination:API:api:mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box` - Canonical: https://developer.mappls.com/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box ```json { "id": "api:mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "kind": "API", "title": "Fetches the maptiles of the dataset name of a bounding box.", "description": "Fetches the maptiles of the dataset name of a bounding box in response.", "href": "/api-reference/mgis-get-map-getmap-fetches-the-maptiles-of-the-dataset-name-of-a-bounding-box", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/map/getMap GET mGIS Get Map and Get Feature Info API getMapId stateful observe" } ``` ## search-destination · Fetches the names of all the datasets available in the user's workspace on the geoserver. - Identity: `search-destination:API:api:mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1 ```json { "id": "api:mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1", "kind": "API", "title": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "description": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "href": "/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getLayersList GET mGIS L3 (Layer List and Legends) API getLayersListId stateful observe" } ``` ## search-destination · Fetches the names of all the datasets available in the user's workspace on the geoserver. - Identity: `search-destination:API:api:mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver ```json { "id": "api:mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "kind": "API", "title": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "description": "Fetches the names of all the datasets available in the user's workspace on the geoserver.", "href": "/api-reference/mgis-get-getlayerslist-fetches-the-names-of-all-the-datasets-available-in-the-user-s-workspace-on-the-geoserver", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getLayersList GET mGIS L3 (Layer List and Legends) API getLayersListId stateful observe" } ``` ## search-destination · Fetches the image of legends for the given dataset. - Identity: `search-destination:API:api:mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1 ```json { "id": "api:mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1", "kind": "API", "title": "Fetches the image of legends for the given dataset.", "description": "Fetches the image of legends for the given dataset.", "href": "/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset-v1", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getLegendsImg GET mGIS L3 (Layer List and Legends) API getLegendsImgId stateful observe" } ``` ## search-destination · Fetches the image of legends for the given dataset. - Identity: `search-destination:API:api:mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset` - Canonical: https://developer.mappls.com/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset ```json { "id": "api:mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "kind": "API", "title": "Fetches the image of legends for the given dataset.", "description": "Fetches the image of legends for the given dataset.", "href": "/api-reference/mgis-get-getlegendsimg-fetches-the-image-of-legends-for-the-given-dataset", "eyebrow": "GET · mGIS Analytics · source-snapshot", "keywords": "/getLegendsImg GET mGIS L3 (Layer List and Legends) API getLegendsImgId stateful observe" } ``` ## search-destination · copy dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-copy-style-copy-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-copy-style-copy-dataset-on-mgis-engine ```json { "id": "api:mgis-post-copy-style-copy-dataset-on-mgis-engine", "kind": "API", "title": "copy dataset on mGIS engine", "description": "Creates a copy of an existing dataset and takes input of the dataset in the form of geojson and other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "href": "/api-reference/mgis-post-copy-style-copy-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/copy/style POST mGIS SAT API copydatasetPost stateful command" } ``` ## search-destination · Deletes the feature from the featureList. - Identity: `search-destination:API:api:mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist` - Canonical: https://developer.mappls.com/api-reference/mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist ```json { "id": "api:mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist", "kind": "API", "title": "Deletes the feature from the featureList.", "description": "Deletes the feature from the featureList on the basis of the filter value or the featureID value provided by the user.", "href": "/api-reference/mgis-delete-deletefeature-deletes-the-feature-from-the-featurelist", "eyebrow": "DELETE · mGIS Analytics · source-snapshot", "keywords": "/deleteFeature DELETE mGIS SAT API DeleteFeature stateful retire" } ``` ## search-destination · Rename an existing dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine ```json { "id": "api:mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine", "kind": "API", "title": "Rename an existing dataset on mGIS engine", "description": "Renames an existing dataset and takes input of the dataset in the form of geojson and other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "href": "/api-reference/mgis-post-rename-style-rename-an-existing-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/rename/style POST mGIS SAT API renamedatasetPost stateful command" } ``` ## search-destination · Duplicate dataset within mGIS engine. - Identity: `search-destination:API:api:mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine ```json { "id": "api:mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine", "kind": "API", "title": "Duplicate dataset within mGIS engine.", "description": "Produces a duplicate of an established dataset and accepts input in the form of geojson and additional parameters to generate/publish it on the mGIS engine, enabling its application for manipulation, analysis, and visualization within the mGIS platform.", "href": "/api-reference/mgis-post-sat-copy-style-duplicate-dataset-within-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/copy/style POST mGIS SAT API copydatasetPost stateful command" } ``` ## search-destination · Deletes the feature from the featureList. - Identity: `search-destination:API:api:mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist` - Canonical: https://developer.mappls.com/api-reference/mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist ```json { "id": "api:mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist", "kind": "API", "title": "Deletes the feature from the featureList.", "description": "Deletes the feature from the featureList on the basis of the filter value or the featureID value provided by the user.", "href": "/api-reference/mgis-delete-sat-deletefeature-deletes-the-feature-from-the-featurelist", "eyebrow": "DELETE · mGIS Analytics · source-snapshot", "keywords": "/sat/deleteFeature DELETE mGIS SAT API DeleteFeature stateful retire" } ``` ## search-destination · Rename an existing dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine ```json { "id": "api:mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine", "kind": "API", "title": "Rename an existing dataset on mGIS engine", "description": "Changes the name of an existing dataset, and accepts input in the form of geojson and additional parameters to generate/publish it on the mGIS engine. This facilitates its utilization for manipulation, analysis, and visualization within the mGIS platform.", "href": "/api-reference/mgis-post-sat-rename-style-rename-an-existing-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/rename/style POST mGIS SAT API renamedatasetPost stateful command" } ``` ## search-destination · Uploads and publishes the dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine ```json { "id": "api:mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine", "kind": "API", "title": "Uploads and publishes the dataset on mGIS engine", "description": "Accepts a dataset in formats like JSON, GeoJSON, CSV, XLSX, KML, ZIP, XLT, TIF, along with additional parameters, to generate/publish it on the mGIS engine. This enables further utilization for manipulation, analysis, and visualization within the mGIS platform.", "href": "/api-reference/mgis-post-sat-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/saveDataset/file POST mGIS SAT API PublishingFilePost stateful command" } ``` ## search-destination · Transfers and deploys the dataset onto the mGIS engine. - Identity: `search-destination:API:api:mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine ```json { "id": "api:mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine", "kind": "API", "title": "Transfers and deploys the dataset onto the mGIS engine.", "description": "Accepts a dataset in geojson format along with specified parameters to generate/publish it on the mGIS engine, enabling further manipulation, analysis, and visualization within the mGIS platform.", "href": "/api-reference/mgis-post-sat-savedataset-object-transfers-and-deploys-the-dataset-onto-the-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/saveDataset/object POST mGIS SAT API PublishingObjectPost stateful command" } ``` ## search-destination · Uploads and publishes the subset of datasets on mGIS engine - Identity: `search-destination:API:api:mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine ```json { "id": "api:mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine", "kind": "API", "title": "Uploads and publishes the subset of datasets on mGIS engine", "description": "Generates and deploys subsets of existing datasets, filtered by specific conditions (either attribute-based or spatial), for subsequent utilization in manipulation, analysis, and visualization within the mGIS platform.", "href": "/api-reference/mgis-post-sat-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/saveDataset/subset POST mGIS SAT API PublishingSubsetPost stateful command" } ``` ## search-destination · Modifies one or more features with the provided updated values. - Identity: `search-destination:API:api:mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values ```json { "id": "api:mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values", "kind": "API", "title": "Modifies one or more features with the provided updated values.", "description": "This operation involves making changes to individual or multiple features within a dataset by applying updated values. This process allows for the refinement or adjustment of specific attributes or characteristics associated with the geographic elements, ensuring that the dataset accurately reflects the most current information.", "href": "/api-reference/mgis-post-sat-updatefeature-modifies-one-or-more-features-with-the-provided-updated-values", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/updateFeature POST mGIS SAT API UpdateFeature stateful command" } ``` ## search-destination · Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user. - Identity: `search-destination:API:api:mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user ```json { "id": "api:mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user", "kind": "API", "title": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "description": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "href": "/api-reference/mgis-post-sat-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/updateGeom POST mGIS SAT API updateGeom stateful command" } ``` ## search-destination · Add or delete column in a given Dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine ```json { "id": "api:mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine", "kind": "API", "title": "Add or delete column in a given Dataset on mGIS engine", "description": "Performs operation like add and delete for columns on the given dataset table.", "href": "/api-reference/mgis-post-sat-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/sat/updateStructure POST mGIS SAT API updateStructure stateful command" } ``` ## search-destination · Uploads and publishes the dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine ```json { "id": "api:mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine", "kind": "API", "title": "Uploads and publishes the dataset on mGIS engine", "description": "Takes input of the dataset in the following format => JSON | json | geojson | GEOJSON | csv | CSV | xlsx | xls | XLSX | XLS | kml | KML | zip | ZIP | xlt | XLT | xlsm | XLSM | xltx | XLTX | TIF | tif along with other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "href": "/api-reference/mgis-post-savedataset-file-uploads-and-publishes-the-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/saveDataset/file POST mGIS SAT API PublishingFilePost stateful command" } ``` ## search-destination · Uploads and publishes the dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine ```json { "id": "api:mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine", "kind": "API", "title": "Uploads and publishes the dataset on mGIS engine", "description": "Takes input of the dataset in the form of geojson and other parameters to create/publish dataset on mGIS engine, so that it can be used for manipulation/analysis/visualization on mGIS platform", "href": "/api-reference/mgis-post-savedataset-object-uploads-and-publishes-the-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/saveDataset/object POST mGIS SAT API PublishingObjectPost stateful command" } ``` ## search-destination · Uploads and publishes the subset of datasets on mGIS engine - Identity: `search-destination:API:api:mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine ```json { "id": "api:mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine", "kind": "API", "title": "Uploads and publishes the subset of datasets on mGIS engine", "description": "Creates and publishes subset of the existing datasets based on certain conditions (attributes based / spatial) so that the resultant sub-dataset can be used for further manipulation/analysis/visualization on mGIS platform", "href": "/api-reference/mgis-post-savedataset-subset-uploads-and-publishes-the-subset-of-datasets-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/saveDataset/subset POST mGIS SAT API PublishingSubsetPost stateful command" } ``` ## search-destination · Updates a single or multiple features with the updated values provided. - Identity: `search-destination:API:api:mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided` - Canonical: https://developer.mappls.com/api-reference/mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided ```json { "id": "api:mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided", "kind": "API", "title": "Updates a single or multiple features with the updated values provided.", "description": "Updates the a feature or multiple features with the updated values provided.", "href": "/api-reference/mgis-post-updatefeature-updates-a-single-or-multiple-features-with-the-updated-values-provided", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/updateFeature POST mGIS SAT API UpdateFeature stateful command" } ``` ## search-destination · Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user. - Identity: `search-destination:API:api:mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user` - Canonical: https://developer.mappls.com/api-reference/mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user ```json { "id": "api:mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user", "kind": "API", "title": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "description": "Updates the geometry of the feature on the basis of the dataset name and any one of the filter or featureId provided by the user.", "href": "/api-reference/mgis-post-updategeom-updates-the-geometry-of-the-feature-on-the-basis-of-the-dataset-name-and-any-one-of-the-filter-or-featureid-provided-by-the-user", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/updateGeom POST mGIS SAT API updateGeom stateful command" } ``` ## search-destination · Add or delete column in a given Dataset on mGIS engine - Identity: `search-destination:API:api:mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine` - Canonical: https://developer.mappls.com/api-reference/mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine ```json { "id": "api:mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine", "kind": "API", "title": "Add or delete column in a given Dataset on mGIS engine", "description": "Performs operation like add and delete for columns on the given dataset table.", "href": "/api-reference/mgis-post-updatestructure-add-or-delete-column-in-a-given-dataset-on-mgis-engine", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/updateStructure POST mGIS SAT API updateStructure stateful command" } ``` ## search-destination · Returns the array of features which contains objects of geometry of the uploaded image. - Identity: `search-destination:API:api:mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image` - Canonical: https://developer.mappls.com/api-reference/mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image ```json { "id": "api:mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "kind": "API", "title": "Returns the array of features which contains objects of geometry of the uploaded image.", "description": "Fetches the featureList of the uploaded image on the basis of the geotag, featureNme, bounds provided by the user. File, geotag, featureNme are the mandatory parameters.", "href": "/api-reference/mgis-post-ai-ml-imagesegmentation-returns-the-array-of-features-which-contains-objects-of-geometry-of-the-uploaded-image", "eyebrow": "POST · mGIS Analytics · source-snapshot", "keywords": "/ai_ml/imageSegmentation POST mGIS Satellite Image Segmentation API describeDatasetGet stateful command" } ``` ## search-destination · Returns the details of all the models - Identity: `search-destination:API:api:skydnn-ai-get-models-returns-the-details-of-all-the-models` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models ```json { "id": "api:skydnn-ai-get-models-returns-the-details-of-all-the-models", "kind": "API", "title": "Returns the details of all the models", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "href": "/api-reference/skydnn-ai-get-models-returns-the-details-of-all-the-models", "eyebrow": "GET · SkyDNN AI & Vision · current-source", "keywords": "/models GET AI & Vision hybrid observe" } ``` ## search-destination · Returns the details of provided model - Identity: `search-destination:API:api:skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model ```json { "id": "api:skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "kind": "API", "title": "Returns the details of provided model", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "href": "/api-reference/skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "eyebrow": "GET · SkyDNN AI & Vision · current-source", "keywords": "/models/{api_model_key} GET AI & Vision hybrid observe" } ``` ## search-destination · Returns the prediction as response in form of JSON - Identity: `search-destination:API:api:skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json ```json { "id": "api:skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "kind": "API", "title": "Returns the prediction as response in form of JSON", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "href": "/api-reference/skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json", "eyebrow": "POST · SkyDNN AI & Vision · current-source", "keywords": "/predict POST AI & Vision hybrid command" } ``` ## search-destination · Returns the current models in port - Identity: `search-destination:API:api:skydnn-ai-get-server-whoami-returns-the-current-models-in-port` - Canonical: https://developer.mappls.com/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port ```json { "id": "api:skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "kind": "API", "title": "Returns the current models in port", "description": "Image classification and segmentation APIs enable state-of-the-art Computer Vision AI inferences to detect and catgorise objects in the photographs and generate localisation as well as map view of geospatial objects useful for a wide range of geospatial analytics and applications. On a Mission to \"Make our world better through maps, location technologies & IoT\" , Mappls is continuously enabling real time hyper-local information access through its map & location services. Skydnn APIs are a part of Skydnn AI platform and the document describes API's usage and specifications for their integration into any solution. The document covers : List of APIs along with use cases Explanation of resources and query parameters Listing of response structure and data type", "href": "/api-reference/skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "eyebrow": "GET · SkyDNN AI & Vision · current-source", "keywords": "/server/whoami GET AI & Vision hybrid observe" } ``` ## search-destination · To get all your client details - Identity: `search-destination:API:api:workmate-get-clients-to-get-all-your-client-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-clients-to-get-all-your-client-details ```json { "id": "api:workmate-get-clients-to-get-all-your-client-details", "kind": "API", "title": "To get all your client details", "description": "Get all your client details that comes under your organization. Using this API you will be able to identify the client's unique id, name, address,lat, long, and the contact person details. Also, you can get client's department details belong to the client.", "href": "/api-reference/workmate-get-clients-to-get-all-your-client-details", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/clients GET Workmate Client Management getClient stateful observe" } ``` ## search-destination · To create new client - Identity: `search-destination:API:api:workmate-post-clients-to-create-new-client` - Canonical: https://developer.mappls.com/api-reference/workmate-post-clients-to-create-new-client ```json { "id": "api:workmate-post-clients-to-create-new-client", "kind": "API", "title": "To create new client", "description": "Create Client API allows you to add a new client to your organization. Using this API, You can create a new client with a name, address, lat,long, contact details, Department along with their contact details.", "href": "/api-reference/workmate-post-clients-to-create-new-client", "eyebrow": "POST · Workmate Workforce · legacy-source", "keywords": "/clients POST Workmate Client Management createClient stateful command" } ``` ## search-destination · To get the list of client category in an account - Identity: `search-destination:API:api:workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account` - Canonical: https://developer.mappls.com/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account ```json { "id": "api:workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "kind": "API", "title": "To get the list of client category in an account", "description": "It gives all the client categories in an particular account. Category id can be used to create a client.", "href": "/api-reference/workmate-get-configurations-categories-to-get-the-list-of-client-category-in-an-account", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/configurations/categories GET Workmate Company Configurations getclientCategories stateful observe" } ``` ## search-destination · To get the form's Id and their details from your account. - Identity: `search-destination:API:api:workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account` - Canonical: https://developer.mappls.com/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account ```json { "id": "api:workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "kind": "API", "title": "To get the form's Id and their details from your account.", "description": "It gives all the forms which are created under your account. using this API you can get the unique Ids of different form and it can be used in custom form data API.", "href": "/api-reference/workmate-get-configurations-forms-to-get-the-form-s-id-and-their-details-from-your-account", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/configurations/forms GET Workmate Company Configurations getForms stateful observe" } ``` ## search-destination · Get users attendance details with travelled distance. - Identity: `search-destination:API:api:workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance` - Canonical: https://developer.mappls.com/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance ```json { "id": "api:workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "kind": "API", "title": "Get users attendance details with travelled distance.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "href": "/api-reference/workmate-get-reports-attendances-get-users-attendance-details-with-travelled-distance", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/reports/attendances GET Workmate Reports gattendanceetAttendanceData stateful observe" } ``` ## search-destination · To get form based check in/out details - Identity: `search-destination:API:api:workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details ```json { "id": "api:workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "kind": "API", "title": "To get form based check in/out details", "description": "Get the complete detail about the check in/check-out activity against the particular form. Get the form Id from the custom form API.", "href": "/api-reference/workmate-get-reports-forms-formid-to-get-form-based-check-in-out-details", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/reports/forms/{formId} GET Workmate Reports getCustomFormsData stateful observe" } ``` ## search-destination · Get users movement details - Identity: `search-destination:API:api:workmate-get-reports-movements-userid-get-users-movement-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-reports-movements-userid-get-users-movement-details ```json { "id": "api:workmate-get-reports-movements-userid-get-users-movement-details", "kind": "API", "title": "Get users movement details", "description": "Get individual users location data which includes address, time, speed, phones's battery level.", "href": "/api-reference/workmate-get-reports-movements-userid-get-users-movement-details", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/reports/movements/{userId} GET Workmate Reports getMovementData stateful observe" } ``` ## search-destination · To get the task list details. - Identity: `search-destination:API:api:workmate-get-tasklists-to-get-the-task-list-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-tasklists-to-get-the-task-list-details ```json { "id": "api:workmate-get-tasklists-to-get-the-task-list-details", "kind": "API", "title": "To get the task list details.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "href": "/api-reference/workmate-get-tasklists-to-get-the-task-list-details", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/taskLists GET Workmate Task Management getTaskList stateful observe" } ``` ## search-destination · To get the list of tasks and their details - Identity: `search-destination:API:api:workmate-get-tasks-to-get-the-list-of-tasks-and-their-details` - Canonical: https://developer.mappls.com/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details ```json { "id": "api:workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "kind": "API", "title": "To get the list of tasks and their details", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "href": "/api-reference/workmate-get-tasks-to-get-the-list-of-tasks-and-their-details", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/tasks GET Workmate Task Management getTask stateful observe" } ``` ## search-destination · To create new Task - Identity: `search-destination:API:api:workmate-post-tasks-to-create-new-task` - Canonical: https://developer.mappls.com/api-reference/workmate-post-tasks-to-create-new-task ```json { "id": "api:workmate-post-tasks-to-create-new-task", "kind": "API", "title": "To create new Task", "description": "Create Task API allows you to assign a new Task to your users. Using this API, You can Assign a new task with a task summary, description, assigned to user, task owner, the priority of the task, task location", "href": "/api-reference/workmate-post-tasks-to-create-new-task", "eyebrow": "POST · Workmate Workforce · legacy-source", "keywords": "/tasks POST Workmate Task Management createTask stateful command" } ``` ## search-destination · To get the task details for the given task id. - Identity: `search-destination:API:api:workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id` - Canonical: https://developer.mappls.com/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id ```json { "id": "api:workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "kind": "API", "title": "To get the task details for the given task id.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "href": "/api-reference/workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/tasks/{taskId} GET Workmate Task Management getTaskbyId stateful observe" } ``` ## search-destination · To update the task description & status. - Identity: `search-destination:API:api:workmate-put-tasks-taskid-to-update-the-task-description-status` - Canonical: https://developer.mappls.com/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status ```json { "id": "api:workmate-put-tasks-taskid-to-update-the-task-description-status", "kind": "API", "title": "To update the task description & status.", "description": "These APIs follow OAuth2 based security. To know more about how to create your authorization tokens, please use our authorization token URL. More details available here. The API leverages OAuth 2.0 based security. Hence, the developer would need to send a request for an access token using their clientid and clientsecret to the OAuth API. Once validated from the OAuth API, the accesstoken and the tokentype need to be sent as Authorization header with the value: \"{tokentype} {accesstoken}”. Authorization : tokentype accesstoken.", "href": "/api-reference/workmate-put-tasks-taskid-to-update-the-task-description-status", "eyebrow": "PUT · Workmate Workforce · legacy-source", "keywords": "/tasks/{taskId} PUT Workmate Task Management updateTask stateful transition" } ``` ## search-destination · To get all the user details which belongs to your organization. - Identity: `search-destination:API:api:workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization` - Canonical: https://developer.mappls.com/api-reference/workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization ```json { "id": "api:workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "kind": "API", "title": "To get all the user details which belongs to your organization.", "description": "Gives all the users details of your organization. Using this API, you will be able to identify the workmate user id, workplace location, employee Id and other important details related to a user profile. You can only get the list of users who belongs to your organization.", "href": "/api-reference/workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "eyebrow": "GET · Workmate Workforce · legacy-source", "keywords": "/users GET Workmate User Details getUsers stateful observe" } ``` ## search-destination · GET /alarm generation comparison - Identity: `search-destination:API generation:api-generation:intouch-get-alarm-10c842d182` - Canonical: https://developer.mappls.com/api-generations/intouch-get-alarm-10c842d182 ```json { "id": "api-generation:intouch-get-alarm-10c842d182", "kind": "API generation", "title": "GET /alarm generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-get-alarm-10c842d182", "eyebrow": "GET · InTouch Telematics · 0 review signals", "keywords": "/alarm InTouch stateful v1-0-0 1.0.0 This API will get all the alarm configurations for a user. v2-0-0 2.0.0 This API will get all the alarm configurations for a user." } ``` ## search-destination · POST /alarm generation comparison - Identity: `search-destination:API generation:api-generation:intouch-post-alarm-8579e8cb93` - Canonical: https://developer.mappls.com/api-generations/intouch-post-alarm-8579e8cb93 ```json { "id": "api-generation:intouch-post-alarm-8579e8cb93", "kind": "API generation", "title": "POST /alarm generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-post-alarm-8579e8cb93", "eyebrow": "POST · InTouch Telematics · 0 review signals", "keywords": "/alarm InTouch stateful v1-0-0 1.0.0 This API will create an alarm. v2-0-0 2.0.0 This API will create an alarm." } ``` ## search-destination · DELETE /alarm/{id} generation comparison - Identity: `search-destination:API generation:api-generation:intouch-delete-alarm-id-ca6df54f47` - Canonical: https://developer.mappls.com/api-generations/intouch-delete-alarm-id-ca6df54f47 ```json { "id": "api-generation:intouch-delete-alarm-id-ca6df54f47", "kind": "API generation", "title": "DELETE /alarm/{id} generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-delete-alarm-id-ca6df54f47", "eyebrow": "DELETE · InTouch Telematics · 0 review signals", "keywords": "/alarm/{id} InTouch stateful v1-0-0 1.0.0 Deletes An Alarm Config v2-0-0 2.0.0 Deletes An Alarm Config" } ``` ## search-destination · POST /alarm/{id} generation comparison - Identity: `search-destination:API generation:api-generation:intouch-post-alarm-id-352bd7eab8` - Canonical: https://developer.mappls.com/api-generations/intouch-post-alarm-id-352bd7eab8 ```json { "id": "api-generation:intouch-post-alarm-id-352bd7eab8", "kind": "API generation", "title": "POST /alarm/{id} generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-post-alarm-id-352bd7eab8", "eyebrow": "POST · InTouch Telematics · 0 review signals", "keywords": "/alarm/{id} InTouch stateful v1-0-0 1.0.0 Updates An Alarm Config v2-0-0 2.0.0 Updates An Alarm Config" } ``` ## search-destination · GET /alarm/alarmLog/ generation comparison - Identity: `search-destination:API generation:api-generation:intouch-get-alarm-alarmlog-0de27f90fb` - Canonical: https://developer.mappls.com/api-generations/intouch-get-alarm-alarmlog-0de27f90fb ```json { "id": "api-generation:intouch-get-alarm-alarmlog-0de27f90fb", "kind": "API generation", "title": "GET /alarm/alarmLog/ generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-get-alarm-alarmlog-0de27f90fb", "eyebrow": "GET · InTouch Telematics · 0 review signals", "keywords": "/alarm/alarmLog/ InTouch stateful v1-0-0 1.0.0 Gets The List Of Alarm Config(s) v2-0-0 2.0.0 Gets The List Of Alarm Config(s)" } ``` ## search-destination · GET /geofence/ generation comparison - Identity: `search-destination:API generation:api-generation:intouch-get-geofence-0428994c0e` - Canonical: https://developer.mappls.com/api-generations/intouch-get-geofence-0428994c0e ```json { "id": "api-generation:intouch-get-geofence-0428994c0e", "kind": "API generation", "title": "GET /geofence/ generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-get-geofence-0428994c0e", "eyebrow": "GET · InTouch Telematics · 0 review signals", "keywords": "/geofence/ InTouch stateful v1-0-0 1.0.0 Gets All The Configured Geofence(s) v2-0-0 2.0.0 Gets All The Configured Geofence(s)" } ``` ## search-destination · POST /geofence/ generation comparison - Identity: `search-destination:API generation:api-generation:intouch-post-geofence-9930a2a5a4` - Canonical: https://developer.mappls.com/api-generations/intouch-post-geofence-9930a2a5a4 ```json { "id": "api-generation:intouch-post-geofence-9930a2a5a4", "kind": "API generation", "title": "POST /geofence/ generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-post-geofence-9930a2a5a4", "eyebrow": "POST · InTouch Telematics · 0 review signals", "keywords": "/geofence/ InTouch stateful v1-0-0 1.0.0 Create A New Geofence v2-0-0 2.0.0 Create A New Geofence" } ``` ## search-destination · DELETE /geofence/{id} generation comparison - Identity: `search-destination:API generation:api-generation:intouch-delete-geofence-id-acd58f4735` - Canonical: https://developer.mappls.com/api-generations/intouch-delete-geofence-id-acd58f4735 ```json { "id": "api-generation:intouch-delete-geofence-id-acd58f4735", "kind": "API generation", "title": "DELETE /geofence/{id} generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-delete-geofence-id-acd58f4735", "eyebrow": "DELETE · InTouch Telematics · 0 review signals", "keywords": "/geofence/{id} InTouch stateful v1-0-0 1.0.0 Delete A Geofence. v2-0-0 2.0.0 Delete A Geofence." } ``` ## search-destination · GET /geofence/{id} generation comparison - Identity: `search-destination:API generation:api-generation:intouch-get-geofence-id-9d8bafa2d5` - Canonical: https://developer.mappls.com/api-generations/intouch-get-geofence-id-9d8bafa2d5 ```json { "id": "api-generation:intouch-get-geofence-id-9d8bafa2d5", "kind": "API generation", "title": "GET /geofence/{id} generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-get-geofence-id-9d8bafa2d5", "eyebrow": "GET · InTouch Telematics · 0 review signals", "keywords": "/geofence/{id} InTouch stateful v1-0-0 1.0.0 Get A Single Or Multiple Geofence(s). v2-0-0 2.0.0 Get A Single Or Multiple Geofence(s)." } ``` ## search-destination · POST /geofence/{id} generation comparison - Identity: `search-destination:API generation:api-generation:intouch-post-geofence-id-83a7719be5` - Canonical: https://developer.mappls.com/api-generations/intouch-post-geofence-id-83a7719be5 ```json { "id": "api-generation:intouch-post-geofence-id-83a7719be5", "kind": "API generation", "title": "POST /geofence/{id} generation comparison", "description": "Compare v1-0-0 and v2-0-0 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/intouch-post-geofence-id-83a7719be5", "eyebrow": "POST · InTouch Telematics · 0 review signals", "keywords": "/geofence/{id} InTouch stateful v1-0-0 1.0.0 Update A Geofence. v2-0-0 2.0.0 Update A Geofence." } ``` ## search-destination · GET /describeDataset generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-describedataset-855417da71` - Canonical: https://developer.mappls.com/api-generations/mgis-get-describedataset-855417da71 ```json { "id": "api-generation:mgis-get-describedataset-855417da71", "kind": "API generation", "title": "GET /describeDataset generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-describedataset-855417da71", "eyebrow": "GET · mGIS Analytics · 3 review signals", "keywords": "/describeDataset mGIS stateful v1 V1.0.0 fetches the attribute names. v2 V2.0.0 fetches the attribute names. Response status no longer declared: 404 Response status no longer declared: 422 Declared server URL changed" } ``` ## search-destination · GET /getGeometryType generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-getgeometrytype-97af5b353e` - Canonical: https://developer.mappls.com/api-generations/mgis-get-getgeometrytype-97af5b353e ```json { "id": "api-generation:mgis-get-getgeometrytype-97af5b353e", "kind": "API generation", "title": "GET /getGeometryType generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-getgeometrytype-97af5b353e", "eyebrow": "GET · mGIS Analytics · 2 review signals", "keywords": "/getGeometryType mGIS stateful v1 V1.0.0 Fetches Geometry type of datasetNme v2 V2.0.0 Fetches Geometry type of datasetNme Response status no longer declared: 422 Declared server URL changed" } ``` ## search-destination · GET /getLayersList generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-getlayerslist-7a2d5959c7` - Canonical: https://developer.mappls.com/api-generations/mgis-get-getlayerslist-7a2d5959c7 ```json { "id": "api-generation:mgis-get-getlayerslist-7a2d5959c7", "kind": "API generation", "title": "GET /getLayersList generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-getlayerslist-7a2d5959c7", "eyebrow": "GET · mGIS Analytics · 1 review signals", "keywords": "/getLayersList mGIS stateful v1 V1.0.0 Fetches the names of all the datasets available in the user's workspace on the geoserver. v2 V1.0.0 Fetches the names of all the datasets available in the user's workspace on the geoserver. Declared server URL changed" } ``` ## search-destination · GET /getLegendsImg generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-getlegendsimg-eed36ebbd0` - Canonical: https://developer.mappls.com/api-generations/mgis-get-getlegendsimg-eed36ebbd0 ```json { "id": "api-generation:mgis-get-getlegendsimg-eed36ebbd0", "kind": "API generation", "title": "GET /getLegendsImg generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-getlegendsimg-eed36ebbd0", "eyebrow": "GET · mGIS Analytics · 1 review signals", "keywords": "/getLegendsImg mGIS stateful v1 V1.0.0 Fetches the image of legends for the given dataset. v2 V1.0.0 Fetches the image of legends for the given dataset. Declared server URL changed" } ``` ## search-destination · GET /map/getFeatureInfo generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-map-getfeatureinfo-6dd132c52b` - Canonical: https://developer.mappls.com/api-generations/mgis-get-map-getfeatureinfo-6dd132c52b ```json { "id": "api-generation:mgis-get-map-getfeatureinfo-6dd132c52b", "kind": "API generation", "title": "GET /map/getFeatureInfo generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-map-getfeatureinfo-6dd132c52b", "eyebrow": "GET · mGIS Analytics · 0 review signals", "keywords": "/map/getFeatureInfo mGIS stateful v1 V2.0.0 Fetches the feature information. v2 V2.0.0 Fetches the feature information." } ``` ## search-destination · GET /map/getLayerJoin generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-map-getlayerjoin-9a1aac1c53` - Canonical: https://developer.mappls.com/api-generations/mgis-get-map-getlayerjoin-9a1aac1c53 ```json { "id": "api-generation:mgis-get-map-getlayerjoin-9a1aac1c53", "kind": "API generation", "title": "GET /map/getLayerJoin generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-map-getlayerjoin-9a1aac1c53", "eyebrow": "GET · mGIS Analytics · 0 review signals", "keywords": "/map/getLayerJoin mGIS stateful v1 V2.0.0 Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry. v2 V2.0.0 Fetches the maptiles of the dataset name of a bounding box for Spatial Join between 2 datasets as well as between one dataset and userDefined geometry." } ``` ## search-destination · GET /map/getMap generation comparison - Identity: `search-destination:API generation:api-generation:mgis-get-map-getmap-ee5f026cd2` - Canonical: https://developer.mappls.com/api-generations/mgis-get-map-getmap-ee5f026cd2 ```json { "id": "api-generation:mgis-get-map-getmap-ee5f026cd2", "kind": "API generation", "title": "GET /map/getMap generation comparison", "description": "Compare v1 and v2 exact source declarations, compatibility signals, and migration checks.", "href": "/api-generations/mgis-get-map-getmap-ee5f026cd2", "eyebrow": "GET · mGIS Analytics · 0 review signals", "keywords": "/map/getMap mGIS stateful v1 V2.0.0 Fetches the maptiles of the dataset name of a bounding box. v2 V2.0.0 Fetches the maptiles of the dataset name of a bounding box." } ``` ## search-destination · Mappls API Organization Guide - Identity: `search-destination:SDK & guide:sdk-guide:github` - Canonical: https://developer.mappls.com/reference/github ```json { "id": "sdk-guide:github", "kind": "SDK & guide", "title": "Mappls API Organization Guide", "description": "is a ✨special ✨ repository that you can use to add README.md to your public organization profile, visible to anyone.", "href": "/reference/github", "eyebrow": "Guide · current", "keywords": ".github maps Unspecified" } ``` ## search-destination · Flutter MapmyIndia GL - Identity: `search-destination:SDK & guide:sdk-guide:flutter-mapmyindia-gl` - Canonical: https://developer.mappls.com/sdks/flutter-mapmyindia-gl ```json { "id": "sdk-guide:flutter-mapmyindia-gl", "kind": "SDK & guide", "title": "Flutter MapmyIndia GL", "description": "A Mappls sdk for maps, search places, routes navigation, tracking telematics, widgets deep links, offline automotive, capture feedback across Flutter.", "href": "/sdks/flutter-mapmyindia-gl", "eyebrow": "SDK · deprecated", "keywords": "flutter-mapmyindia-gl maps search-places routes-navigation tracking-telematics widgets-deep-links offline-automotive capture-feedback Flutter Dart oauth2 api-key" } ``` ## search-destination · Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-angular-sample-websdk-rest` - Canonical: https://developer.mappls.com/reference/mapmyindia-angular-sample-websdk-rest ```json { "id": "sdk-guide:mapmyindia-angular-sample-websdk-rest", "kind": "SDK & guide", "title": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "description": "Angular Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-angular-sample-websdk-rest", "eyebrow": "Sample · sample", "keywords": "mapmyindia-angular-sample-webSDK-REST maps search-places identity-platform Web REST JSON JavaScript HTML CSS oauth2 api-key" } ``` ## search-destination · Transaction Definitions - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-api-addendums` - Canonical: https://developer.mappls.com/reference/mapmyindia-api-addendums ```json { "id": "sdk-guide:mapmyindia-api-addendums", "kind": "SDK & guide", "title": "Transaction Definitions", "description": "This repository has the useful addendum like updated transaction definitions, category codes for Nearby Places Search, Branding Guidelines and other useful info for using MapmyIndia SDKs & APIs", "href": "/reference/mapmyindia-api-addendums", "eyebrow": "Guide · legacy", "keywords": "mapmyindia-api-addendums maps search-places routes-navigation gis-analytics capture-feedback Unspecified" } ``` ## search-destination · MapmyIndia Geo-Analytics APIs ! - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-geoanalytics-api-web` - Canonical: https://developer.mappls.com/reference/mapmyindia-geoanalytics-api-web ```json { "id": "sdk-guide:mapmyindia-geoanalytics-api-web", "kind": "SDK & guide", "title": "MapmyIndia Geo-Analytics APIs !", "description": "MapmyIndia GeoAnalytics APIs - MapmyIndia’s Data served through convenient and easy to use web APIs", "href": "/reference/mapmyindia-geoanalytics-api-web", "eyebrow": "REST API · legacy", "keywords": "mapmyindia-geoanalytics-api-web maps gis-analytics Web api-key" } ``` ## search-destination · MapmyIndia Interactive Map JS API ! - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-interactive-map-js-api` - Canonical: https://developer.mappls.com/sdks/mapmyindia-interactive-map-js-api ```json { "id": "sdk-guide:mapmyindia-interactive-map-js-api", "kind": "SDK & guide", "title": "MapmyIndia Interactive Map JS API !", "description": "Integrate Map APIs to visualize maps, accurate directions, geo-coding and traffic flow", "href": "/sdks/mapmyindia-interactive-map-js-api", "eyebrow": "SDK · legacy", "keywords": "mapmyindia-interactive-map-js-api maps search-places routes-navigation gis-analytics widgets-deep-links Web REST api-key" } ``` ## search-destination · Mapmyindia Intouch Android SDK - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-intouch-android-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-intouch-android-sdk ```json { "id": "sdk-guide:mapmyindia-intouch-android-sdk", "kind": "SDK & guide", "title": "Mapmyindia Intouch Android SDK", "description": "A Mappls sdk for tracking telematics, workforce, gis analytics, widgets deep links, identity platform across Android.", "href": "/sdks/mapmyindia-intouch-android-sdk", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-intouch-android-sdk tracking-telematics workforce gis-analytics widgets-deep-links identity-platform Android Java Text Kotlin oauth2" } ``` ## search-destination · MapmyIndia Intouch iOS SDK - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-intouch-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-intouch-ios-sdk ```json { "id": "sdk-guide:mapmyindia-intouch-ios-sdk", "kind": "SDK & guide", "title": "MapmyIndia Intouch iOS SDK", "description": "A Mappls sdk for maps, tracking telematics, workforce, gis analytics, identity platform across iOS.", "href": "/sdks/mapmyindia-intouch-ios-sdk", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-intouch-ios-sdk maps tracking-telematics workforce gis-analytics identity-platform iOS Text oauth2" } ``` ## search-destination · Mapmyindia Intouch React Native SDK - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-intouch-react-native-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-intouch-react-native-sdk ```json { "id": "sdk-guide:mapmyindia-intouch-react-native-sdk", "kind": "SDK & guide", "title": "Mapmyindia Intouch React Native SDK", "description": "A Mappls sdk for tracking telematics, workforce, gis analytics, identity platform across React Native.", "href": "/sdks/mapmyindia-intouch-react-native-sdk", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-intouch-react-native-sdk tracking-telematics workforce gis-analytics identity-platform React Native Groovy Text JavaScript oauth2" } ``` ## search-destination · Mapmyindia Intouch REST Apis - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-intouch-rest-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-rest-apis ```json { "id": "sdk-guide:mapmyindia-intouch-rest-apis", "kind": "SDK & guide", "title": "Mapmyindia Intouch REST Apis", "description": "A Mappls rest api for tracking telematics across REST.", "href": "/reference/mapmyindia-intouch-rest-apis", "eyebrow": "REST API · deprecated", "keywords": "mapmyindia-intouch-rest-apis tracking-telematics REST" } ``` ## search-destination · Mapmyindia Intouch Web Plugins - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-intouch-web-plugins` - Canonical: https://developer.mappls.com/reference/mapmyindia-intouch-web-plugins ```json { "id": "sdk-guide:mapmyindia-intouch-web-plugins", "kind": "SDK & guide", "title": "Mapmyindia Intouch Web Plugins", "description": "A Mappls widget for tracking telematics, widgets deep links, capture feedback across Web, Widgets/Deep links.", "href": "/reference/mapmyindia-intouch-web-plugins", "eyebrow": "Widget · legacy", "keywords": "mapmyindia-intouch-web-plugins tracking-telematics widgets-deep-links capture-feedback Web Widgets/Deep links" } ``` ## search-destination · MapmyIndia Map SDK for Cordova/Ionic - Beta 1 - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-map-cordova-ionic-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-map-cordova-ionic-beta ```json { "id": "sdk-guide:mapmyindia-map-cordova-ionic-beta", "kind": "SDK & guide", "title": "MapmyIndia Map SDK for Cordova/Ionic - Beta 1", "description": "MapmyIndia Map library for Cordova/Ionic - Beta 1 Hybrid SDK", "href": "/reference/mapmyindia-map-cordova-ionic-beta", "eyebrow": "Guide · deprecated", "keywords": "mapmyindia-map-cordova-ionic-beta maps search-places gis-analytics widgets-deep-links Cordova/Ionic JavaScript Text api-key" } ``` ## search-destination · Mapmyindia Maps SDK for React Native beta - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-map-react-native-beta` - Canonical: https://developer.mappls.com/reference/mapmyindia-map-react-native-beta ```json { "id": "sdk-guide:mapmyindia-map-react-native-beta", "kind": "SDK & guide", "title": "Mapmyindia Maps SDK for React Native beta", "description": "MapmyIndia Map library for React Native - Beta release Hybrid SDK", "href": "/reference/mapmyindia-map-react-native-beta", "eyebrow": "Guide · deprecated", "keywords": "mapmyindia-map-react-native-beta maps search-places routes-navigation gis-analytics capture-feedback identity-platform React Native oauth2 api-key licensed-entitlement" } ``` ## search-destination · MapmyIndia Vector Map Android SDK - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-maps-vectorsdk-android` - Canonical: https://developer.mappls.com/sdks/mapmyindia-maps-vectorsdk-android ```json { "id": "sdk-guide:mapmyindia-maps-vectorsdk-android", "kind": "SDK & guide", "title": "MapmyIndia Vector Map Android SDK", "description": "MapmyIndia Vector Maps SDK for Native Android Development with REST API Kit", "href": "/sdks/mapmyindia-maps-vectorsdk-android", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-maps-vectorSDK-android maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback Android api-key" } ``` ## search-destination · Mapmyindia Maps VectorSDK IOS - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-maps-vectorsdk-ios` - Canonical: https://developer.mappls.com/sdks/mapmyindia-maps-vectorsdk-ios ```json { "id": "sdk-guide:mapmyindia-maps-vectorsdk-ios", "kind": "SDK & guide", "title": "Mapmyindia Maps VectorSDK IOS", "description": "MapmyIndia Vector Maps SDK for Native iOS Development with REST API Kit", "href": "/sdks/mapmyindia-maps-vectorsdk-ios", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-maps-vectorSDK-iOS maps search-places routes-navigation widgets-deep-links capture-feedback identity-platform iOS api-key" } ``` ## search-destination · Mappls mGIS APIs - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-mgis-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-mgis-apis ```json { "id": "sdk-guide:mapmyindia-mgis-apis", "kind": "SDK & guide", "title": "Mappls mGIS APIs", "description": "Using these APIs developers can fully leverage and embed the power of GeoSpatial Analytics, GIS and location intelligence and AI. These APIs allow a developer to integrate into their own application the power and full set of functionalities of the mGIS product and platform.", "href": "/reference/mapmyindia-mgis-apis", "eyebrow": "REST API · legacy", "keywords": "mapmyindia-mgis-apis maps search-places routes-navigation gis-analytics ai-vision capture-feedback REST Text" } ``` ## search-destination · Mapmyindia MGIS Libraries - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-mgis-libraries` - Canonical: https://developer.mappls.com/reference/mapmyindia-mgis-libraries ```json { "id": "sdk-guide:mapmyindia-mgis-libraries", "kind": "SDK & guide", "title": "Mapmyindia MGIS Libraries", "description": "A Mappls guide for maps, gis analytics, widgets deep links, capture feedback.", "href": "/reference/mapmyindia-mgis-libraries", "eyebrow": "Guide · legacy", "keywords": "mapmyindia-mgis-libraries maps gis-analytics widgets-deep-links capture-feedback Unspecified HTML Text JavaScript" } ``` ## search-destination · Mapmyindia Nearby Covid Places - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-nearby-covid-places` - Canonical: https://developer.mappls.com/reference/mapmyindia-nearby-covid-places ```json { "id": "sdk-guide:mapmyindia-nearby-covid-places", "kind": "SDK & guide", "title": "Mapmyindia Nearby Covid Places", "description": "MapmyIndia's easy to integrate Nearby COVID Places Search Widget for Apps. Easily integrate the simple JS widget into your codebase and help your users discover Nearby COVID Vaccination Centres. Help your users discover government approved Vaccination Centres across India during this pandemic.", "href": "/reference/mapmyindia-nearby-covid-places", "eyebrow": "Widget · deprecated", "keywords": "mapmyindia-nearby-covid-places maps search-places widgets-deep-links capture-feedback Web HTML JavaScript CSS Text" } ``` ## search-destination · Mapmyindia Places N Directions Web SDK - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-places-n-directions-web-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-places-n-directions-web-sdk ```json { "id": "sdk-guide:mapmyindia-places-n-directions-web-sdk", "kind": "SDK & guide", "title": "Mapmyindia Places N Directions Web SDK", "description": "MapmyIndia Places and Directions Library for Web SDKs provided by MapmyIndia. This library is compatible with both our Web SDKs - Vector Maps & our legacy Raster Maps.", "href": "/sdks/mapmyindia-places-n-directions-web-sdk", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-places-n-directions-web-sdk other Web" } ``` ## search-destination · MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-purejs-sample-websdk-rest` - Canonical: https://developer.mappls.com/reference/mapmyindia-purejs-sample-websdk-rest ```json { "id": "sdk-guide:mapmyindia-purejs-sample-websdk-rest", "kind": "SDK & guide", "title": "MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web in Pure JS", "description": "PureJS Sample for MapmyIndia Interactive Maps JS SDK & MapmyIndia RESTful APIs for Web", "href": "/reference/mapmyindia-purejs-sample-websdk-rest", "eyebrow": "Sample · sample", "keywords": "mapmyindia-pureJS-sample-webSDK-REST maps search-places routes-navigation tracking-telematics identity-platform Web REST HTML JavaScript Text oauth2 api-key" } ``` ## search-destination · Mapmyindia REST API - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-rest-api` - Canonical: https://developer.mappls.com/reference/mapmyindia-rest-api ```json { "id": "sdk-guide:mapmyindia-rest-api", "kind": "SDK & guide", "title": "Mapmyindia REST API", "description": "Building Blocks to Add Powerful Location Intelligence & Mapping Functionality to your Apps", "href": "/reference/mapmyindia-rest-api", "eyebrow": "REST API · deprecated", "keywords": "mapmyindia-rest-api maps search-places routes-navigation gis-analytics capture-feedback REST api-key" } ``` ## search-destination · MapmyIndia REST APIs for Cordova/Ionic - Beta 1 - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-restapi-cordova-ionic-beta` - Canonical: https://developer.mappls.com/sdks/mapmyindia-restapi-cordova-ionic-beta ```json { "id": "sdk-guide:mapmyindia-restapi-cordova-ionic-beta", "kind": "SDK & guide", "title": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1", "description": "MapmyIndia REST APIs for Cordova/Ionic - Beta 1 Hybrid SDK", "href": "/sdks/mapmyindia-restapi-cordova-ionic-beta", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-restapi-cordova-ionic-beta search-places routes-navigation widgets-deep-links Cordova/Ionic JavaScript Text JSX oauth2 api-key" } ``` ## search-destination · Mapmyindia REST API SDK for React Native - beta - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-restapi-react-native-beta` - Canonical: https://developer.mappls.com/sdks/mapmyindia-restapi-react-native-beta ```json { "id": "sdk-guide:mapmyindia-restapi-react-native-beta", "kind": "SDK & guide", "title": "Mapmyindia REST API SDK for React Native - beta", "description": "A Mappls sdk for maps, search places, routes navigation, gis analytics, identity platform across React Native.", "href": "/sdks/mapmyindia-restapi-react-native-beta", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-restapi-react-native-beta maps search-places routes-navigation gis-analytics identity-platform React Native JavaScript Text oauth2 api-key licensed-entitlement" } ``` ## search-destination · Mapmyindia Vector Maps JS Web SDK - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-vector-maps-js-web-sdk` - Canonical: https://developer.mappls.com/sdks/mapmyindia-vector-maps-js-web-sdk ```json { "id": "sdk-guide:mapmyindia-vector-maps-js-web-sdk", "kind": "SDK & guide", "title": "Mapmyindia Vector Maps JS Web SDK", "description": "MapmyIndia's Latest Vector Maps Web SDK for rendering beautifully interactive, fluid maps that are powered by browser based WebGL.", "href": "/sdks/mapmyindia-vector-maps-js-web-sdk", "eyebrow": "SDK · deprecated", "keywords": "mapmyindia-vector-maps-js-web-SDK maps search-places routes-navigation gis-analytics widgets-deep-links Web HTML Text JavaScript api-key" } ``` ## search-destination · Mappls by MapmyIndia-Workmate-Apis - Identity: `search-destination:SDK & guide:sdk-guide:mapmyindia-workmate-apis` - Canonical: https://developer.mappls.com/reference/mapmyindia-workmate-apis ```json { "id": "sdk-guide:mapmyindia-workmate-apis", "kind": "SDK & guide", "title": "Mappls by MapmyIndia-Workmate-Apis", "description": "Powerful work force management APIs helping users get all the pertinent data related to their org such as live location of employees, client details and task details etc. Mappls Workmate easily integrates with existing cloud services via our APIs. These APIs help to make the ops efficient by providing location intellegence to your solutions.", "href": "/reference/mapmyindia-workmate-apis", "eyebrow": "REST API · legacy", "keywords": "mapmyindia-workmate-apis maps workforce identity-platform REST oauth2" } ``` ## search-destination · MAPPLS AI / ML APIs - Identity: `search-destination:SDK & guide:sdk-guide:mappls-ai-apis` - Canonical: https://developer.mappls.com/reference/mappls-ai-apis ```json { "id": "sdk-guide:mappls-ai-apis", "kind": "SDK & guide", "title": "MAPPLS AI / ML APIs", "description": "Revolutionize spatial analysis with our AI-ML API's, delivering unparalleled insights and predictive capabilities for optimized decision-making.", "href": "/reference/mappls-ai-apis", "eyebrow": "REST API · current", "keywords": "mappls-ai-apis maps search-places workforce gis-analytics ai-vision capture-feedback identity-platform REST AI/MCP licensed-entitlement" } ``` ## search-destination · Mappls Vector Map Android SDK JetPack Compose - Identity: `search-destination:SDK & guide:sdk-guide:mappls-android-compose-demo` - Canonical: https://developer.mappls.com/reference/mappls-android-compose-demo ```json { "id": "sdk-guide:mappls-android-compose-demo", "kind": "SDK & guide", "title": "Mappls Vector Map Android SDK JetPack Compose", "description": "A Mappls sample for maps, search places, routes navigation, gis analytics, widgets deep links, capture feedback across Android.", "href": "/reference/mappls-android-compose-demo", "eyebrow": "Sample · sample", "keywords": "mappls-android-compose-demo maps search-places routes-navigation gis-analytics widgets-deep-links capture-feedback Android Groovy Text XML Kotlin oauth2 api-key" } ``` ## search-destination · Mappls Android SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-android-sdk ```json { "id": "sdk-guide:mappls-android-sdk", "kind": "SDK & guide", "title": "Mappls Android SDK", "description": "A collection of Mappls's Map and others SDKs for Native android Development.", "href": "/sdks/mappls-android-sdk", "eyebrow": "SDK · current", "keywords": "mappls-android-sdk maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform Android static-key-2025 oauth2 api-key" } ``` ## search-destination · Mappls Annotation Extension for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-annotation-extension-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-annotation-extension-ios-distribution ```json { "id": "sdk-guide:mappls-annotation-extension-ios-distribution", "kind": "SDK & guide", "title": "Mappls Annotation Extension for iOS", "description": "Mappls Annotation Extension Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-annotation-extension-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-annotation-extension-ios-distribution maps search-places tracking-telematics capture-feedback identity-platform iOS Swift" } ``` ## search-destination · Mappls Annotation Extension for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-annotation-extension-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-annotation-extension-ios-distribution-base ```json { "id": "sdk-guide:mappls-annotation-extension-ios-distribution-base", "kind": "SDK & guide", "title": "Mappls Annotation Extension for iOS", "description": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, capture feedback, identity platform into an application.", "href": "/sdks/mappls-annotation-extension-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-annotation-extension-ios-distribution-base maps search-places tracking-telematics capture-feedback identity-platform iOS Swift" } ``` ## search-destination · [MapplsAPICore]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-api-core-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-api-core-ios-distribution ```json { "id": "sdk-guide:mappls-api-core-ios-distribution", "kind": "SDK & guide", "title": "[MapplsAPICore]()", "description": "Mappls API Core Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-api-core-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-api-core-ios-distribution routes-navigation tracking-telematics capture-feedback identity-platform iOS" } ``` ## search-destination · [MapplsAPIKit (REST API Kit for iOS)]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-api-kit-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-api-kit-ios-distribution ```json { "id": "sdk-guide:mappls-api-kit-ios-distribution", "kind": "SDK & guide", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "description": "Mappls API Kit Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-api-kit-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-api-kit-ios-distribution maps search-places routes-navigation tracking-telematics workforce gis-analytics capture-feedback identity-platform iOS Objective-C Swift Text oauth2 api-key" } ``` ## search-destination · [MapplsAPIKit (REST API Kit for iOS)]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-api-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-api-kit-ios-distribution-base ```json { "id": "sdk-guide:mappls-api-kit-ios-distribution-base", "kind": "SDK & guide", "title": "[MapplsAPIKit (REST API Kit for iOS)]()", "description": "Mappls API Kit Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-api-kit-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-api-kit-ios-distribution-base maps search-places routes-navigation tracking-telematics workforce capture-feedback identity-platform iOS Objective-C Swift Text oauth2 api-key" } ``` ## search-destination · Mappls App Widgets - Identity: `search-destination:SDK & guide:sdk-guide:mappls-app-widgets` - Canonical: https://developer.mappls.com/reference/mappls-app-widgets ```json { "id": "sdk-guide:mappls-app-widgets", "kind": "SDK & guide", "title": "Mappls App Widgets", "description": "Using Mappls App Widgets, you can embed latest features of Mappls app in a universal, cross-platform mechanism and perform visualization of a place, get immersive 3D metaverse visuals, and display Realviews - panoramic images. You don't need a Mappls API credential to use most of these Mappls App widgets.", "href": "/reference/mappls-app-widgets", "eyebrow": "Deep link · current", "keywords": "mappls-app-widgets search-places widgets-deep-links Widgets/Deep links" } ``` ## search-destination · MapplsCamera SDK for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-camera-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-camera-ios-distribution ```json { "id": "sdk-guide:mappls-camera-ios-distribution", "kind": "SDK & guide", "title": "MapplsCamera SDK for iOS", "description": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, offline automotive, capture feedback, identity platform into an application.", "href": "/sdks/mappls-camera-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-camera-ios-distribution maps search-places tracking-telematics offline-automotive capture-feedback identity-platform iOS Swift api-key signed-request" } ``` ## search-destination · Mappls Camera SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-camera-sdk-android` - Canonical: https://developer.mappls.com/sdks/mappls-camera-sdk-android ```json { "id": "sdk-guide:mappls-camera-sdk-android", "kind": "SDK & guide", "title": "Mappls Camera SDK", "description": "A Mappls sdk for maps, search places, tracking telematics, workforce, widgets deep links, offline automotive, capture feedback across Android.", "href": "/sdks/mappls-camera-sdk-android", "eyebrow": "SDK · current", "keywords": "mappls-camera-sdk-android maps search-places tracking-telematics workforce widgets-deep-links offline-automotive capture-feedback Android Kotlin Groovy api-key" } ``` ## search-destination · MapplsCamera SDK for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-camera-sdk-ios` - Canonical: https://developer.mappls.com/sdks/mappls-camera-sdk-ios ```json { "id": "sdk-guide:mappls-camera-sdk-ios", "kind": "SDK & guide", "title": "MapplsCamera SDK for iOS", "description": "A Mappls sdk for maps, search places, tracking telematics, offline automotive, capture feedback, identity platform across iOS.", "href": "/sdks/mappls-camera-sdk-ios", "eyebrow": "SDK · current", "keywords": "mappls-camera-sdk-ios maps search-places tracking-telematics offline-automotive capture-feedback identity-platform iOS Swift api-key signed-request" } ``` ## search-destination · MapplsDirectionUI for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-direction-ui-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-direction-ui-ios-distribution ```json { "id": "sdk-guide:mappls-direction-ui-ios-distribution", "kind": "SDK & guide", "title": "MapplsDirectionUI for iOS", "description": "Mappls Direction UI Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-direction-ui-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-direction-ui-ios-distribution maps search-places routes-navigation tracking-telematics capture-feedback identity-platform iOS Swift Objective-C Text" } ``` ## search-destination · MapplsDirectionUI for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-direction-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-direction-ui-ios-distribution-base ```json { "id": "sdk-guide:mappls-direction-ui-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsDirectionUI for iOS", "description": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, capture feedback, identity platform into an application.", "href": "/sdks/mappls-direction-ui-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-direction-ui-ios-distribution-base maps search-places routes-navigation tracking-telematics capture-feedback identity-platform iOS Swift Objective-C Text" } ``` ## search-destination · MapplsDrivingRangePlugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-drivingrange-plugin-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-drivingrange-plugin-ios-distribution ```json { "id": "sdk-guide:mappls-drivingrange-plugin-ios-distribution", "kind": "SDK & guide", "title": "MapplsDrivingRangePlugin for iOS", "description": "Mappls Driving Range Plugin Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-drivingrange-plugin-ios-distribution maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsDrivingRangePlugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-drivingrange-plugin-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-drivingrange-plugin-ios-distribution-base ```json { "id": "sdk-guide:mappls-drivingrange-plugin-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsDrivingRangePlugin for iOS", "description": "A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-drivingrange-plugin-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-drivingrange-plugin-ios-distribution-base maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsFeedbackKit for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-feedback-kit-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-kit-ios-distribution ```json { "id": "sdk-guide:mappls-feedback-kit-ios-distribution", "kind": "SDK & guide", "title": "MapplsFeedbackKit for iOS", "description": "Mappls Feedback Kit Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-feedback-kit-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-feedback-kit-ios-distribution search-places tracking-telematics widgets-deep-links offline-automotive capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsFeedbackKit for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-feedback-kit-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-kit-ios-distribution-base ```json { "id": "sdk-guide:mappls-feedback-kit-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsFeedbackKit for iOS", "description": "A versioned iOS distribution package used to integrate search places, tracking telematics, widgets deep links, offline automotive, capture feedback, identity platform into an application.", "href": "/sdks/mappls-feedback-kit-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-feedback-kit-ios-distribution-base search-places tracking-telematics widgets-deep-links offline-automotive capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsFeedbackUIKit for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-feedback-uikit-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-uikit-ios-distribution ```json { "id": "sdk-guide:mappls-feedback-uikit-ios-distribution", "kind": "SDK & guide", "title": "MapplsFeedbackUIKit for iOS", "description": "Mappls Feedback UI Kit Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-feedback-uikit-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-feedback-uikit-ios-distribution maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsFeedbackUIKit for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-feedback-uikit-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-feedback-uikit-ios-distribution-base ```json { "id": "sdk-guide:mappls-feedback-uikit-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsFeedbackUIKit for iOS", "description": "A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-feedback-uikit-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-feedback-uikit-ios-distribution-base maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · Mappls Flutter SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-flutter-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-flutter-sdk ```json { "id": "sdk-guide:mappls-flutter-sdk", "kind": "SDK & guide", "title": "Mappls Flutter SDK", "description": "This SDK is wrapper for Flutter on Native Map SDK to support on Android and iOS.", "href": "/sdks/mappls-flutter-sdk", "eyebrow": "SDK · current", "keywords": "mappls-flutter-sdk maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform Flutter static-key-2025 oauth2 api-key" } ``` ## search-destination · MapplsGeoanalytics Plugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-geoanalytics-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-geoanalytics-ios-distribution ```json { "id": "sdk-guide:mappls-geoanalytics-ios-distribution", "kind": "SDK & guide", "title": "MapplsGeoanalytics Plugin for iOS", "description": "Mappls Geoanalytics Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-geoanalytics-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-geoanalytics-ios-distribution maps search-places tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsGeoanalytics Plugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-geoanalytics-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-geoanalytics-ios-distribution-base ```json { "id": "sdk-guide:mappls-geoanalytics-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsGeoanalytics Plugin for iOS", "description": "Mappls Geoanalytics Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-geoanalytics-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-geoanalytics-ios-distribution-base maps search-places tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsGeofenceUI Plugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-geofence-ui-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-geofence-ui-ios-distribution ```json { "id": "sdk-guide:mappls-geofence-ui-ios-distribution", "kind": "SDK & guide", "title": "MapplsGeofenceUI Plugin for iOS", "description": "Mappls Geofence UI Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-geofence-ui-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-geofence-ui-ios-distribution maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsGeofenceUI Plugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-geofence-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-geofence-ui-ios-distribution-base ```json { "id": "sdk-guide:mappls-geofence-ui-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsGeofenceUI Plugin for iOS", "description": "A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-geofence-ui-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-geofence-ui-ios-distribution-base maps routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · Mappls Insight Embeddable Visualizations - Identity: `search-destination:SDK & guide:sdk-guide:mappls-insight-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-insight-sdk ```json { "id": "sdk-guide:mappls-insight-sdk", "kind": "SDK & guide", "title": "Mappls Insight Embeddable Visualizations", "description": "Mappls advanced analytics engine: Insight transforms raw data into impactful visualizations and interactive dashboards, easily shared and embedded.", "href": "/sdks/mappls-insight-sdk", "eyebrow": "SDK · current", "keywords": "mappls-insight-sdk gis-analytics offline-automotive capture-feedback identity-platform Web HTML oauth2" } ``` ## search-destination · Mappls Intouch Android SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-intouch-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-android-sdk ```json { "id": "sdk-guide:mappls-intouch-android-sdk", "kind": "SDK & guide", "title": "Mappls Intouch Android SDK", "description": "A Mappls sdk for tracking telematics, workforce, gis analytics, widgets deep links, capture feedback across Android.", "href": "/sdks/mappls-intouch-android-sdk", "eyebrow": "SDK · current", "keywords": "mappls-intouch-android-sdk tracking-telematics workforce gis-analytics widgets-deep-links capture-feedback Android oauth2 api-key" } ``` ## search-destination · Mappls Intouch IOS Distribution - Identity: `search-destination:SDK & guide:sdk-guide:mappls-intouch-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-ios-distribution ```json { "id": "sdk-guide:mappls-intouch-ios-distribution", "kind": "SDK & guide", "title": "Mappls Intouch IOS Distribution", "description": "Mappls Intouch iOS Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-intouch-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-intouch-ios-distribution tracking-telematics iOS" } ``` ## search-destination · Mappls Intouch IOS Distribution Base - Identity: `search-destination:SDK & guide:sdk-guide:mappls-intouch-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-ios-distribution-base ```json { "id": "sdk-guide:mappls-intouch-ios-distribution-base", "kind": "SDK & guide", "title": "Mappls Intouch IOS Distribution Base", "description": "A versioned iOS distribution package used to integrate tracking telematics into an application.", "href": "/sdks/mappls-intouch-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-intouch-ios-distribution-base tracking-telematics iOS" } ``` ## search-destination · [Mappls Intouch SDK]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-intouch-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-intouch-ios-sdk ```json { "id": "sdk-guide:mappls-intouch-ios-sdk", "kind": "SDK & guide", "title": "[Mappls Intouch SDK]()", "description": "A Mappls sdk for tracking telematics, workforce, gis analytics, capture feedback across iOS.", "href": "/sdks/mappls-intouch-ios-sdk", "eyebrow": "SDK · current", "keywords": "mappls-intouch-ios-sdk tracking-telematics workforce gis-analytics capture-feedback iOS oauth2" } ``` ## search-destination · Mappls Intouch REST Apis - Identity: `search-destination:SDK & guide:sdk-guide:mappls-intouch-rest-apis` - Canonical: https://developer.mappls.com/reference/mappls-intouch-rest-apis ```json { "id": "sdk-guide:mappls-intouch-rest-apis", "kind": "SDK & guide", "title": "Mappls Intouch REST Apis", "description": "A Mappls rest api for routes navigation, tracking telematics, capture feedback, identity platform across REST.", "href": "/reference/mappls-intouch-rest-apis", "eyebrow": "REST API · current", "keywords": "mappls-intouch-rest-apis routes-navigation tracking-telematics capture-feedback identity-platform REST oauth2" } ``` ## search-destination · Mappls iOS SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-ios-sdk ```json { "id": "sdk-guide:mappls-ios-sdk", "kind": "SDK & guide", "title": "Mappls iOS SDK", "description": "A collection of Mappls's Map and others SDKs for Native iOS Development.", "href": "/sdks/mappls-ios-sdk", "eyebrow": "SDK · current", "keywords": "mappls-ios-sdk maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform iOS static-key-2025 oauth2" } ``` ## search-destination · Mappls LMS IOS Distribution - Identity: `search-destination:SDK & guide:sdk-guide:mappls-lms-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-lms-ios-distribution ```json { "id": "sdk-guide:mappls-lms-ios-distribution", "kind": "SDK & guide", "title": "Mappls LMS IOS Distribution", "description": "A versioned iOS distribution package used to integrate Mappls capabilities into an application.", "href": "/sdks/mappls-lms-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-lms-ios-distribution other iOS" } ``` ## search-destination · Mappls LMS IOS Distribution Base - Identity: `search-destination:SDK & guide:sdk-guide:mappls-lms-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-lms-ios-distribution-base ```json { "id": "sdk-guide:mappls-lms-ios-distribution-base", "kind": "SDK & guide", "title": "Mappls LMS IOS Distribution Base", "description": "A versioned iOS distribution package used to integrate Mappls capabilities into an application.", "href": "/sdks/mappls-lms-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-lms-ios-distribution-base other iOS" } ``` ## search-destination · Mappls Location Capture SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-location-capture-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-location-capture-android-sdk ```json { "id": "sdk-guide:mappls-location-capture-android-sdk", "kind": "SDK & guide", "title": "Mappls Location Capture SDK", "description": "A lightweight, on-demand location capture SDK for Android that enables applications to fetch a user’s current location efficiently with accuracy limits, timeout control, and minimal battery usage. The SDK supports single-shot and subscribed location fetching without continuous tracking.", "href": "/sdks/mappls-location-capture-android-sdk", "eyebrow": "SDK · current", "keywords": "mappls-location-capture-android-sdk search-places tracking-telematics workforce widgets-deep-links capture-feedback Android Kotlin Groovy Java" } ``` ## search-destination · Mappls Location Capture IOS SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-location-capture-ios-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-location-capture-ios-sdk ```json { "id": "sdk-guide:mappls-location-capture-ios-sdk", "kind": "SDK & guide", "title": "Mappls Location Capture IOS SDK", "description": "A Mappls sdk for capture feedback across iOS.", "href": "/sdks/mappls-location-capture-ios-sdk", "eyebrow": "SDK · current", "keywords": "mappls-location-capture-ios-sdk capture-feedback iOS" } ``` ## search-destination · Mappls Location Capture SDK (iOS) - Identity: `search-destination:SDK & guide:sdk-guide:mappls-location-capture-sdk-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-location-capture-sdk-ios-distribution ```json { "id": "sdk-guide:mappls-location-capture-sdk-ios-distribution", "kind": "SDK & guide", "title": "Mappls Location Capture SDK (iOS)", "description": "A versioned iOS distribution package used to integrate tracking telematics, workforce, capture feedback into an application.", "href": "/sdks/mappls-location-capture-sdk-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-location-capture-sdk-ios-distribution tracking-telematics workforce capture-feedback iOS XML Swift" } ``` ## search-destination · [Mappls Map SDK]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-map-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-map-ios-distribution ```json { "id": "sdk-guide:mappls-map-ios-distribution", "kind": "SDK & guide", "title": "[Mappls Map SDK]()", "description": "Mappls Map Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-map-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-map-ios-distribution maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Text Swift Objective-C oauth2 api-key" } ``` ## search-destination · [Mappls Map SDK]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-map-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-map-ios-distribution-base ```json { "id": "sdk-guide:mappls-map-ios-distribution-base", "kind": "SDK & guide", "title": "[Mappls Map SDK]()", "description": "Mappls Map Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-map-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-map-ios-distribution-base maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Text Swift Objective-C oauth2 api-key" } ``` ## search-destination · [Mappls Map SDK]() - Identity: `search-destination:SDK & guide:sdk-guide:mappls-map-move-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-map-move-ios-distribution-base ```json { "id": "sdk-guide:mappls-map-move-ios-distribution-base", "kind": "SDK & guide", "title": "[Mappls Map SDK]()", "description": "mappls-map-move-ios-distribution-base", "href": "/sdks/mappls-map-move-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-map-move-ios-distribution-base maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Text Swift Objective-C oauth2 api-key" } ``` ## search-destination · [Custom Search Nearby Records](Custom-Search-Nearby-Records) - Identity: `search-destination:SDK & guide:sdk-guide:mappls-nearby-finder-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-finder-ios-distribution ```json { "id": "sdk-guide:mappls-nearby-finder-ios-distribution", "kind": "SDK & guide", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "description": "mappls-nearby-finder-ios-distribution", "href": "/sdks/mappls-nearby-finder-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-nearby-finder-ios-distribution maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Ruby Swift api-key" } ``` ## search-destination · [Custom Search Nearby Records](Custom-Search-Nearby-Records) - Identity: `search-destination:SDK & guide:sdk-guide:mappls-nearby-finder-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-finder-ios-distribution-base ```json { "id": "sdk-guide:mappls-nearby-finder-ios-distribution-base", "kind": "SDK & guide", "title": "[Custom Search Nearby Records](Custom-Search-Nearby-Records)", "description": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-nearby-finder-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-nearby-finder-ios-distribution-base maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Ruby Swift api-key" } ``` ## search-destination · Mappls Nearby Search Widget for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-nearby-ui-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-ui-ios-distribution ```json { "id": "sdk-guide:mappls-nearby-ui-ios-distribution", "kind": "SDK & guide", "title": "Mappls Nearby Search Widget for iOS", "description": "Mappls Nearby UI Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-nearby-ui-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-nearby-ui-ios-distribution maps search-places tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · Mappls Nearby Search Widget for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-nearby-ui-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-nearby-ui-ios-distribution-base ```json { "id": "sdk-guide:mappls-nearby-ui-ios-distribution-base", "kind": "SDK & guide", "title": "Mappls Nearby Search Widget for iOS", "description": "A versioned iOS distribution package used to integrate maps, search places, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-nearby-ui-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-nearby-ui-ios-distribution-base maps search-places tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsRasterCatalogue Plugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-raster-catalogue-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-raster-catalogue-ios-distribution ```json { "id": "sdk-guide:mappls-raster-catalogue-ios-distribution", "kind": "SDK & guide", "title": "MapplsRasterCatalogue Plugin for iOS", "description": "Mappls Raster Catalogue Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-raster-catalogue-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-raster-catalogue-ios-distribution maps tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsRasterCatalogue Plugin for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-raster-catalogue-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-raster-catalogue-ios-distribution-base ```json { "id": "sdk-guide:mappls-raster-catalogue-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsRasterCatalogue Plugin for iOS", "description": "A versioned iOS distribution package used to integrate maps, tracking telematics, gis analytics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-raster-catalogue-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-raster-catalogue-ios-distribution-base maps tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · Mappls Intouch React Native SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-react-native-intouch-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-react-native-intouch-sdk ```json { "id": "sdk-guide:mappls-react-native-intouch-sdk", "kind": "SDK & guide", "title": "Mappls Intouch React Native SDK", "description": "This SDK is wrapper for ReactNative on Native SDKs (IntouchCore, IntouchAPI) to support on Android and iOS.", "href": "/sdks/mappls-react-native-intouch-sdk", "eyebrow": "SDK · current", "keywords": "mappls-react-native-intouch-sdk tracking-telematics workforce capture-feedback React Native" } ``` ## search-destination · Mappls React Native SDK - Identity: `search-destination:SDK & guide:sdk-guide:mappls-react-native-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-react-native-sdk ```json { "id": "sdk-guide:mappls-react-native-sdk", "kind": "SDK & guide", "title": "Mappls React Native SDK", "description": "A Mappls sdk for maps, search places, routes navigation, tracking telematics, gis analytics, widgets deep links, capture feedback, identity platform across React Native.", "href": "/sdks/mappls-react-native-sdk", "eyebrow": "SDK · current", "keywords": "mappls-react-native-sdk maps search-places routes-navigation tracking-telematics gis-analytics widgets-deep-links capture-feedback identity-platform React Native static-key-2025 oauth2 api-key" } ``` ## search-destination · Mappls Map APIs (REST) ! - Identity: `search-destination:SDK & guide:sdk-guide:mappls-rest-apis` - Canonical: https://developer.mappls.com/reference/mappls-rest-apis ```json { "id": "sdk-guide:mappls-rest-apis", "kind": "SDK & guide", "title": "Mappls Map APIs (REST) !", "description": "Building Blocks to Add Powerful Location Intelligence & Mapping Functionality to your Apps", "href": "/reference/mappls-rest-apis", "eyebrow": "REST API · current", "keywords": "mappls-rest-apis maps search-places routes-navigation gis-analytics capture-feedback identity-platform REST static-key-2025 oauth2 api-key" } ``` ## search-destination · MapplsUIWidgets - UI Components SDK for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-ui-widget-ios-distribution` - Canonical: https://developer.mappls.com/sdks/mappls-ui-widget-ios-distribution ```json { "id": "sdk-guide:mappls-ui-widget-ios-distribution", "kind": "SDK & guide", "title": "MapplsUIWidgets - UI Components SDK for iOS", "description": "Mappls UI Widget Native for iOS distributed via the SPM (Swift Package Manager).", "href": "/sdks/mappls-ui-widget-ios-distribution", "eyebrow": "Distribution · distribution", "keywords": "mappls-ui-widget-ios-distribution maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · MapplsUIWidgets - UI Components SDK for iOS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-ui-widget-ios-distribution-base` - Canonical: https://developer.mappls.com/sdks/mappls-ui-widget-ios-distribution-base ```json { "id": "sdk-guide:mappls-ui-widget-ios-distribution-base", "kind": "SDK & guide", "title": "MapplsUIWidgets - UI Components SDK for iOS", "description": "A versioned iOS distribution package used to integrate maps, search places, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.", "href": "/sdks/mappls-ui-widget-ios-distribution-base", "eyebrow": "Distribution · distribution", "keywords": "mappls-ui-widget-ios-distribution-base maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform iOS Swift Text" } ``` ## search-destination · Sign up for Mappls - Identity: `search-destination:SDK & guide:sdk-guide:mappls-web-maps` - Canonical: https://developer.mappls.com/reference/mappls-web-maps ```json { "id": "sdk-guide:mappls-web-maps", "kind": "SDK & guide", "title": "Sign up for Mappls", "description": "A Mappls guide for maps, search places, routes navigation, gis analytics, widgets deep links, capture feedback, identity platform across Web.", "href": "/reference/mappls-web-maps", "eyebrow": "Guide · current", "keywords": "mappls-web-maps maps search-places routes-navigation gis-analytics widgets-deep-links capture-feedback identity-platform Web JavaScript licensed-entitlement" } ``` ## search-destination · Mappls Web Maps JS - Identity: `search-destination:SDK & guide:sdk-guide:mappls-web-maps-js` - Canonical: https://developer.mappls.com/reference/mappls-web-maps-js ```json { "id": "sdk-guide:mappls-web-maps-js", "kind": "SDK & guide", "title": "Mappls Web Maps JS", "description": "Mappls's Latest Vector Maps Web SDK for rendering beautifully interactive, fluid maps that are powered by browser based WebGL.", "href": "/reference/mappls-web-maps-js", "eyebrow": "Guide · current", "keywords": "mappls-web-maps-js maps search-places routes-navigation gis-analytics widgets-deep-links capture-feedback identity-platform Web HTML Text JavaScript static-key-2025 oauth2 api-key" } ``` ## search-destination · Mappls Web Plugins - Identity: `search-destination:SDK & guide:sdk-guide:mappls-web-plugins` - Canonical: https://developer.mappls.com/reference/mappls-web-plugins ```json { "id": "sdk-guide:mappls-web-plugins", "kind": "SDK & guide", "title": "Mappls Web Plugins", "description": "Web plugins provided by Mappls. This library is compatible with both our Web SDKs - Vector Maps & our legacy Raster Maps.", "href": "/reference/mappls-web-plugins", "eyebrow": "Widget · current", "keywords": "mappls-web-plugins maps search-places routes-navigation tracking-telematics widgets-deep-links capture-feedback identity-platform Web Widgets/Deep links static-key-2025 oauth2 api-key" } ``` ## search-destination · Workmate SDK - Android - Identity: `search-destination:SDK & guide:sdk-guide:mappls-workmate-android-sdk` - Canonical: https://developer.mappls.com/sdks/mappls-workmate-android-sdk ```json { "id": "sdk-guide:mappls-workmate-android-sdk", "kind": "SDK & guide", "title": "Workmate SDK - Android", "description": "Native Android SDK for our Workforce Management & Automation Solution - Workmate", "href": "/sdks/mappls-workmate-android-sdk", "eyebrow": "SDK · current", "keywords": "mappls-workmate-android-sdk tracking-telematics workforce identity-platform Android" } ``` ## search-destination · Skydnn AI APIs - Identity: `search-destination:SDK & guide:sdk-guide:skydnn-aiapi-docs` - Canonical: https://developer.mappls.com/reference/skydnn-aiapi-docs ```json { "id": "sdk-guide:skydnn-aiapi-docs", "kind": "SDK & guide", "title": "Skydnn AI APIs", "description": "A Mappls rest api for maps, gis analytics, ai vision, capture feedback across REST, AI/MCP.", "href": "/reference/skydnn-aiapi-docs", "eyebrow": "REST API · current", "keywords": "skydnn-aiapi-docs maps gis-analytics ai-vision capture-feedback REST AI/MCP" } ``` ## search-destination · V1.2.0 Logs - Identity: `search-destination:SDK & guide:sdk-guide:v1-2-0-logs` - Canonical: https://developer.mappls.com/reference/v1-2-0-logs ```json { "id": "sdk-guide:v1-2-0-logs", "kind": "SDK & guide", "title": "V1.2.0 Logs", "description": "Retail and Logistics Logs for 1.2.0", "href": "/reference/v1-2-0-logs", "eyebrow": "Sample · current", "keywords": "v1.2.0-logs other Unspecified" } ``` ## search-destination · Core REST: MapmyIndia generation to Mappls contracts - Identity: `search-destination:Migration:migration:core-rest-generation` - Canonical: https://developer.mappls.com/migrate/core-rest-generation ```json { "id": "migration:core-rest-generation", "kind": "Migration", "title": "Core REST: MapmyIndia generation to Mappls contracts", "description": "Move trusted-server integrations across host, path, authentication, schema, and quota generations with contract evidence instead of string replacement.", "href": "/migrate/core-rest-generation", "eyebrow": "REST · high risk · direct-lineage", "keywords": "Maps, search, routing, and geospatial APIs hybrid mapmyindia-api-addendums mapmyindia-rest-api mappls-rest-apis Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · Web maps and plugins: legacy scripts to a governed browser boundary - Identity: `search-destination:Migration:migration:web-maps-and-plugins` - Canonical: https://developer.mappls.com/migrate/web-maps-and-plugins ```json { "id": "migration:web-maps-and-plugins", "kind": "Migration", "title": "Web maps and plugins: legacy scripts to a governed browser boundary", "description": "Replace global-script assumptions with explicit origin restrictions, lifecycle ownership, typed adapters, accessible fallbacks, and measured rendering parity.", "href": "/migrate/web-maps-and-plugins", "eyebrow": "Web · high risk · adjacent-evidence", "keywords": "Maps, places, directions, analytics, telematics, and widgets hybrid mapmyindia-geoanalytics-api-web mapmyindia-interactive-map-js-api mapmyindia-intouch-web-plugins mapmyindia-nearby-covid-places mapmyindia-places-n-directions-web-sdk mapmyindia-vector-maps-js-web-sdk mappls-web-maps mappls-web-maps-js mappls-web-plugins Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Rendering parity covers camera, bounds, projection, markers, layers, controls, gestures, accessibility, printing, and high-density datasets. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · InTouch Android SDK lineage - Identity: `search-destination:Migration:migration:intouch-android` - Canonical: https://developer.mappls.com/migrate/intouch-android ```json { "id": "migration:intouch-android", "kind": "Migration", "title": "InTouch Android SDK lineage", "description": "Migrate tracking journeys as consent-aware state machines, preserving session identity, offline queues, background policy, and event ordering across SDK lines.", "href": "/migrate/intouch-android", "eyebrow": "Android · critical risk · direct-lineage", "keywords": "Tracking, telematics, events, geofences, and workforce stateful mapmyindia-intouch-android-sdk mappls-intouch-android-sdk Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Consent, notification, background-location, reboot, reinstall, offline buffering, clock skew, and logout behavior are journey-tested. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · InTouch React Native bridge lineage - Identity: `search-destination:Migration:migration:intouch-react-native` - Canonical: https://developer.mappls.com/migrate/intouch-react-native ```json { "id": "migration:intouch-react-native", "kind": "Migration", "title": "InTouch React Native bridge lineage", "description": "Align JavaScript, wrapper, and both native dependency graphs while keeping tracking identity and recovery above the bridge.", "href": "/migrate/intouch-react-native", "eyebrow": "React Native · critical risk · direct-lineage", "keywords": "Cross-platform tracking and workforce stateful mapmyindia-intouch-react-native-sdk mappls-react-native-intouch-sdk Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Android and iOS are accepted separately; success on one platform never stands in for the other. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · InTouch iOS SDK lineage - Identity: `search-destination:Migration:migration:intouch-ios` - Canonical: https://developer.mappls.com/migrate/intouch-ios ```json { "id": "migration:intouch-ios", "kind": "Migration", "title": "InTouch iOS SDK lineage", "description": "Move the explicitly deprecated MapmyIndia iOS tracking line to a release-qualified Mappls SDK while preserving durable session identity, consent, background execution, event order, and unknown-outcome recovery.", "href": "/migrate/intouch-ios", "eyebrow": "iOS · critical risk · direct-lineage", "keywords": "Tracking, telematics, consent, events, and geofences stateful mapmyindia-intouch-ios-sdk mappls-intouch-ios-sdk Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Consent, precise/reduced location, background modes, scenes, suspension, force quit, reboot, offline buffering, clock skew, logout, and data retirement are journey-tested. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · InTouch REST contract generation - Identity: `search-destination:Migration:migration:intouch-rest-generation` - Canonical: https://developer.mappls.com/migrate/intouch-rest-generation ```json { "id": "migration:intouch-rest-generation", "kind": "Migration", "title": "InTouch REST contract generation", "description": "Re-contract a stateful telematics integration without confusing a newer repository name with a confirmed endpoint or write-compatible product generation.", "href": "/migrate/intouch-rest-generation", "eyebrow": "REST · critical risk · selection-required", "keywords": "Assets, trips, events, geofences, and telematics stateful mapmyindia-intouch-rest-apis mappls-intouch-rest-apis Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Every aggregate has a transition table, idempotency identity, event-order rule, reconciliation query, retention policy, and retirement path. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · Cordova and Ionic: stabilize, then migrate by journey - Identity: `search-destination:Migration:migration:cordova-ionic-exit` - Canonical: https://developer.mappls.com/migrate/cordova-ionic-exit ```json { "id": "migration:cordova-ionic-exit", "kind": "Migration", "title": "Cordova and Ionic: stabilize, then migrate by journey", "description": "Turn an aging hybrid integration into replaceable application capabilities, then move complete journeys to a confirmed web, native, or cross-platform target.", "href": "/migrate/cordova-ionic-exit", "eyebrow": "Cordova · critical risk · selection-required", "keywords": "Hybrid maps, search, routing, and widgets hybrid mapmyindia-map-cordova-ionic-beta mapmyindia-restapi-cordova-ionic-beta mappls-react-native-sdk mappls-flutter-sdk mappls-rest-apis Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Deep links, authentication return paths, analytics identity, local storage, accessibility, navigation, and app-update behavior survive mixed old/new screens. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · React Native maps and REST wrappers - Identity: `search-destination:Migration:migration:react-native-maps` - Canonical: https://developer.mappls.com/migrate/react-native-maps ```json { "id": "migration:react-native-maps", "kind": "Migration", "title": "React Native maps and REST wrappers", "description": "Move beta-era bridges to a release-specific Mappls wrapper while testing the Android and iOS implementations as separate products.", "href": "/migrate/react-native-maps", "eyebrow": "React Native · high risk · direct-lineage", "keywords": "Maps, places, routes, and geospatial UI hybrid mapmyindia-map-react-native-beta mapmyindia-restapi-react-native-beta mappls-react-native-sdk Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Camera, projection, annotations, layers, gestures, events, deep links, accessibility, and teardown are verified independently on Android and iOS. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · Flutter map plugin lineage - Identity: `search-destination:Migration:migration:flutter-map-lineage` - Canonical: https://developer.mappls.com/migrate/flutter-map-lineage ```json { "id": "migration:flutter-map-lineage", "kind": "Migration", "title": "Flutter map plugin lineage", "description": "Replace the explicitly obsolete MapmyIndia Flutter plugin with a release-qualified Mappls line while treating Dart, Android, iOS, and native SDK versions as one reproducible compatibility graph.", "href": "/migrate/flutter-map-lineage", "eyebrow": "Flutter · high risk · direct-lineage", "keywords": "Maps, places, routes, platform views, and cross-platform lifecycle hybrid flutter-mapmyindia-gl mappls-flutter-sdk Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Dart/Flutter, Android/iOS SDKs, platform views, renderer, permissions, callbacks, restoration, release archives, accessibility, and performance are accepted separately per platform. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · Android vector map SDK lineage - Identity: `search-destination:Migration:migration:android-map-lineage` - Canonical: https://developer.mappls.com/migrate/android-map-lineage ```json { "id": "migration:android-map-lineage", "kind": "Migration", "title": "Android vector map SDK lineage", "description": "Move the explicitly deprecated MapmyIndia vector SDK line to an approved Mappls Android release through a narrow application map boundary and a clean device/release qualification matrix.", "href": "/migrate/android-map-lineage", "eyebrow": "Android · high risk · direct-lineage", "keywords": "Maps, camera, annotations, places, routes, and native lifecycle hybrid mapmyindia-maps-vectorsdk-android mappls-android-sdk Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Gradle/AGP/Kotlin/JDK, Android API/ABI, renderer, lifecycle, permissions, process recreation, accessibility, memory, battery, and release signing are qualified together. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · iOS map and API package lineage - Identity: `search-destination:Migration:migration:ios-map-packages` - Canonical: https://developer.mappls.com/migrate/ios-map-packages ```json { "id": "migration:ios-map-packages", "kind": "Migration", "title": "iOS map and API package lineage", "description": "Resolve modular Swift package/distribution lines as one compatible release set and keep Mappls symbols behind testable Swift protocols.", "href": "/migrate/ios-map-packages", "eyebrow": "iOS · high risk · direct-lineage", "keywords": "Maps, places, routing, UI extensions, and capture hybrid mapmyindia-maps-vectorsdk-ios mappls-ios-sdk mappls-map-ios-distribution mappls-api-kit-ios-distribution Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Swift/Xcode/deployment targets, package/binary checksums, privacy manifests, purpose strings, scenes, background modes, and extension packages are resolved together. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · mGIS and GeoAnalytics workspace generation - Identity: `search-destination:Migration:migration:mgis-workspace-generation` - Canonical: https://developer.mappls.com/migrate/mgis-workspace-generation ```json { "id": "migration:mgis-workspace-generation", "kind": "Migration", "title": "mGIS and GeoAnalytics workspace generation", "description": "Contain legacy mGIS API/library contracts behind a durable workspace seam, then select the entitled current dataset, web-method, analysis, and deployment surfaces without inventing replacement endpoints.", "href": "/migrate/mgis-workspace-generation", "eyebrow": "Web · critical risk · selection-required", "keywords": "Datasets, layers, styles, spatial analysis, visualization, publication, and export stateful mapmyindia-mgis-apis mapmyindia-mgis-libraries mappls-web-maps-js mappls-rest-apis Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Dataset ingestion, validation, immutable versioning, publication, style, analysis, export, share/revoke, lineage, privacy, residency, retention, backup, reconciliation, and retirement are tested end to end. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · Workmate and workforce journeys - Identity: `search-destination:Migration:migration:workmate-workforce` - Canonical: https://developer.mappls.com/migrate/workmate-workforce ```json { "id": "migration:workmate-workforce", "kind": "Migration", "title": "Workmate and workforce journeys", "description": "Reframe deprecated Workmate surfaces around durable workforce aggregates, then select the entitled Mappls modules that satisfy each complete journey.", "href": "/migrate/workmate-workforce", "eyebrow": "Android · critical risk · selection-required", "keywords": "Tasks, workers, attendance, proof, and operational tracking stateful mapmyindia-workmate-apis mappls-workmate-android-sdk mappls-intouch-android-sdk mappls-location-capture-android-sdk mappls-rest-apis Package, wrapper, native runtime, build tool, operating-system, and architecture versions are recorded together. Credentials are classified by client/server use, restricted to the exact environment, and never copied between generations by assumption. Normalized fixtures cover success, zero results, invalid input, authentication, quota, timeout, offline, cancellation, and malformed provider data. Telemetry distinguishes legacy and candidate generations without logging credentials, precise private locations, or raw provider bodies. Every state-changing operation has an idempotency, reconciliation, ownership, and ambiguous-outcome policy before cutover. Assignment, accept, travel, arrive, proof, exception, complete, cancel, sync, supervisor correction, offboarding, and audit retention are tested end to end. The candidate and exact package/endpoint versions are approved by the owning Mappls product team for the target account and region. Journey-level contract tests pass on every supported device, browser, architecture, and release build—not only a debug simulator. Security, privacy, accessibility, performance, quota, observability, and support owners accept measured differences. A bounded cohort completes the agreed observation window without an unresolved severity-one or severity-two regression." } ``` ## search-destination · Put your first Mappls map on the web - Identity: `search-destination:Tutorial:tutorial:first-web-map` - Canonical: https://developer.mappls.com/tutorials/first-web-map ```json { "id": "tutorial:first-web-map", "kind": "Tutorial", "title": "Put your first Mappls map on the web", "description": "Create a key, restrict it to localhost, load Web Maps JS, and add a marker.", "href": "/tutorials/first-web-map", "eyebrow": "Beginner · 10 min", "keywords": "A responsive map with a styled point of interest. Web maps invalid or origin-restricted key SDK load timeout zero-size or detached container" } ``` ## search-destination · Build address autocomplete that users trust - Identity: `search-destination:Tutorial:tutorial:address-autocomplete` - Canonical: https://developer.mappls.com/tutorials/address-autocomplete ```json { "id": "tutorial:address-autocomplete", "kind": "Tutorial", "title": "Build address autocomplete that users trust", "description": "Debounce input, apply bias, handle keyboard selection, and retain the Mappls Pin.", "href": "/tutorials/address-autocomplete", "eyebrow": "Beginner · 20 min", "keywords": "An accessible, resilient delivery-address field. Web REST search-places out-of-order response no suggestions or ambiguous address quota or authentication denial" } ``` ## search-destination · Add Mappls to an Android app - Identity: `search-destination:Tutorial:tutorial:android-map` - Canonical: https://developer.mappls.com/tutorials/android-map ```json { "id": "tutorial:android-map", "kind": "Tutorial", "title": "Add Mappls to an Android app", "description": "Configure the repository and BoM, initialize the SDK, and manage MapView lifecycle.", "href": "/tutorials/android-map", "eyebrow": "Beginner · 25 min", "keywords": "A native Kotlin map screen with lifecycle-safe setup. Android maps dependency/version mismatch permission revoked while active activity recreated after process death" } ``` ## search-destination · Add Mappls to an iOS app with Swift Package Manager - Identity: `search-destination:Tutorial:tutorial:ios-map` - Canonical: https://developer.mappls.com/tutorials/ios-map ```json { "id": "tutorial:ios-map", "kind": "Tutorial", "title": "Add Mappls to an iOS app with Swift Package Manager", "description": "Select distribution packages, configure credentials, and render the native map.", "href": "/tutorials/ios-map", "eyebrow": "Beginner · 25 min", "keywords": "A native Swift map screen. iOS maps package resolution conflict view recreated with duplicate delegates location authorization changes at runtime" } ``` ## search-destination · Build a route preview with alternatives - Identity: `search-destination:Tutorial:tutorial:route-preview` - Canonical: https://developer.mappls.com/tutorials/route-preview ```json { "id": "tutorial:route-preview", "kind": "Tutorial", "title": "Build a route preview with alternatives", "description": "Resolve endpoints, request alternatives, decode geometry, and explain toll/time trade-offs.", "href": "/tutorials/route-preview", "eyebrow": "Intermediate · 35 min", "keywords": "A production-pattern route comparison view. Web REST routes-navigation maps one endpoint is unresolved provider returns no route late response targets an obsolete itinerary" } ``` ## search-destination · Create a nearby discovery experience - Identity: `search-destination:Tutorial:tutorial:nearby-discovery` - Canonical: https://developer.mappls.com/tutorials/nearby-discovery ```json { "id": "tutorial:nearby-discovery", "kind": "Tutorial", "title": "Create a nearby discovery experience", "description": "Combine category search, viewport updates, result cards, and map selection.", "href": "/tutorials/nearby-discovery", "eyebrow": "Intermediate · 40 min", "keywords": "A map-and-list place explorer. Web search-places maps location unavailable provider results outside requested radius selected place disappears after filter change" } ``` ## search-destination · Track a delivery with a trustworthy ETA - Identity: `search-destination:Tutorial:tutorial:delivery-eta` - Canonical: https://developer.mappls.com/tutorials/delivery-eta ```json { "id": "tutorial:delivery-eta", "kind": "Tutorial", "title": "Track a delivery with a trustworthy ETA", "description": "Join asset telemetry, map matching, route progress, ETA refresh, and customer visibility.", "href": "/tutorials/delivery-eta", "eyebrow": "Advanced · 90 min", "keywords": "A stateful live-delivery journey with recovery and replay. REST Web intouch-telematics routes-navigation telemetry silence route deviation or closed road provider close succeeds after local timeout" } ``` ## search-destination · Automate a complete Workmate task lifecycle - Identity: `search-destination:Tutorial:tutorial:workmate-task-lifecycle` - Canonical: https://developer.mappls.com/tutorials/workmate-task-lifecycle ```json { "id": "tutorial:workmate-task-lifecycle", "kind": "Tutorial", "title": "Automate a complete Workmate task lifecycle", "description": "Provision workers, dispatch jobs, consume transitions, enforce proof, and reconcile closure.", "href": "/tutorials/workmate-task-lifecycle", "eyebrow": "Advanced · 2 hr", "keywords": "An idempotent field-service integration. REST Android workmate assignee rejects or becomes unavailable proof is incomplete or rejected provider timeout after accepting a command" } ``` ## search-destination · Build fleet geofence operations - Identity: `search-destination:Tutorial:tutorial:fleet-geofences` - Canonical: https://developer.mappls.com/tutorials/fleet-geofences ```json { "id": "tutorial:fleet-geofences", "kind": "Tutorial", "title": "Build fleet geofence operations", "description": "Create zones, process enter/exit events, suppress noise, and power an exception queue.", "href": "/tutorials/fleet-geofences", "eyebrow": "Advanced · 75 min", "keywords": "An operations-ready geofence monitor. REST Web intouch-telematics maps invalid or oversized geometry duplicate provider activity rule retirement fails after local request" } ``` ## search-destination · Build a reproducible site-selection model - Identity: `search-destination:Tutorial:tutorial:gis-site-selection` - Canonical: https://developer.mappls.com/tutorials/gis-site-selection ```json { "id": "tutorial:gis-site-selection", "kind": "Tutorial", "title": "Build a reproducible site-selection model", "description": "Publish layers, generate catchments, join signals, score candidates, and share results.", "href": "/tutorials/gis-site-selection", "eyebrow": "Advanced · 2 hr", "keywords": "A governed retail expansion analysis. REST Web gis-analytics source schema or CRS drift processing fails after partial compute expired or revoked share is requested" } ``` ## search-destination · Design an interruption-safe offline map update - Identity: `search-destination:Tutorial:tutorial:offline-package-update` - Canonical: https://developer.mappls.com/tutorials/offline-package-update ```json { "id": "tutorial:offline-package-update", "kind": "Tutorial", "title": "Design an interruption-safe offline map update", "description": "Verify packages, stage data, check compatibility, switch atomically, and roll back.", "href": "/tutorials/offline-package-update", "eyebrow": "Advanced · 90 min", "keywords": "A resilient embedded update state machine. Automotive Linux offline-automotive insufficient storage signature or compatibility mismatch first boot fails after activation" } ``` ## search-destination · Give an AI agent grounded Mappls tools - Identity: `search-destination:Tutorial:tutorial:mappls-mcp-agent` - Canonical: https://developer.mappls.com/tutorials/mappls-mcp-agent ```json { "id": "tutorial:mappls-mcp-agent", "kind": "Tutorial", "title": "Give an AI agent grounded Mappls tools", "description": "Run the MCP server, scope credentials, call search and routing tools, and inspect provenance.", "href": "/tutorials/mappls-mcp-agent", "eyebrow": "Intermediate · 30 min", "keywords": "An agent that can reason about real places without inventing APIs. MCP ai-location search-places routes-navigation remote client is rejected by auth, URL, host, origin, size, or capacity controls authorization-server lifecycle or revocation is unavailable configured profile does not advertise a planned tool approval expires before execution provider result lacks provenance or conflicts with prior context" } ``` ## search-destination · Coordinate a complete Mappls A2A journey - Identity: `search-destination:Tutorial:tutorial:a2a-solution-coordination` - Canonical: https://developer.mappls.com/tutorials/a2a-solution-coordination ```json { "id": "tutorial:a2a-solution-coordination", "kind": "Tutorial", "title": "Coordinate a complete Mappls A2A journey", "description": "Validate fixture or OAuth A2A identity, select offline or purpose-bound live-read authority, delegate one exact structured task, reconcile a lost response, bind the server task identity, and review an immutable artifact.", "href": "/tutorials/a2a-solution-coordination", "eyebrow": "Advanced · 90 min", "keywords": "A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate. MCP ai-location search-places routes-navigation intouch-telematics Agent Card changes profile, authority, protocol, skill, size, OAuth metadata, or scope authorization is missing, expired, revoked, wrong-audience, or tenant-mismatched purpose or data class is incompatible with the selected live skill transport outcome is ambiguous and context resolves to zero or multiple tasks task or context identity drifts artifact is nonterminal, unstructured, oversized, or elevates provider calls or writes review names a stale digest or aggregate version exact idempotency key is replayed with changed intent" } ``` ## search-destination · Provision and validate a remote MCP client - Identity: `search-destination:Tutorial:tutorial:mcp-client-identity` - Canonical: https://developer.mappls.com/tutorials/mcp-client-identity ```json { "id": "tutorial:mcp-client-identity", "kind": "Tutorial", "title": "Provision and validate a remote MCP client", "description": "Approve exact authority, deliver a signed pre-registration event, inspect discovery, validate PKCE and resource binding, then revoke without transporting a token or secret.", "href": "/tutorials/mcp-client-identity", "eyebrow": "Advanced · 55 min", "keywords": "A replay-safe client identity journey with durable registration, request checks, revocation, and audit evidence. MCP ai-location signature is wrong, stale, replayed with changed bytes, or too large authorization-server mutation succeeds but the response is lost callback, resource audience, PKCE method, or requested scope drifts revocation targets an unknown or already retired external identity" } ``` ## search-destination · Consume Mappls events exactly once in effect - Identity: `search-destination:Tutorial:tutorial:webhook-reliability` - Canonical: https://developer.mappls.com/tutorials/webhook-reliability ```json { "id": "tutorial:webhook-reliability", "kind": "Tutorial", "title": "Consume Mappls events exactly once in effect", "description": "Verify signatures, deduplicate deliveries, order per aggregate, retry, and replay safely.", "href": "/tutorials/webhook-reliability", "eyebrow": "Advanced · 55 min", "keywords": "A production webhook ingestion pipeline. REST intouch-telematics workmate gis-analytics DNS changes to any non-public address receiver returns a redirect ownership challenge expires or is superseded signature is stale or invalid database commits but response is lost event arrives before its prerequisite" } ``` ## search-destination · Call Mappls safely from a trusted server - Identity: `search-destination:Tutorial:tutorial:oauth-server-integration` - Canonical: https://developer.mappls.com/tutorials/oauth-server-integration ```json { "id": "tutorial:oauth-server-integration", "kind": "Tutorial", "title": "Call Mappls safely from a trusted server", "description": "Exchange OAuth client credentials, keep tokens in bearer headers, call typed Search and Route operations, preserve provenance, and bound retry.", "href": "/tutorials/oauth-server-integration", "eyebrow": "Intermediate · 35 min", "keywords": "A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance. REST search-places routes-navigation intouch-telematics token endpoint denied or unavailable provider returns 429 or 5xx timeout occurs after a stateful provider commit" } ``` ## search-destination · Build a cross-platform React Native map - Identity: `search-destination:Tutorial:tutorial:react-native-map` - Canonical: https://developer.mappls.com/tutorials/react-native-map ```json { "id": "tutorial:react-native-map", "kind": "Tutorial", "title": "Build a cross-platform React Native map", "description": "Install the native wrapper, configure both platforms, add annotations, and handle cleanup.", "href": "/tutorials/react-native-map", "eyebrow": "Intermediate · 45 min", "keywords": "One map experience across Android and iOS. React Native maps wrapper/native version skew bridge receives events after unmount one platform denies location permission" } ``` ## search-destination · Build a Flutter map and place picker - Identity: `search-destination:Tutorial:tutorial:flutter-map` - Canonical: https://developer.mappls.com/tutorials/flutter-map ```json { "id": "tutorial:flutter-map", "kind": "Tutorial", "title": "Build a Flutter map and place picker", "description": "Configure native keys, render the map, and return a validated place to your form.", "href": "/tutorials/flutter-map", "eyebrow": "Intermediate · 45 min", "keywords": "A reusable cross-platform location field. Flutter maps search-places plugin/native SDK mismatch late suggestion after widget disposal camera moved after a prior selection" } ``` ## search-destination · Create a zero-SDK location campaign - Identity: `search-destination:Tutorial:tutorial:deep-link-campaign` - Canonical: https://developer.mappls.com/tutorials/deep-link-campaign ```json { "id": "tutorial:deep-link-campaign", "kind": "Tutorial", "title": "Create a zero-SDK location campaign", "description": "Build safe place links, add fallback behavior, instrument hand-offs, and test every device.", "href": "/tutorials/deep-link-campaign", "eyebrow": "Beginner · 15 min", "keywords": "A campaign that opens a useful Mappls experience everywhere. Deep links app-widgets-deep-links app not installed link association misconfigured messaging client strips or rewrites parameters" } ``` ## search-destination · Build a server-side geocoding boundary - Identity: `search-destination:Tutorial:tutorial:rest-geocode-service` - Canonical: https://developer.mappls.com/tutorials/rest-geocode-service ```json { "id": "tutorial:rest-geocode-service", "kind": "Tutorial", "title": "Build a server-side geocoding boundary", "description": "Resolve addresses on a trusted server, retain provider identity, and return a narrow application contract.", "href": "/tutorials/rest-geocode-service", "eyebrow": "Beginner · 25 min", "keywords": "A credential-safe geocoding service with typed errors and provenance. REST search-places invalid address input no candidate or multiple candidates token, quota, or provider timeout" } ``` ## search-destination · Turn a device fix into a trustworthy check-in - Identity: `search-destination:Tutorial:tutorial:reverse-geocode-check-in` - Canonical: https://developer.mappls.com/tutorials/reverse-geocode-check-in ```json { "id": "tutorial:reverse-geocode-check-in", "kind": "Tutorial", "title": "Turn a device fix into a trustworthy check-in", "description": "Reverse geocode accuracy-bearing coordinates, preserve consent, and distinguish evidence from an address label.", "href": "/tutorials/reverse-geocode-check-in", "eyebrow": "Beginner · 30 min", "keywords": "A privacy-aware check-in that retains both raw evidence and human-readable context. REST search-places capture-feedback permission or consent absent stale or inaccurate fix reverse geocoder returns no address" } ``` ## search-destination · Generate static maps for receipts and notifications - Identity: `search-destination:Tutorial:tutorial:static-map-receipt` - Canonical: https://developer.mappls.com/tutorials/static-map-receipt ```json { "id": "tutorial:static-map-receipt", "kind": "Tutorial", "title": "Generate static maps for receipts and notifications", "description": "Render bounded server-side map imagery with safe markers, caching, attribution, and fallback text.", "href": "/tutorials/static-map-receipt", "eyebrow": "Beginner · 20 min", "keywords": "A deterministic map image pipeline for non-interactive surfaces. REST maps render service timeout unsupported or excessive geometry email proxy strips the image" } ``` ## search-destination · Embed a place picker widget - Identity: `search-destination:Tutorial:tutorial:web-widget-place-picker` - Canonical: https://developer.mappls.com/tutorials/web-widget-place-picker ```json { "id": "tutorial:web-widget-place-picker", "kind": "Tutorial", "title": "Embed a place picker widget", "description": "Mount a bounded widget, synchronize selection with your form, and preserve the selected Mappls Pin.", "href": "/tutorials/web-widget-place-picker", "eyebrow": "Beginner · 25 min", "keywords": "An accessible embedded place picker with explicit host-page ownership. Widgets Web app-widgets-deep-links search-places widget script or frame blocked message schema/version changes duplicate or late terminal callback host text edited after widget selection" } ``` ## search-destination · Hand off to navigation with a resilient deep link - Identity: `search-destination:Tutorial:tutorial:navigation-deep-link` - Canonical: https://developer.mappls.com/tutorials/navigation-deep-link ```json { "id": "tutorial:navigation-deep-link", "kind": "Tutorial", "title": "Hand off to navigation with a resilient deep link", "description": "Encode a known place, protect campaign parameters, and provide browser and store fallbacks.", "href": "/tutorials/navigation-deep-link", "eyebrow": "Beginner · 20 min", "keywords": "A tested app-to-navigation hand-off across installed and uninstalled states. Deep links app-widgets-deep-links routes-navigation app absent or association invalid unsupported travel profile device is offline at hand-off" } ``` ## search-destination · Ship a Mappls map in Cordova and Ionic - Identity: `search-destination:Tutorial:tutorial:cordova-map` - Canonical: https://developer.mappls.com/tutorials/cordova-map ```json { "id": "tutorial:cordova-map", "kind": "Tutorial", "title": "Ship a Mappls map in Cordova and Ionic", "description": "Separate web and native configuration, wait for device readiness, and clean up plugin state safely.", "href": "/tutorials/cordova-map", "eyebrow": "Intermediate · 50 min", "keywords": "A hybrid map screen with lifecycle-safe native bridge handling. Cordova maps search-places JavaScript calls before device readiness native view survives page teardown platform/plugin version mismatch" } ``` ## search-destination · Integrate Mappls into a Xamarin application - Identity: `search-destination:Tutorial:tutorial:xamarin-map` - Canonical: https://developer.mappls.com/tutorials/xamarin-map ```json { "id": "tutorial:xamarin-map", "kind": "Tutorial", "title": "Integrate Mappls into a Xamarin application", "description": "Configure platform projects, isolate credentials, bridge native lifecycle, and preserve location identity in shared code.", "href": "/tutorials/xamarin-map", "eyebrow": "Intermediate · 55 min", "keywords": "A shared-code location feature backed by correctly owned native map views. Xamarin maps search-places NuGet/native dependency conflict renderer recreated without disposal one platform returns a partial place result" } ``` ## search-destination · Rank responders with a distance matrix - Identity: `search-destination:Tutorial:tutorial:distance-matrix-dispatch` - Canonical: https://developer.mappls.com/tutorials/distance-matrix-dispatch ```json { "id": "tutorial:distance-matrix-dispatch", "kind": "Tutorial", "title": "Rank responders with a distance matrix", "description": "Batch eligible origins, interpret unreachable pairs, apply deterministic tie-breaks, and keep dispatch explainable.", "href": "/tutorials/distance-matrix-dispatch", "eyebrow": "Intermediate · 45 min", "keywords": "An explainable ETA-based dispatch shortlist rather than a straight-line guess. REST routes-navigation search-places candidate telemetry is stale matrix returns partial/unreachable pairs incident changes while ranking is in flight" } ``` ## search-destination · Build a traffic-aware commute assistant - Identity: `search-destination:Tutorial:tutorial:traffic-aware-commute` - Canonical: https://developer.mappls.com/tutorials/traffic-aware-commute ```json { "id": "tutorial:traffic-aware-commute", "kind": "Tutorial", "title": "Build a traffic-aware commute assistant", "description": "Compare departure choices, refresh bounded route alternatives, and explain when an ETA becomes stale.", "href": "/tutorials/traffic-aware-commute", "eyebrow": "Intermediate · 50 min", "keywords": "A route comparison experience that communicates freshness and uncertainty. Web REST routes-navigation maps traffic data becomes stale route changes during user selection provider returns a slower partial response" } ``` ## search-destination · Render a governed GeoJSON operations layer - Identity: `search-destination:Tutorial:tutorial:geojson-operations-layer` - Canonical: https://developer.mappls.com/tutorials/geojson-operations-layer ```json { "id": "tutorial:geojson-operations-layer", "kind": "Tutorial", "title": "Render a governed GeoJSON operations layer", "description": "Validate geometry, assign stable feature IDs, style deterministically, and synchronize map and table selection.", "href": "/tutorials/geojson-operations-layer", "eyebrow": "Intermediate · 55 min", "keywords": "An accessible map layer whose visual state is reproducible from source data. Web maps gis-analytics unsupported geometry or CRS duplicate/missing feature identity large collection exceeds render budget" } ``` ## search-destination · Operate a Mappls client on embedded Linux - Identity: `search-destination:Tutorial:tutorial:linux-map-client` - Canonical: https://developer.mappls.com/tutorials/linux-map-client ```json { "id": "tutorial:linux-map-client", "kind": "Tutorial", "title": "Operate a Mappls client on embedded Linux", "description": "Separate runtime and map-data compatibility, stage updates, survive power loss, and expose health signals.", "href": "/tutorials/linux-map-client", "eyebrow": "Advanced · 2 hr", "keywords": "An embedded map runtime with atomic data activation and rollback evidence. Linux Automotive offline-automotive maps GPU/runtime incompatibility disk pressure during staging power loss between switch and acknowledgement" } ``` ## search-destination · Reconcile a complete InTouch trip lifecycle - Identity: `search-destination:Tutorial:tutorial:intouch-trip-lifecycle` - Canonical: https://developer.mappls.com/tutorials/intouch-trip-lifecycle ```json { "id": "tutorial:intouch-trip-lifecycle", "kind": "Tutorial", "title": "Reconcile a complete InTouch trip lifecycle", "description": "Create provider identity, consume event-time telemetry, own exceptions, and close only after provider acknowledgement.", "href": "/tutorials/intouch-trip-lifecycle", "eyebrow": "Advanced · 2 hr", "keywords": "A restart-safe connected trip with replay, late evidence, and closure reconciliation. REST Web intouch-telematics routes-navigation provider accepts command but response is lost telemetry gap or route deviation closure requested with open exception" } ``` ## search-destination · Build proof review and rework for field jobs - Identity: `search-destination:Tutorial:tutorial:workmate-proof-review` - Canonical: https://developer.mappls.com/tutorials/workmate-proof-review ```json { "id": "tutorial:workmate-proof-review", "kind": "Tutorial", "title": "Build proof review and rework for field jobs", "description": "Capture purpose-bound evidence, route weak submissions to review, request rework, and preserve decision history.", "href": "/tutorials/workmate-proof-review", "eyebrow": "Advanced · 90 min", "keywords": "An auditable proof workflow that cannot silently overwrite rejected evidence. REST Android workmate capture-feedback offline duplicate submission media upload succeeds but command times out review policy changes during rework" } ``` ## search-destination · Qualify a Cordova location release - Identity: `search-destination:Tutorial:tutorial:cordova-release-hardening` - Canonical: https://developer.mappls.com/tutorials/cordova-release-hardening ```json { "id": "tutorial:cordova-release-hardening", "kind": "Tutorial", "title": "Qualify a Cordova location release", "description": "Pin bridge and native dependencies, prove lifecycle disposal, automate both release builds, and operate a browser fallback.", "href": "/tutorials/cordova-release-hardening", "eyebrow": "Advanced · 80 min", "keywords": "A versioned hybrid release with reproducible native builds, safe teardown, and rollback. Cordova maps search-places routes-navigation plugin and native SDK version drift WebView survives route teardown one store release rejects the configured entitlement" } ``` ## search-destination · Operate deep links across every hand-off - Identity: `search-destination:Tutorial:tutorial:deep-link-attribution-resilience` - Canonical: https://developer.mappls.com/tutorials/deep-link-attribution-resilience ```json { "id": "tutorial:deep-link-attribution-resilience", "kind": "Tutorial", "title": "Operate deep links across every hand-off", "description": "Govern destination identity, universal-link association, privacy-safe attribution, fallback, expiry, and campaign retirement.", "href": "/tutorials/deep-link-attribution-resilience", "eyebrow": "Advanced · 70 min", "keywords": "A measurable zero-SDK journey that never confuses a click with arrival. Deep links app-widgets-deep-links routes-navigation search-places association file is stale or unavailable messaging client strips parameters app opens but does not acknowledge the intended destination" } ``` ## search-destination · Production-harden a Flutter location feature - Identity: `search-destination:Tutorial:tutorial:flutter-production-lifecycle` - Canonical: https://developer.mappls.com/tutorials/flutter-production-lifecycle ```json { "id": "tutorial:flutter-production-lifecycle", "kind": "Tutorial", "title": "Production-harden a Flutter location feature", "description": "Lock Dart/native compatibility, control rebuilds and streams, test process recovery, and qualify Android and iOS independently.", "href": "/tutorials/flutter-production-lifecycle", "eyebrow": "Advanced · 90 min", "keywords": "A cross-platform feature with stable identity, bounded bridge traffic, and deterministic disposal. Flutter maps search-places routes-navigation capture-feedback plugin/native architecture mismatch late stream event after disposal one platform restores an obsolete controller generation" } ``` ## search-destination · Qualify an iOS Mappls release - Identity: `search-destination:Tutorial:tutorial:ios-sdk-production-readiness` - Canonical: https://developer.mappls.com/tutorials/ios-sdk-production-readiness ```json { "id": "tutorial:ios-sdk-production-readiness", "kind": "Tutorial", "title": "Qualify an iOS Mappls release", "description": "Resolve package authority, bind credentials and entitlements, own controller generations, test privacy and background behavior, and prove rollback.", "href": "/tutorials/ios-sdk-production-readiness", "eyebrow": "Advanced · 2 hr", "keywords": "A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries. iOS maps search-places routes-navigation intouch-telematics workmate capture-feedback app-widgets-deep-links offline-automotive ai-location package exists but owning product contract is unclear delegate callback arrives after replacement background permission or entitlement changes during an active journey" } ``` ## search-destination · Build restart-safe iOS direction and geofence handoffs - Identity: `search-destination:Tutorial:tutorial:ios-direction-geofence-handoffs` - Canonical: https://developer.mappls.com/tutorials/ios-direction-geofence-handoffs ```json { "id": "tutorial:ios-direction-geofence-handoffs", "kind": "Tutorial", "title": "Build restart-safe iOS direction and geofence handoffs", "description": "Own native editor generations, validate route and geometry candidates, provide an exact navigation-link fallback, separate target acknowledgement and application review, and recover safely after restart.", "href": "/tutorials/ios-direction-geofence-handoffs", "eyebrow": "Advanced · 95 min", "keywords": "Two tested, durable iOS handoff journeys with explicit provider and application evidence boundaries. iOS app-widgets-deep-links routes-navigation intouch-telematics native UI is unavailable and the app link is not installed a callback arrives from an old presentation or route revision the route index or intent differs from the active draft circle or polygon violates geometry policy navigation target times out after request no authoritative entitled geofence publication contract is selected" } ``` ## search-destination · Qualify React Native native parity - Identity: `search-destination:Tutorial:tutorial:react-native-native-parity` - Canonical: https://developer.mappls.com/tutorials/react-native-native-parity ```json { "id": "tutorial:react-native-native-parity", "kind": "Tutorial", "title": "Qualify React Native native parity", "description": "Freeze wrapper/native versions, normalize cross-platform results, constrain bridge traffic, recover process death, and release both native targets.", "href": "/tutorials/react-native-native-parity", "eyebrow": "Advanced · 100 min", "keywords": "One JavaScript contract backed by independently qualified Android and iOS behavior. React Native maps search-places routes-navigation intouch-telematics workmate capture-feedback wrapper compiles against only one native SDK line JavaScript reload leaves a native session active platform permission semantics produce different unhandled states" } ``` ## search-destination · Operate widgets as untrusted lifecycle surfaces - Identity: `search-destination:Tutorial:tutorial:widget-host-production` - Canonical: https://developer.mappls.com/tutorials/widget-host-production ```json { "id": "tutorial:widget-host-production", "kind": "Tutorial", "title": "Operate widgets as untrusted lifecycle surfaces", "description": "Validate origin and schema, separate candidate from commit, recover blocked embeds, preserve accessibility, and retire safely.", "href": "/tutorials/widget-host-production", "eyebrow": "Advanced · 85 min", "keywords": "A restart-safe host journey with exact-origin validation and a complete non-widget fallback. Widgets app-widgets-deep-links search-places routes-navigation intouch-telematics capture-feedback CSP or browser blocks the widget message contract changes without version negotiation late callback targets an edited or submitted host record" } ``` ## search-destination · Harden and migrate a Xamarin location feature - Identity: `search-destination:Tutorial:tutorial:xamarin-maintenance-migration` - Canonical: https://developer.mappls.com/tutorials/xamarin-maintenance-migration ```json { "id": "tutorial:xamarin-maintenance-migration", "kind": "Tutorial", "title": "Harden and migrate a Xamarin location feature", "description": "Inventory native dependencies, isolate shared state, qualify each renderer, add rollback, and prepare a controlled successor migration.", "href": "/tutorials/xamarin-maintenance-migration", "eyebrow": "Advanced · 2 hr", "keywords": "A supportable existing integration with explicit compatibility, teardown, and migration evidence. Xamarin maps search-places routes-navigation binding references an unavailable native symbol renderer lifecycle differs across OS versions successor adapter changes place identity or cancellation semantics" } ``` ## search-destination · Contract slice: A delivery promise customers can trust - Identity: `search-destination:Recipe:recipe:last-mile-delivery-request-response` - Canonical: https://developer.mappls.com/recipes/last-mile-delivery-request-response ```json { "id": "recipe:last-mile-delivery-request-response", "kind": "Recipe", "title": "Contract slice: A delivery promise customers can trust", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/last-mile-delivery-request-response", "eyebrow": "Logistics · stateless · 35–50 min", "keywords": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep. Checkout customer Dispatch planner First-attempt delivery rate Cost per stop ETA error Distance per order Search & Places Routes & Navigation InTouch Telematics Capture & Feedback Normalize the destination and retain its Mappls Pin Order system of record Ambiguous apartment entrance Optimize stops against capacity and time windows Location normalization Driver telemetry goes silent Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Application flow: A delivery promise customers can trust - Identity: `search-destination:Recipe:recipe:last-mile-delivery-composed-experience` - Canonical: https://developer.mappls.com/recipes/last-mile-delivery-composed-experience ```json { "id": "recipe:last-mile-delivery-composed-experience", "kind": "Recipe", "title": "Application flow: A delivery promise customers can trust", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/last-mile-delivery-composed-experience", "eyebrow": "Logistics · hybrid · 90–120 min", "keywords": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep. Checkout customer Dispatch planner Driver Customer-support agent First-attempt delivery rate Cost per stop ETA error Distance per order Search & Places Routes & Navigation InTouch Telematics Capture & Feedback Normalize the destination and retain its Mappls Pin Order system of record Ambiguous apartment entrance Optimize stops against capacity and time windows Location normalization Driver telemetry goes silent Navigate with live rerouting Planning and guidance Provider accepts a route/trip command after timeout Stream driver and order state Trip evidence Ambiguous apartment entrance Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Operating journey: A delivery promise customers can trust - Identity: `search-destination:Recipe:recipe:last-mile-delivery-durable-operation` - Canonical: https://developer.mappls.com/recipes/last-mile-delivery-durable-operation ```json { "id": "recipe:last-mile-delivery-durable-operation", "kind": "Recipe", "title": "Operating journey: A delivery promise customers can trust", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/last-mile-delivery-durable-operation", "eyebrow": "Logistics · stateful · 2–3 hr", "keywords": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep. Checkout customer Dispatch planner Driver Customer-support agent Transport partner First-attempt delivery rate Cost per stop ETA error Distance per order Search & Places Routes & Navigation InTouch Telematics Capture & Feedback Normalize the destination and retain its Mappls Pin Order system of record Ambiguous apartment entrance Optimize stops against capacity and time windows Location normalization Driver telemetry goes silent Navigate with live rerouting Planning and guidance Provider accepts a route/trip command after timeout Stream driver and order state Trip evidence Ambiguous apartment entrance Capture geotagged proof and reconcile exceptions Customer and operations views Driver telemetry goes silent Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Contract slice: A pickup flow that survives the real world - Identity: `search-destination:Recipe:recipe:ride-hailing-request-response` - Canonical: https://developer.mappls.com/recipes/ride-hailing-request-response ```json { "id": "recipe:ride-hailing-request-response", "kind": "Recipe", "title": "Contract slice: A pickup flow that survives the real world", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/ride-hailing-request-response", "eyebrow": "Mobility · stateless · 35–50 min", "keywords": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points. Rider Driver Pickup ETA Cancellation rate Driver idle distance Pickup support contacts Maps Search & Places Routes & Navigation InTouch Telematics Bias search to the rider viewport Trip marketplace Search resolves the building centre Confirm a precise pickup pin and landmark Pickup intent Driver location is stale Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby A2A Solution Studio" } ``` ## search-destination · Application flow: A pickup flow that survives the real world - Identity: `search-destination:Recipe:recipe:ride-hailing-composed-experience` - Canonical: https://developer.mappls.com/recipes/ride-hailing-composed-experience ```json { "id": "recipe:ride-hailing-composed-experience", "kind": "Recipe", "title": "Application flow: A pickup flow that survives the real world", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/ride-hailing-composed-experience", "eyebrow": "Mobility · hybrid · 90–120 min", "keywords": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points. Rider Driver Marketplace dispatcher Safety operator Pickup ETA Cancellation rate Driver idle distance Pickup support contacts Maps Search & Places Routes & Navigation InTouch Telematics Bias search to the rider viewport Trip marketplace Search resolves the building centre Confirm a precise pickup pin and landmark Pickup intent Driver location is stale Match with network-aware ETA ETA matching Rider and driver disagree on arrival Track approach and reroute Approach journey Search resolves the building centre Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby A2A Solution Studio" } ``` ## search-destination · Operating journey: A pickup flow that survives the real world - Identity: `search-destination:Recipe:recipe:ride-hailing-durable-operation` - Canonical: https://developer.mappls.com/recipes/ride-hailing-durable-operation ```json { "id": "recipe:ride-hailing-durable-operation", "kind": "Recipe", "title": "Operating journey: A pickup flow that survives the real world", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/ride-hailing-durable-operation", "eyebrow": "Mobility · stateful · 2–3 hr", "keywords": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points. Rider Driver Marketplace dispatcher Safety operator Customer support Pickup ETA Cancellation rate Driver idle distance Pickup support contacts Maps Search & Places Routes & Navigation InTouch Telematics Bias search to the rider viewport Trip marketplace Search resolves the building centre Confirm a precise pickup pin and landmark Pickup intent Driver location is stale Match with network-aware ETA ETA matching Rider and driver disagree on arrival Track approach and reroute Approach journey Search resolves the building centre Detect arrival and close the trip Shared rendezvous experience Driver location is stale Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby A2A Solution Studio" } ``` ## search-destination · Contract slice: Dispatch the right technician, with the right proof - Identity: `search-destination:Recipe:recipe:field-service-request-response` - Canonical: https://developer.mappls.com/recipes/field-service-request-response ```json { "id": "recipe:field-service-request-response", "kind": "Recipe", "title": "Contract slice: Dispatch the right technician, with the right proof", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/field-service-request-response", "eyebrow": "Utilities · stateless · 35–50 min", "keywords": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off. Service requester Dispatcher First-time-fix rate Jobs per shift SLA compliance Repeat visit rate Workmate Routes & Navigation Capture & Feedback GIS & Analytics Geocode and classify the service location Work-order system Technician accepts while another assignment races Assign by skills, shift, inventory, and ETA Spatial service context Offline commands replay after reassignment Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Application flow: Dispatch the right technician, with the right proof - Identity: `search-destination:Recipe:recipe:field-service-composed-experience` - Canonical: https://developer.mappls.com/recipes/field-service-composed-experience ```json { "id": "recipe:field-service-composed-experience", "kind": "Recipe", "title": "Application flow: Dispatch the right technician, with the right proof", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/field-service-composed-experience", "eyebrow": "Utilities · hybrid · 90–120 min", "keywords": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off. Service requester Dispatcher Technician Proof reviewer First-time-fix rate Jobs per shift SLA compliance Repeat visit rate Workmate Routes & Navigation Capture & Feedback GIS & Analytics Geocode and classify the service location Work-order system Technician accepts while another assignment races Assign by skills, shift, inventory, and ETA Spatial service context Offline commands replay after reassignment Guide the technician Workmate lifecycle Proof is incomplete Collect checklist, image, and signature proof Technician experience Technician accepts while another assignment races Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Operating journey: Dispatch the right technician, with the right proof - Identity: `search-destination:Recipe:recipe:field-service-durable-operation` - Canonical: https://developer.mappls.com/recipes/field-service-durable-operation ```json { "id": "recipe:field-service-durable-operation", "kind": "Recipe", "title": "Operating journey: Dispatch the right technician, with the right proof", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/field-service-durable-operation", "eyebrow": "Utilities · stateful · 2–3 hr", "keywords": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off. Service requester Dispatcher Technician Proof reviewer Operations manager First-time-fix rate Jobs per shift SLA compliance Repeat visit rate Workmate Routes & Navigation Capture & Feedback GIS & Analytics Geocode and classify the service location Work-order system Technician accepts while another assignment races Assign by skills, shift, inventory, and ETA Spatial service context Offline commands replay after reassignment Guide the technician Workmate lifecycle Proof is incomplete Collect checklist, image, and signature proof Technician experience Technician accepts while another assignment races Analyze repeat faults spatially Operations and analytics Offline commands replay after reassignment Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Contract slice: Restore the grid from alarm to verified service - Identity: `search-destination:Recipe:recipe:energy-grid-resilience-request-response` - Canonical: https://developer.mappls.com/recipes/energy-grid-resilience-request-response ```json { "id": "recipe:energy-grid-resilience-request-response", "kind": "Recipe", "title": "Contract slice: Restore the grid from alarm to verified service", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/energy-grid-resilience-request-response", "eyebrow": "Energy · stateless · 35–50 min", "keywords": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk. Grid control operator Outage coordinator Customers restored per hour SAIDI contribution Crew travel time Repeat outage rate GIS & Analytics InTouch Telematics Workmate Routes & Navigation Capture & Feedback Version the network and hazard context Network and hazard authority Many alarms collapse onto the wrong feeder Correlate alarms into bounded outage incidents Outage correlation A road route crosses a newly flooded segment Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Application flow: Restore the grid from alarm to verified service - Identity: `search-destination:Recipe:recipe:energy-grid-resilience-composed-experience` - Canonical: https://developer.mappls.com/recipes/energy-grid-resilience-composed-experience ```json { "id": "recipe:energy-grid-resilience-composed-experience", "kind": "Recipe", "title": "Application flow: Restore the grid from alarm to verified service", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/energy-grid-resilience-composed-experience", "eyebrow": "Energy · hybrid · 90–120 min", "keywords": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk. Grid control operator Outage coordinator Switching authority Field crew Customers restored per hour SAIDI contribution Crew travel time Repeat outage rate GIS & Analytics InTouch Telematics Workmate Routes & Navigation Capture & Feedback Version the network and hazard context Network and hazard authority Many alarms collapse onto the wrong feeder Correlate alarms into bounded outage incidents Outage correlation A road route crosses a newly flooded segment Approve a switching and crew plan Switching and dispatch Crew completion arrives before telemetry recovery Guide crews and capture field evidence Field execution Many alarms collapse onto the wrong feeder Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Operating journey: Restore the grid from alarm to verified service - Identity: `search-destination:Recipe:recipe:energy-grid-resilience-durable-operation` - Canonical: https://developer.mappls.com/recipes/energy-grid-resilience-durable-operation ```json { "id": "recipe:energy-grid-resilience-durable-operation", "kind": "Recipe", "title": "Operating journey: Restore the grid from alarm to verified service", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/energy-grid-resilience-durable-operation", "eyebrow": "Energy · stateful · 2–3 hr", "keywords": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk. Grid control operator Outage coordinator Switching authority Field crew Customer-impact lead Customers restored per hour SAIDI contribution Crew travel time Repeat outage rate GIS & Analytics InTouch Telematics Workmate Routes & Navigation Capture & Feedback Version the network and hazard context Network and hazard authority Many alarms collapse onto the wrong feeder Correlate alarms into bounded outage incidents Outage correlation A road route crosses a newly flooded segment Approve a switching and crew plan Switching and dispatch Crew completion arrives before telemetry recovery Guide crews and capture field evidence Field execution Many alarms collapse onto the wrong feeder Reconcile telemetry, customer impact, and restoration Restoration reconciliation A road route crosses a newly flooded segment Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Contract slice: Choose the next store with evidence - Identity: `search-destination:Recipe:recipe:retail-expansion-request-response` - Canonical: https://developer.mappls.com/recipes/retail-expansion-request-response ```json { "id": "recipe:retail-expansion-request-response", "kind": "Recipe", "title": "Contract slice: Choose the next store with evidence", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/retail-expansion-request-response", "eyebrow": "Retail · stateless · 35–50 min", "keywords": "Faster site screening and investment decisions grounded in a reusable spatial model. Expansion analyst GIS data steward Forecast accuracy Cannibalization risk Time to shortlist Revenue per catchment GIS & Analytics Search & Places Maps Publish candidate sites and performance data Enterprise data products Demographic feed changes mid-analysis Generate drive-time catchments mGIS version registry Candidate geometry has the wrong CRS Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Application flow: Choose the next store with evidence - Identity: `search-destination:Recipe:recipe:retail-expansion-composed-experience` - Canonical: https://developer.mappls.com/recipes/retail-expansion-composed-experience ```json { "id": "recipe:retail-expansion-composed-experience", "kind": "Recipe", "title": "Application flow: Choose the next store with evidence", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/retail-expansion-composed-experience", "eyebrow": "Retail · hybrid · 90–120 min", "keywords": "Faster site screening and investment decisions grounded in a reusable spatial model. Expansion analyst GIS data steward Real-estate manager Finance reviewer Forecast accuracy Cannibalization risk Time to shortlist Revenue per catchment GIS & Analytics Search & Places Maps Publish candidate sites and performance data Enterprise data products Demographic feed changes mid-analysis Generate drive-time catchments mGIS version registry Candidate geometry has the wrong CRS Join demand and competition signals Analysis engine Executive link is forwarded Score and compare candidates Analyst decision lab Demographic feed changes mid-analysis Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Operating journey: Choose the next store with evidence - Identity: `search-destination:Recipe:recipe:retail-expansion-durable-operation` - Canonical: https://developer.mappls.com/recipes/retail-expansion-durable-operation ```json { "id": "recipe:retail-expansion-durable-operation", "kind": "Recipe", "title": "Operating journey: Choose the next store with evidence", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/retail-expansion-durable-operation", "eyebrow": "Retail · stateful · 2–3 hr", "keywords": "Faster site screening and investment decisions grounded in a reusable spatial model. Expansion analyst GIS data steward Real-estate manager Finance reviewer Executive approver Forecast accuracy Cannibalization risk Time to shortlist Revenue per catchment GIS & Analytics Search & Places Maps Publish candidate sites and performance data Enterprise data products Demographic feed changes mid-analysis Generate drive-time catchments mGIS version registry Candidate geometry has the wrong CRS Join demand and competition signals Analysis engine Executive link is forwarded Score and compare candidates Analyst decision lab Demographic feed changes mid-analysis Share an executive decision map Governed sharing Candidate geometry has the wrong CRS Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Contract slice: Make address risk explainable - Identity: `search-destination:Recipe:recipe:banking-address-risk-request-response` - Canonical: https://developer.mappls.com/recipes/banking-address-risk-request-response ```json { "id": "recipe:banking-address-risk-request-response", "kind": "Recipe", "title": "Contract slice: Make address risk explainable", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/banking-address-risk-request-response", "eyebrow": "Financial services · stateless · 35–50 min", "keywords": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses. Applicant Onboarding service Straight-through processing False-positive review rate Verification turnaround Fraud loss Search & Places Capture & Feedback GIS & Analytics Normalize the entered address Onboarding system Device fix is weak or unavailable Compare declared and captured locations Address normalization Address and device evidence disagree Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Application flow: Make address risk explainable - Identity: `search-destination:Recipe:recipe:banking-address-risk-composed-experience` - Canonical: https://developer.mappls.com/recipes/banking-address-risk-composed-experience ```json { "id": "recipe:banking-address-risk-composed-experience", "kind": "Recipe", "title": "Application flow: Make address risk explainable", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/banking-address-risk-composed-experience", "eyebrow": "Financial services · hybrid · 90–120 min", "keywords": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses. Applicant Onboarding service Risk analyst Manual reviewer Straight-through processing False-positive review rate Verification turnaround Fraud loss Search & Places Capture & Feedback GIS & Analytics Normalize the entered address Onboarding system Device fix is weak or unavailable Compare declared and captured locations Address normalization Address and device evidence disagree Join serviceability and risk zones Evidence service Precise evidence reaches retention limit Score confidence with reasons Risk policy engine Device fix is weak or unavailable Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Operating journey: Make address risk explainable - Identity: `search-destination:Recipe:recipe:banking-address-risk-durable-operation` - Canonical: https://developer.mappls.com/recipes/banking-address-risk-durable-operation ```json { "id": "recipe:banking-address-risk-durable-operation", "kind": "Recipe", "title": "Operating journey: Make address risk explainable", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/banking-address-risk-durable-operation", "eyebrow": "Financial services · stateful · 2–3 hr", "keywords": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses. Applicant Onboarding service Risk analyst Manual reviewer Compliance auditor Straight-through processing False-positive review rate Verification turnaround Fraud loss Search & Places Capture & Feedback GIS & Analytics Normalize the entered address Onboarding system Device fix is weak or unavailable Compare declared and captured locations Address normalization Address and device evidence disagree Join serviceability and risk zones Evidence service Precise evidence reaches retention limit Score confidence with reasons Risk policy engine Device fix is weak or unavailable Escalate only unresolved cases Audit and privacy controls Address and device evidence disagree Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Contract slice: Evidence-led claims from incident to settlement - Identity: `search-destination:Recipe:recipe:insurance-claims-request-response` - Canonical: https://developer.mappls.com/recipes/insurance-claims-request-response ```json { "id": "recipe:insurance-claims-request-response", "kind": "Recipe", "title": "Contract slice: Evidence-led claims from incident to settlement", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/insurance-claims-request-response", "eyebrow": "Insurance · stateless · 35–50 min", "keywords": "Faster, more consistent claims decisions with tamper-aware spatial evidence. Policyholder Claims intake Settlement time Assessor travel Evidence completeness Leakage rate Capture & Feedback AI & Location Workmate GIS & Analytics Routes & Navigation Record consented incident location Claims system Media upload partially succeeds Capture guided photo evidence Consented capture and vision boundary Vision result is uncertain or sensitive Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Application flow: Evidence-led claims from incident to settlement - Identity: `search-destination:Recipe:recipe:insurance-claims-composed-experience` - Canonical: https://developer.mappls.com/recipes/insurance-claims-composed-experience ```json { "id": "recipe:insurance-claims-composed-experience", "kind": "Recipe", "title": "Application flow: Evidence-led claims from incident to settlement", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/insurance-claims-composed-experience", "eyebrow": "Insurance · hybrid · 90–120 min", "keywords": "Faster, more consistent claims decisions with tamper-aware spatial evidence. Policyholder Claims intake Assessor Fraud analyst Settlement time Assessor travel Evidence completeness Leakage rate Capture & Feedback AI & Location Workmate GIS & Analytics Routes & Navigation Record consented incident location Claims system Media upload partially succeeds Capture guided photo evidence Consented capture and vision boundary Vision result is uncertain or sensitive Run model-locked vision triage with human review bands Spatial enrichment Location metadata conflicts with declaration Dispatch an assessor when needed Assessment operations Catastrophe data is revised Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Operating journey: Evidence-led claims from incident to settlement - Identity: `search-destination:Recipe:recipe:insurance-claims-durable-operation` - Canonical: https://developer.mappls.com/recipes/insurance-claims-durable-operation ```json { "id": "recipe:insurance-claims-durable-operation", "kind": "Recipe", "title": "Operating journey: Evidence-led claims from incident to settlement", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/insurance-claims-durable-operation", "eyebrow": "Insurance · stateful · 2–3 hr", "keywords": "Faster, more consistent claims decisions with tamper-aware spatial evidence. Policyholder Claims intake Assessor Fraud analyst Catastrophe manager Settlement time Assessor travel Evidence completeness Leakage rate Capture & Feedback AI & Location Workmate GIS & Analytics Routes & Navigation Record consented incident location Claims system Media upload partially succeeds Capture guided photo evidence Consented capture and vision boundary Vision result is uncertain or sensitive Run model-locked vision triage with human review bands Spatial enrichment Location metadata conflicts with declaration Dispatch an assessor when needed Assessment operations Catastrophe data is revised Overlay hazard and policy context Decision evidence Media upload partially succeeds Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Contract slice: Coordinate time-critical care without losing custody - Identity: `search-destination:Recipe:recipe:hospital-care-logistics-request-response` - Canonical: https://developer.mappls.com/recipes/hospital-care-logistics-request-response ```json { "id": "recipe:hospital-care-logistics-request-response", "kind": "Recipe", "title": "Contract slice: Coordinate time-critical care without losing custody", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/hospital-care-logistics-request-response", "eyebrow": "Healthcare · stateless · 35–50 min", "keywords": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody. Transfer coordinator Ambulance dispatcher Door-to-door transfer time On-time specimen delivery Custody exceptions Privacy incidents Search & Places Routes & Navigation InTouch Telematics Capture & Feedback GIS & Analytics Resolve the correct facility, campus, and entrance Clinical and laboratory systems Search selects the public entrance instead of emergency receiving Select an eligible vehicle and bounded route Facility and entrance resolution Location or condition evidence becomes stale Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Application flow: Coordinate time-critical care without losing custody - Identity: `search-destination:Recipe:recipe:hospital-care-logistics-composed-experience` - Canonical: https://developer.mappls.com/recipes/hospital-care-logistics-composed-experience ```json { "id": "recipe:hospital-care-logistics-composed-experience", "kind": "Recipe", "title": "Application flow: Coordinate time-critical care without losing custody", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/hospital-care-logistics-composed-experience", "eyebrow": "Healthcare · hybrid · 90–120 min", "keywords": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody. Transfer coordinator Ambulance dispatcher Driver or courier Receiving clinician Door-to-door transfer time On-time specimen delivery Custody exceptions Privacy incidents Search & Places Routes & Navigation InTouch Telematics Capture & Feedback GIS & Analytics Resolve the correct facility, campus, and entrance Clinical and laboratory systems Search selects the public entrance instead of emergency receiving Select an eligible vehicle and bounded route Facility and entrance resolution Location or condition evidence becomes stale Track custody and freshness through every hand-off Eligibility and dispatch The receiver cannot match the custody identity Escalate delay or temperature exceptions Privacy-minimized journey Search selects the public entrance instead of emergency receiving Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Operating journey: Coordinate time-critical care without losing custody - Identity: `search-destination:Recipe:recipe:hospital-care-logistics-durable-operation` - Canonical: https://developer.mappls.com/recipes/hospital-care-logistics-durable-operation ```json { "id": "recipe:hospital-care-logistics-durable-operation", "kind": "Recipe", "title": "Operating journey: Coordinate time-critical care without losing custody", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/hospital-care-logistics-durable-operation", "eyebrow": "Healthcare · stateful · 2–3 hr", "keywords": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody. Transfer coordinator Ambulance dispatcher Driver or courier Receiving clinician Privacy and quality reviewer Door-to-door transfer time On-time specimen delivery Custody exceptions Privacy incidents Search & Places Routes & Navigation InTouch Telematics Capture & Feedback GIS & Analytics Resolve the correct facility, campus, and entrance Clinical and laboratory systems Search selects the public entrance instead of emergency receiving Select an eligible vehicle and bounded route Facility and entrance resolution Location or condition evidence becomes stale Track custody and freshness through every hand-off Eligibility and dispatch The receiver cannot match the custody identity Escalate delay or temperature exceptions Privacy-minimized journey Search selects the public entrance instead of emergency receiving Reconcile arrival, acceptance, and retained evidence Acceptance and quality review Location or condition evidence becomes stale Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Contract slice: Route coordinated response under pressure - Identity: `search-destination:Recipe:recipe:emergency-response-request-response` - Canonical: https://developer.mappls.com/recipes/emergency-response-request-response ```json { "id": "recipe:emergency-response-request-response", "kind": "Recipe", "title": "Contract slice: Route coordinated response under pressure", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/emergency-response-request-response", "eyebrow": "Public safety · stateless · 35–50 min", "keywords": "Reduced time to scene and safer decisions across dispatch, responders, and command. Caller Emergency call taker Call-to-dispatch time Arrival time Unit utilization Coverage gaps Search & Places Routes & Navigation InTouch Telematics GIS & Analytics Resolve location from address, pin, or device CAD incident record Caller description produces multiple locations Find eligible nearby responders Location resolution Unit position is stale Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Application flow: Route coordinated response under pressure - Identity: `search-destination:Recipe:recipe:emergency-response-composed-experience` - Canonical: https://developer.mappls.com/recipes/emergency-response-composed-experience ```json { "id": "recipe:emergency-response-composed-experience", "kind": "Recipe", "title": "Application flow: Route coordinated response under pressure", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/emergency-response-composed-experience", "eyebrow": "Public safety · hybrid · 90–120 min", "keywords": "Reduced time to scene and safer decisions across dispatch, responders, and command. Caller Emergency call taker Dispatcher Responder Call-to-dispatch time Arrival time Unit utilization Coverage gaps Search & Places Routes & Navigation InTouch Telematics GIS & Analytics Resolve location from address, pin, or device CAD incident record Caller description produces multiple locations Find eligible nearby responders Location resolution Unit position is stale Route with vehicle constraints Resource and route service Hazard changes after dispatch Track units and changing hazards Live coordination Caller description produces multiple locations Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Operating journey: Route coordinated response under pressure - Identity: `search-destination:Recipe:recipe:emergency-response-durable-operation` - Canonical: https://developer.mappls.com/recipes/emergency-response-durable-operation ```json { "id": "recipe:emergency-response-durable-operation", "kind": "Recipe", "title": "Operating journey: Route coordinated response under pressure", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/emergency-response-durable-operation", "eyebrow": "Public safety · stateful · 2–3 hr", "keywords": "Reduced time to scene and safer decisions across dispatch, responders, and command. Caller Emergency call taker Dispatcher Responder Incident commander Call-to-dispatch time Arrival time Unit utilization Coverage gaps Search & Places Routes & Navigation InTouch Telematics GIS & Analytics Resolve location from address, pin, or device CAD incident record Caller description produces multiple locations Find eligible nearby responders Location resolution Unit position is stale Route with vehicle constraints Resource and route service Hazard changes after dispatch Track units and changing hazards Live coordination Caller description produces multiple locations Replay the incident for review Command and review Unit position is stale Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Care Transfer Desk" } ``` ## search-destination · Contract slice: A living operations map for the city - Identity: `search-destination:Recipe:recipe:smart-city-operations-request-response` - Canonical: https://developer.mappls.com/recipes/smart-city-operations-request-response ```json { "id": "recipe:smart-city-operations-request-response", "kind": "Recipe", "title": "Contract slice: A living operations map for the city", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/smart-city-operations-request-response", "eyebrow": "Government · stateless · 35–50 min", "keywords": "One governed view from daily operations to infrastructure investment planning. Citizen Control-room operator Resolution time Asset downtime Repeat incidents Ward-level service equity GIS & Analytics Workmate InTouch Telematics Maps Catalog authoritative layers Department systems of record Two departments claim the same incident Ingest live assets and citizen reports Spatial data catalogue Citizen report contains precise personal data Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Application flow: A living operations map for the city - Identity: `search-destination:Recipe:recipe:smart-city-operations-composed-experience` - Canonical: https://developer.mappls.com/recipes/smart-city-operations-composed-experience ```json { "id": "recipe:smart-city-operations-composed-experience", "kind": "Recipe", "title": "Application flow: A living operations map for the city", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/smart-city-operations-composed-experience", "eyebrow": "Government · hybrid · 90–120 min", "keywords": "One governed view from daily operations to infrastructure investment planning. Citizen Control-room operator Department dispatcher Field crew Resolution time Asset downtime Repeat incidents Ward-level service equity GIS & Analytics Workmate InTouch Telematics Maps Catalog authoritative layers Department systems of record Two departments claim the same incident Ingest live assets and citizen reports Spatial data catalogue Citizen report contains precise personal data Dispatch and monitor work Event correlation Public status lags internal resolution Publish role-specific dashboards Work orchestration Two departments claim the same incident Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Operating journey: A living operations map for the city - Identity: `search-destination:Recipe:recipe:smart-city-operations-durable-operation` - Canonical: https://developer.mappls.com/recipes/smart-city-operations-durable-operation ```json { "id": "recipe:smart-city-operations-durable-operation", "kind": "Recipe", "title": "Operating journey: A living operations map for the city", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/smart-city-operations-durable-operation", "eyebrow": "Government · stateful · 2–3 hr", "keywords": "One governed view from daily operations to infrastructure investment planning. Citizen Control-room operator Department dispatcher Field crew City data steward Resolution time Asset downtime Repeat incidents Ward-level service equity GIS & Analytics Workmate InTouch Telematics Maps Catalog authoritative layers Department systems of record Two departments claim the same incident Ingest live assets and citizen reports Spatial data catalogue Citizen report contains precise personal data Dispatch and monitor work Event correlation Public status lags internal resolution Publish role-specific dashboards Work orchestration Two departments claim the same incident Analyze hotspots and service equity Role and public projections Citizen report contains precise personal data Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Contract slice: Navigation built for intermittent connectivity - Identity: `search-destination:Recipe:recipe:connected-vehicle-request-response` - Canonical: https://developer.mappls.com/recipes/connected-vehicle-request-response ```json { "id": "recipe:connected-vehicle-request-response", "kind": "Recipe", "title": "Contract slice: Navigation built for intermittent connectivity", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/connected-vehicle-request-response", "eyebrow": "Automotive · stateless · 35–50 min", "keywords": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety. Driver Vehicle head unit Route success offline Guidance crash-free rate Update adoption Search success Offline & Automotive Routes & Navigation Search & Places InTouch Telematics Activate the head unit Vehicle/OEM identity Power loss during update Install compatible signed regional data Dual-slot offline runtime Online traffic disappears mid-route Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby A2A Solution Studio" } ``` ## search-destination · Application flow: Navigation built for intermittent connectivity - Identity: `search-destination:Recipe:recipe:connected-vehicle-composed-experience` - Canonical: https://developer.mappls.com/recipes/connected-vehicle-composed-experience ```json { "id": "recipe:connected-vehicle-composed-experience", "kind": "Recipe", "title": "Application flow: Navigation built for intermittent connectivity", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/connected-vehicle-composed-experience", "eyebrow": "Automotive · hybrid · 90–120 min", "keywords": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety. Driver Vehicle head unit OEM cloud Map-data operator Route success offline Guidance crash-free rate Update adoption Search success Offline & Automotive Routes & Navigation Search & Places InTouch Telematics Activate the head unit Vehicle/OEM identity Power loss during update Install compatible signed regional data Dual-slot offline runtime Online traffic disappears mid-route Plan and guide offline Local navigation New package boots but fails route smoke test Blend online traffic and search when available Online enhancement Power loss during update Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby A2A Solution Studio" } ``` ## search-destination · Operating journey: Navigation built for intermittent connectivity - Identity: `search-destination:Recipe:recipe:connected-vehicle-durable-operation` - Canonical: https://developer.mappls.com/recipes/connected-vehicle-durable-operation ```json { "id": "recipe:connected-vehicle-durable-operation", "kind": "Recipe", "title": "Operating journey: Navigation built for intermittent connectivity", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/connected-vehicle-durable-operation", "eyebrow": "Automotive · stateful · 2–3 hr", "keywords": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety. Driver Vehicle head unit OEM cloud Map-data operator Dealer/support engineer Route success offline Guidance crash-free rate Update adoption Search success Offline & Automotive Routes & Navigation Search & Places InTouch Telematics Activate the head unit Vehicle/OEM identity Power loss during update Install compatible signed regional data Dual-slot offline runtime Online traffic disappears mid-route Plan and guide offline Local navigation New package boots but fails route smoke test Blend online traffic and search when available Online enhancement Power loss during update Stage atomic map and runtime updates Fleet operations Online traffic disappears mid-route Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby A2A Solution Studio" } ``` ## search-destination · Contract slice: Run a safe, punctual airport turnaround - Identity: `search-destination:Recipe:recipe:aviation-ground-operations-request-response` - Canonical: https://developer.mappls.com/recipes/aviation-ground-operations-request-response ```json { "id": "recipe:aviation-ground-operations-request-response", "kind": "Recipe", "title": "Contract slice: Run a safe, punctual airport turnaround", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/aviation-ground-operations-request-response", "eyebrow": "Aviation · stateless · 35–50 min", "keywords": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams. Turnaround coordinator Airport operations controller On-time departure Turnaround milestone variance Airside safety exceptions Ground-equipment utilization GIS & Analytics InTouch Telematics Workmate Maps Capture & Feedback Publish the approved airside network and restricted zones Airport operational authority Stand changes after teams accept tasks Create one versioned turnaround plan Versioned spatial operating picture A vehicle appears outside its approved corridor Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Application flow: Run a safe, punctual airport turnaround - Identity: `search-destination:Recipe:recipe:aviation-ground-operations-composed-experience` - Canonical: https://developer.mappls.com/recipes/aviation-ground-operations-composed-experience ```json { "id": "recipe:aviation-ground-operations-composed-experience", "kind": "Recipe", "title": "Application flow: Run a safe, punctual airport turnaround", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/aviation-ground-operations-composed-experience", "eyebrow": "Aviation · hybrid · 90–120 min", "keywords": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams. Turnaround coordinator Airport operations controller Ground-service team Airline station manager On-time departure Turnaround milestone variance Airside safety exceptions Ground-equipment utilization GIS & Analytics InTouch Telematics Workmate Maps Capture & Feedback Publish the approved airside network and restricted zones Airport operational authority Stand changes after teams accept tasks Create one versioned turnaround plan Versioned spatial operating picture A vehicle appears outside its approved corridor Track eligible vehicles and milestone hand-offs Turnaround aggregate One supplier reports complete while another dependency is open Capture inspection and exception evidence Ground-team execution Stand changes after teams accept tasks Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Operating journey: Run a safe, punctual airport turnaround - Identity: `search-destination:Recipe:recipe:aviation-ground-operations-durable-operation` - Canonical: https://developer.mappls.com/recipes/aviation-ground-operations-durable-operation ```json { "id": "recipe:aviation-ground-operations-durable-operation", "kind": "Recipe", "title": "Operating journey: Run a safe, punctual airport turnaround", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/aviation-ground-operations-durable-operation", "eyebrow": "Aviation · stateful · 2–3 hr", "keywords": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams. Turnaround coordinator Airport operations controller Ground-service team Airline station manager Safety investigator On-time departure Turnaround milestone variance Airside safety exceptions Ground-equipment utilization GIS & Analytics InTouch Telematics Workmate Maps Capture & Feedback Publish the approved airside network and restricted zones Airport operational authority Stand changes after teams accept tasks Create one versioned turnaround plan Versioned spatial operating picture A vehicle appears outside its approved corridor Track eligible vehicles and milestone hand-offs Turnaround aggregate One supplier reports complete while another dependency is open Capture inspection and exception evidence Ground-team execution Stand changes after teams accept tasks Reconcile departure readiness across authorities Readiness reconciliation A vehicle appears outside its approved corridor Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Contract slice: Turn inspiration into an itinerary - Identity: `search-destination:Recipe:recipe:travel-discovery-request-response` - Canonical: https://developer.mappls.com/recipes/travel-discovery-request-response ```json { "id": "recipe:travel-discovery-request-response", "kind": "Recipe", "title": "Contract slice: Turn inspiration into an itinerary", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/travel-discovery-request-response", "eyebrow": "Travel · stateless · 35–50 min", "keywords": "More confident trip planning and higher conversion from discovery to booking. Traveler Travel-content editor Save-to-book rate Itinerary completion Search refinement Navigation hand-offs Search & Places Maps App Widgets & Deep Links Routes & Navigation Discover places by theme and proximity Travel content and inventory Two sources describe the same attraction Build a time-aware itinerary Place discovery Opening or availability data is stale Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Store Locator" } ``` ## search-destination · Application flow: Turn inspiration into an itinerary - Identity: `search-destination:Recipe:recipe:travel-discovery-composed-experience` - Canonical: https://developer.mappls.com/recipes/travel-discovery-composed-experience ```json { "id": "recipe:travel-discovery-composed-experience", "kind": "Recipe", "title": "Application flow: Turn inspiration into an itinerary", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/travel-discovery-composed-experience", "eyebrow": "Travel · hybrid · 90–120 min", "keywords": "More confident trip planning and higher conversion from discovery to booking. Traveler Travel-content editor Booking partner Product merchandiser Save-to-book rate Itinerary completion Search refinement Navigation hand-offs Search & Places Maps App Widgets & Deep Links Routes & Navigation Discover places by theme and proximity Travel content and inventory Two sources describe the same attraction Build a time-aware itinerary Place discovery Opening or availability data is stale Visualize routes and neighborhoods Itinerary aggregate Navigation app is absent Embed 3D or RealView context Map and rich context Two sources describe the same attraction Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Store Locator" } ``` ## search-destination · Operating journey: Turn inspiration into an itinerary - Identity: `search-destination:Recipe:recipe:travel-discovery-durable-operation` - Canonical: https://developer.mappls.com/recipes/travel-discovery-durable-operation ```json { "id": "recipe:travel-discovery-durable-operation", "kind": "Recipe", "title": "Operating journey: Turn inspiration into an itinerary", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/travel-discovery-durable-operation", "eyebrow": "Travel · stateful · 2–3 hr", "keywords": "More confident trip planning and higher conversion from discovery to booking. Traveler Travel-content editor Booking partner Product merchandiser Customer support Save-to-book rate Itinerary completion Search refinement Navigation hand-offs Search & Places Maps App Widgets & Deep Links Routes & Navigation Discover places by theme and proximity Travel content and inventory Two sources describe the same attraction Build a time-aware itinerary Place discovery Opening or availability data is stale Visualize routes and neighborhoods Itinerary aggregate Navigation app is absent Embed 3D or RealView context Map and rich context Two sources describe the same attraction Hand off to navigation Partner hand-off Opening or availability data is stale Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Store Locator" } ``` ## search-destination · Contract slice: Coordinate field operations across every plot - Identity: `search-destination:Recipe:recipe:agriculture-field-ops-request-response` - Canonical: https://developer.mappls.com/recipes/agriculture-field-ops-request-response ```json { "id": "recipe:agriculture-field-ops-request-response", "kind": "Recipe", "title": "Contract slice: Coordinate field operations across every plot", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/agriculture-field-ops-request-response", "eyebrow": "Agriculture · stateless · 35–50 min", "keywords": "Less travel and better traceability for inspection, inputs, harvest, and compliance. Farm manager Agronomist Area serviced per day Input variance Equipment utilization Issue recurrence GIS & Analytics Workmate InTouch Telematics Capture & Feedback Publish parcel boundaries Farm/parcel registry Observation falls near a parcel boundary Create seasonal field tasks Seasonal planning Offline task was reassigned Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Application flow: Coordinate field operations across every plot - Identity: `search-destination:Recipe:recipe:agriculture-field-ops-composed-experience` - Canonical: https://developer.mappls.com/recipes/agriculture-field-ops-composed-experience ```json { "id": "recipe:agriculture-field-ops-composed-experience", "kind": "Recipe", "title": "Application flow: Coordinate field operations across every plot", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/agriculture-field-ops-composed-experience", "eyebrow": "Agriculture · hybrid · 90–120 min", "keywords": "Less travel and better traceability for inspection, inputs, harvest, and compliance. Farm manager Agronomist Field worker Equipment operator Area serviced per day Input variance Equipment utilization Issue recurrence GIS & Analytics Workmate InTouch Telematics Capture & Feedback Publish parcel boundaries Farm/parcel registry Observation falls near a parcel boundary Create seasonal field tasks Seasonal planning Offline task was reassigned Optimize crews and equipment Offline field execution Equipment telemetry is shared across farms Capture geotagged observations Equipment telemetry Observation falls near a parcel boundary Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Operating journey: Coordinate field operations across every plot - Identity: `search-destination:Recipe:recipe:agriculture-field-ops-durable-operation` - Canonical: https://developer.mappls.com/recipes/agriculture-field-ops-durable-operation ```json { "id": "recipe:agriculture-field-ops-durable-operation", "kind": "Recipe", "title": "Operating journey: Coordinate field operations across every plot", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/agriculture-field-ops-durable-operation", "eyebrow": "Agriculture · stateful · 2–3 hr", "keywords": "Less travel and better traceability for inspection, inputs, harvest, and compliance. Farm manager Agronomist Field worker Equipment operator Compliance auditor Area serviced per day Input variance Equipment utilization Issue recurrence GIS & Analytics Workmate InTouch Telematics Capture & Feedback Publish parcel boundaries Farm/parcel registry Observation falls near a parcel boundary Create seasonal field tasks Seasonal planning Offline task was reassigned Optimize crews and equipment Offline field execution Equipment telemetry is shared across farms Capture geotagged observations Equipment telemetry Observation falls near a parcel boundary Analyze yield and issue patterns Spatial agronomy analysis Offline task was reassigned Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Contract slice: Move material safely across a changing mine - Identity: `search-destination:Recipe:recipe:mining-haulage-safety-request-response` - Canonical: https://developer.mappls.com/recipes/mining-haulage-safety-request-response ```json { "id": "recipe:mining-haulage-safety-request-response", "kind": "Recipe", "title": "Contract slice: Move material safely across a changing mine", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/mining-haulage-safety-request-response", "eyebrow": "Mining · stateless · 35–50 min", "keywords": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses. Mine dispatcher Pit supervisor Tonnes per operating hour Cycle-time variance Geofence exceptions Unplanned equipment idle time GIS & Analytics InTouch Telematics Workmate Offline & Automotive Capture & Feedback Publish the approved pit, road, and exclusion-zone version Mine plan and safety authority A truck wakes with the previous pit map Assign compatible equipment and operators Versioned offline map release Telemetry silence looks like an idle vehicle Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Application flow: Move material safely across a changing mine - Identity: `search-destination:Recipe:recipe:mining-haulage-safety-composed-experience` - Canonical: https://developer.mappls.com/recipes/mining-haulage-safety-composed-experience ```json { "id": "recipe:mining-haulage-safety-composed-experience", "kind": "Recipe", "title": "Application flow: Move material safely across a changing mine", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/mining-haulage-safety-composed-experience", "eyebrow": "Mining · hybrid · 90–120 min", "keywords": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses. Mine dispatcher Pit supervisor Haul-truck operator Geotechnical engineer Tonnes per operating hour Cycle-time variance Geofence exceptions Unplanned equipment idle time GIS & Analytics InTouch Telematics Workmate Offline & Automotive Capture & Feedback Publish the approved pit, road, and exclusion-zone version Mine plan and safety authority A truck wakes with the previous pit map Assign compatible equipment and operators Versioned offline map release Telemetry silence looks like an idle vehicle Guide and observe offline-capable haul cycles Dispatch aggregate Duplicate dump evidence inflates tonnes Stop and review safety or geofence exceptions Haul-cycle evidence A truck wakes with the previous pit map Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Operating journey: Move material safely across a changing mine - Identity: `search-destination:Recipe:recipe:mining-haulage-safety-durable-operation` - Canonical: https://developer.mappls.com/recipes/mining-haulage-safety-durable-operation ```json { "id": "recipe:mining-haulage-safety-durable-operation", "kind": "Recipe", "title": "Operating journey: Move material safely across a changing mine", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/mining-haulage-safety-durable-operation", "eyebrow": "Mining · stateful · 2–3 hr", "keywords": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses. Mine dispatcher Pit supervisor Haul-truck operator Geotechnical engineer Safety and production reviewer Tonnes per operating hour Cycle-time variance Geofence exceptions Unplanned equipment idle time GIS & Analytics InTouch Telematics Workmate Offline & Automotive Capture & Feedback Publish the approved pit, road, and exclusion-zone version Mine plan and safety authority A truck wakes with the previous pit map Assign compatible equipment and operators Versioned offline map release Telemetry silence looks like an idle vehicle Guide and observe offline-capable haul cycles Dispatch aggregate Duplicate dump evidence inflates tonnes Stop and review safety or geofence exceptions Haul-cycle evidence A truck wakes with the previous pit map Reconcile tonnes, cycles, maintenance, and shift closure Safety and production reconciliation Telemetry silence looks like an idle vehicle Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Airside Turnaround Desk" } ``` ## search-destination · Contract slice: Operate the network from tower to doorstep - Identity: `search-destination:Recipe:recipe:telecom-network-care-request-response` - Canonical: https://developer.mappls.com/recipes/telecom-network-care-request-response ```json { "id": "recipe:telecom-network-care-request-response", "kind": "Recipe", "title": "Contract slice: Operate the network from tower to doorstep", "description": "Prove one bounded contract, identity handoff, failure response, and observable first success.", "href": "/recipes/telecom-network-care-request-response", "eyebrow": "Telecommunications · stateless · 35–50 min", "keywords": "Faster restoration with better prioritization and fewer repeat dispatches. Network operations engineer Alarm correlator Mean time to repair Customers restored per action Truck rolls Repeat alarm rate GIS & Analytics Workmate Routes & Navigation Capture & Feedback Model towers, links, cabinets, and service areas Network inventory/topology Many alarms represent one fibre cut Correlate alarms with impacted customers Alarm and impact correlation Inventory geometry/topology is stale Bound inputs and outputs Abortable timeout Retry only safe reads Typed empty and denied states Safe request correlation Credential and URL-log redaction cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Application flow: Operate the network from tower to doorstep - Identity: `search-destination:Recipe:recipe:telecom-network-care-composed-experience` - Canonical: https://developer.mappls.com/recipes/telecom-network-care-composed-experience ```json { "id": "recipe:telecom-network-care-composed-experience", "kind": "Recipe", "title": "Application flow: Operate the network from tower to doorstep", "description": "Compose multiple capabilities while the application owns user intent, policy, and continuity.", "href": "/recipes/telecom-network-care-composed-experience", "eyebrow": "Telecommunications · hybrid · 90–120 min", "keywords": "Faster restoration with better prioritization and fewer repeat dispatches. Network operations engineer Alarm correlator Field dispatcher Technician Mean time to repair Customers restored per action Truck rolls Repeat alarm rate GIS & Analytics Workmate Routes & Navigation Capture & Feedback Model towers, links, cabinets, and service areas Network inventory/topology Many alarms represent one fibre cut Correlate alarms with impacted customers Alarm and impact correlation Inventory geometry/topology is stale Create skill-aware repair tasks Repair orchestration Technician closes before alarms clear Navigate and capture repair proof Field evidence Many alarms represent one fibre cut Application-owned intent Stable cross-capability identity Partial-failure fallback Cancellation and teardown Freshness and provenance Quota and latency budget cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · Operating journey: Operate the network from tower to doorstep - Identity: `search-destination:Recipe:recipe:telecom-network-care-durable-operation` - Canonical: https://developer.mappls.com/recipes/telecom-network-care-durable-operation ```json { "id": "recipe:telecom-network-care-durable-operation", "kind": "Recipe", "title": "Operating journey: Operate the network from tower to doorstep", "description": "Operate the full lifecycle with versioned state, hostile-path recovery, audit, and release evidence.", "href": "/recipes/telecom-network-care-durable-operation", "eyebrow": "Telecommunications · stateful · 2–3 hr", "keywords": "Faster restoration with better prioritization and fewer repeat dispatches. Network operations engineer Alarm correlator Field dispatcher Technician Customer-impact manager Mean time to repair Customers restored per action Truck rolls Repeat alarm rate GIS & Analytics Workmate Routes & Navigation Capture & Feedback Model towers, links, cabinets, and service areas Network inventory/topology Many alarms represent one fibre cut Correlate alarms with impacted customers Alarm and impact correlation Inventory geometry/topology is stale Create skill-aware repair tasks Repair orchestration Technician closes before alarms clear Navigate and capture repair proof Field evidence Many alarms represent one fibre cut Analyze chronic failure clusters Restoration reconciliation Inventory geometry/topology is stale Idempotent commands Optimistic aggregate versions Event and receipt time Transactional outbox Unknown-outcome reconciliation Independent human decisions Restart recovery Immutable audit evidence cURL JavaScript Python Java C# Go PHP Ruby Grid Restoration Desk" } ``` ## search-destination · A delivery promise customers can trust - Identity: `search-destination:Solution:solution:last-mile-delivery` - Canonical: https://developer.mappls.com/use-cases/last-mile-delivery ```json { "id": "solution:last-mile-delivery", "kind": "Solution", "title": "A delivery promise customers can trust", "description": "Validate addresses, allocate stops, guide drivers, stream progress, and prove completion.", "href": "/use-cases/last-mile-delivery", "eyebrow": "Logistics", "keywords": "Fewer failed deliveries and a live, explainable ETA from checkout to doorstep. search-places routes-navigation intouch-telematics capture-feedback Checkout customer Dispatch planner Driver Customer-support agent Transport partner Normalize the destination and retain its Mappls Pin Optimize stops against capacity and time windows Navigate with live rerouting Stream driver and order state Capture geotagged proof and reconcile exceptions First-attempt delivery rate Cost per stop ETA error Distance per order" } ``` ## search-destination · A pickup flow that survives the real world - Identity: `search-destination:Solution:solution:ride-hailing` - Canonical: https://developer.mappls.com/use-cases/ride-hailing ```json { "id": "solution:ride-hailing", "kind": "Solution", "title": "A pickup flow that survives the real world", "description": "Find entrances, match riders and drivers, route continuously, and resolve pickup ambiguity.", "href": "/use-cases/ride-hailing", "eyebrow": "Mobility", "keywords": "Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points. maps search-places routes-navigation intouch-telematics Rider Driver Marketplace dispatcher Safety operator Customer support Bias search to the rider viewport Confirm a precise pickup pin and landmark Match with network-aware ETA Track approach and reroute Detect arrival and close the trip Pickup ETA Cancellation rate Driver idle distance Pickup support contacts" } ``` ## search-destination · Dispatch the right technician, with the right proof - Identity: `search-destination:Solution:solution:field-service` - Canonical: https://developer.mappls.com/use-cases/field-service ```json { "id": "solution:field-service", "kind": "Solution", "title": "Dispatch the right technician, with the right proof", "description": "Turn outages or service requests into skill-aware, route-efficient field jobs.", "href": "/use-cases/field-service", "eyebrow": "Utilities", "keywords": "Higher first-time-fix rates and auditable work from dispatch through customer sign-off. workmate routes-navigation capture-feedback gis-analytics Service requester Dispatcher Technician Proof reviewer Operations manager Geocode and classify the service location Assign by skills, shift, inventory, and ETA Guide the technician Collect checklist, image, and signature proof Analyze repeat faults spatially First-time-fix rate Jobs per shift SLA compliance Repeat visit rate" } ``` ## search-destination · Restore the grid from alarm to verified service - Identity: `search-destination:Solution:solution:energy-grid-resilience` - Canonical: https://developer.mappls.com/use-cases/energy-grid-resilience ```json { "id": "solution:energy-grid-resilience", "kind": "Solution", "title": "Restore the grid from alarm to verified service", "description": "Correlate network alarms, weather exposure, switching plans, field crews, and restoration evidence.", "href": "/use-cases/energy-grid-resilience", "eyebrow": "Energy", "keywords": "Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk. gis-analytics intouch-telematics workmate routes-navigation capture-feedback Grid control operator Outage coordinator Switching authority Field crew Customer-impact lead Version the network and hazard context Correlate alarms into bounded outage incidents Approve a switching and crew plan Guide crews and capture field evidence Reconcile telemetry, customer impact, and restoration Customers restored per hour SAIDI contribution Crew travel time Repeat outage rate" } ``` ## search-destination · Choose the next store with evidence - Identity: `search-destination:Solution:solution:retail-expansion` - Canonical: https://developer.mappls.com/use-cases/retail-expansion ```json { "id": "solution:retail-expansion", "kind": "Solution", "title": "Choose the next store with evidence", "description": "Combine catchments, demographics, competition, access, and existing performance.", "href": "/use-cases/retail-expansion", "eyebrow": "Retail", "keywords": "Faster site screening and investment decisions grounded in a reusable spatial model. gis-analytics search-places maps Expansion analyst GIS data steward Real-estate manager Finance reviewer Executive approver Publish candidate sites and performance data Generate drive-time catchments Join demand and competition signals Score and compare candidates Share an executive decision map Forecast accuracy Cannibalization risk Time to shortlist Revenue per catchment" } ``` ## search-destination · Make address risk explainable - Identity: `search-destination:Solution:solution:banking-address-risk` - Canonical: https://developer.mappls.com/use-cases/banking-address-risk ```json { "id": "solution:banking-address-risk", "kind": "Solution", "title": "Make address risk explainable", "description": "Standardize applications, verify presence, enrich geography, and route cases for review.", "href": "/use-cases/banking-address-risk", "eyebrow": "Financial services", "keywords": "More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses. search-places capture-feedback gis-analytics Applicant Onboarding service Risk analyst Manual reviewer Compliance auditor Normalize the entered address Compare declared and captured locations Join serviceability and risk zones Score confidence with reasons Escalate only unresolved cases Straight-through processing False-positive review rate Verification turnaround Fraud loss" } ``` ## search-destination · Evidence-led claims from incident to settlement - Identity: `search-destination:Solution:solution:insurance-claims` - Canonical: https://developer.mappls.com/use-cases/insurance-claims ```json { "id": "solution:insurance-claims", "kind": "Solution", "title": "Evidence-led claims from incident to settlement", "description": "Capture location and imagery, use governed vision triage, dispatch assessors, and understand catastrophe exposure.", "href": "/use-cases/insurance-claims", "eyebrow": "Insurance", "keywords": "Faster, more consistent claims decisions with tamper-aware spatial evidence. capture-feedback ai-location workmate gis-analytics routes-navigation Policyholder Claims intake Assessor Fraud analyst Catastrophe manager Record consented incident location Capture guided photo evidence Run model-locked vision triage with human review bands Dispatch an assessor when needed Overlay hazard and policy context Preserve decision lineage and redaction Settlement time Assessor travel Evidence completeness Leakage rate" } ``` ## search-destination · Coordinate time-critical care without losing custody - Identity: `search-destination:Solution:solution:hospital-care-logistics` - Canonical: https://developer.mappls.com/use-cases/hospital-care-logistics ```json { "id": "solution:hospital-care-logistics", "kind": "Solution", "title": "Coordinate time-critical care without losing custody", "description": "Resolve facilities and entrances, dispatch suitable transport, track hand-offs, and preserve privacy-minimized care logistics evidence.", "href": "/use-cases/hospital-care-logistics", "eyebrow": "Healthcare", "keywords": "Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody. search-places routes-navigation intouch-telematics capture-feedback gis-analytics Transfer coordinator Ambulance dispatcher Driver or courier Receiving clinician Privacy and quality reviewer Resolve the correct facility, campus, and entrance Select an eligible vehicle and bounded route Track custody and freshness through every hand-off Escalate delay or temperature exceptions Reconcile arrival, acceptance, and retained evidence Door-to-door transfer time On-time specimen delivery Custody exceptions Privacy incidents" } ``` ## search-destination · Route coordinated response under pressure - Identity: `search-destination:Solution:solution:emergency-response` - Canonical: https://developer.mappls.com/use-cases/emergency-response ```json { "id": "solution:emergency-response", "kind": "Solution", "title": "Route coordinated response under pressure", "description": "Resolve caller location, find capable resources, route around incidents, and maintain a common picture.", "href": "/use-cases/emergency-response", "eyebrow": "Public safety", "keywords": "Reduced time to scene and safer decisions across dispatch, responders, and command. search-places routes-navigation intouch-telematics gis-analytics Caller Emergency call taker Dispatcher Responder Incident commander Resolve location from address, pin, or device Find eligible nearby responders Route with vehicle constraints Track units and changing hazards Replay the incident for review Call-to-dispatch time Arrival time Unit utilization Coverage gaps" } ``` ## search-destination · A living operations map for the city - Identity: `search-destination:Solution:solution:smart-city-operations` - Canonical: https://developer.mappls.com/use-cases/smart-city-operations ```json { "id": "solution:smart-city-operations", "kind": "Solution", "title": "A living operations map for the city", "description": "Unify assets, incidents, crews, citizen feedback, and long-term spatial analysis.", "href": "/use-cases/smart-city-operations", "eyebrow": "Government", "keywords": "One governed view from daily operations to infrastructure investment planning. gis-analytics workmate intouch-telematics maps Citizen Control-room operator Department dispatcher Field crew City data steward Catalog authoritative layers Ingest live assets and citizen reports Dispatch and monitor work Publish role-specific dashboards Analyze hotspots and service equity Resolution time Asset downtime Repeat incidents Ward-level service equity" } ``` ## search-destination · Navigation built for intermittent connectivity - Identity: `search-destination:Solution:solution:connected-vehicle` - Canonical: https://developer.mappls.com/use-cases/connected-vehicle ```json { "id": "solution:connected-vehicle", "kind": "Solution", "title": "Navigation built for intermittent connectivity", "description": "Ship an activated, updateable in-vehicle navigation lifecycle with online enhancement.", "href": "/use-cases/connected-vehicle", "eyebrow": "Automotive", "keywords": "Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety. offline-automotive routes-navigation search-places intouch-telematics Driver Vehicle head unit OEM cloud Map-data operator Dealer/support engineer Activate the head unit Install compatible signed regional data Plan and guide offline Blend online traffic and search when available Stage atomic map and runtime updates Route success offline Guidance crash-free rate Update adoption Search success" } ``` ## search-destination · Run a safe, punctual airport turnaround - Identity: `search-destination:Solution:solution:aviation-ground-operations` - Canonical: https://developer.mappls.com/use-cases/aviation-ground-operations ```json { "id": "solution:aviation-ground-operations", "kind": "Solution", "title": "Run a safe, punctual airport turnaround", "description": "Coordinate stands, service vehicles, restricted zones, inspections, and turnaround milestones on one governed operating picture.", "href": "/use-cases/aviation-ground-operations", "eyebrow": "Aviation", "keywords": "More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams. gis-analytics intouch-telematics workmate maps capture-feedback Turnaround coordinator Airport operations controller Ground-service team Airline station manager Safety investigator Publish the approved airside network and restricted zones Create one versioned turnaround plan Track eligible vehicles and milestone hand-offs Capture inspection and exception evidence Reconcile departure readiness across authorities On-time departure Turnaround milestone variance Airside safety exceptions Ground-equipment utilization" } ``` ## search-destination · Turn inspiration into an itinerary - Identity: `search-destination:Solution:solution:travel-discovery` - Canonical: https://developer.mappls.com/use-cases/travel-discovery ```json { "id": "solution:travel-discovery", "kind": "Solution", "title": "Turn inspiration into an itinerary", "description": "Help travelers discover, sequence, visualize, and open rich place experiences.", "href": "/use-cases/travel-discovery", "eyebrow": "Travel", "keywords": "More confident trip planning and higher conversion from discovery to booking. search-places maps app-widgets-deep-links routes-navigation Traveler Travel-content editor Booking partner Product merchandiser Customer support Discover places by theme and proximity Build a time-aware itinerary Visualize routes and neighborhoods Embed 3D or RealView context Hand off to navigation Save-to-book rate Itinerary completion Search refinement Navigation hand-offs" } ``` ## search-destination · Coordinate field operations across every plot - Identity: `search-destination:Solution:solution:agriculture-field-ops` - Canonical: https://developer.mappls.com/use-cases/agriculture-field-ops ```json { "id": "solution:agriculture-field-ops", "kind": "Solution", "title": "Coordinate field operations across every plot", "description": "Map parcels, schedule crews, track equipment, and compare observations over time.", "href": "/use-cases/agriculture-field-ops", "eyebrow": "Agriculture", "keywords": "Less travel and better traceability for inspection, inputs, harvest, and compliance. gis-analytics workmate intouch-telematics capture-feedback Farm manager Agronomist Field worker Equipment operator Compliance auditor Publish parcel boundaries Create seasonal field tasks Optimize crews and equipment Capture geotagged observations Analyze yield and issue patterns Area serviced per day Input variance Equipment utilization Issue recurrence" } ``` ## search-destination · Move material safely across a changing mine - Identity: `search-destination:Solution:solution:mining-haulage-safety` - Canonical: https://developer.mappls.com/use-cases/mining-haulage-safety ```json { "id": "solution:mining-haulage-safety", "kind": "Solution", "title": "Move material safely across a changing mine", "description": "Version haul roads and exclusion zones, dispatch compatible equipment, track cycles, and reconcile safety and production evidence.", "href": "/use-cases/mining-haulage-safety", "eyebrow": "Mining", "keywords": "Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses. gis-analytics intouch-telematics workmate offline-automotive capture-feedback Mine dispatcher Pit supervisor Haul-truck operator Geotechnical engineer Safety and production reviewer Publish the approved pit, road, and exclusion-zone version Assign compatible equipment and operators Guide and observe offline-capable haul cycles Stop and review safety or geofence exceptions Reconcile tonnes, cycles, maintenance, and shift closure Tonnes per operating hour Cycle-time variance Geofence exceptions Unplanned equipment idle time" } ``` ## search-destination · Operate the network from tower to doorstep - Identity: `search-destination:Solution:solution:telecom-network-care` - Canonical: https://developer.mappls.com/use-cases/telecom-network-care ```json { "id": "solution:telecom-network-care", "kind": "Solution", "title": "Operate the network from tower to doorstep", "description": "Link network assets, alarms, field teams, and customer impact spatially.", "href": "/use-cases/telecom-network-care", "eyebrow": "Telecommunications", "keywords": "Faster restoration with better prioritization and fewer repeat dispatches. gis-analytics workmate routes-navigation capture-feedback Network operations engineer Alarm correlator Field dispatcher Technician Customer-impact manager Model towers, links, cabinets, and service areas Correlate alarms with impacted customers Create skill-aware repair tasks Navigate and capture repair proof Analyze chronic failure clusters Mean time to repair Customers restored per action Truck rolls Repeat alarm rate" } ``` ## search-destination · Field-service task lifecycle - Identity: `search-destination:Journey:journey:field-service-task` - Canonical: https://developer.mappls.com/journeys/field-service-task ```json { "id": "journey:field-service-task", "kind": "Journey", "title": "Field-service task lifecycle", "description": "Create, assign, accept, travel, prove, approve, and close a field job without losing actor, retry, or evidence history.", "href": "/journeys/field-service-task", "eyebrow": "stateful · task", "keywords": "workmate Dispatcher Field worker Supervisor Integration service unassigned Unassigned assigned Assigned accepted Accepted en_route En route in_progress In progress proof_pending Proof pending completed Completed cancelled Cancelled create_task task.created assign task.assigned accept task.accepted start_travel task.en_route arrive task.started submit_proof task.proof_submitted approve_proof task.completed reject_proof task.proof_rejected One upstream external job maps to one durable task aggregate. Only the assigned worker can accept, travel, arrive, or submit proof unless an attributable override is recorded. Every command carries tenant, actor, idempotency key, expected version, and occurrence time. Completion is impossible until the declared proof policy passes. Task history is append-only; corrections use new events or compensating work." } ``` ## search-destination · Connected fleet trip - Identity: `search-destination:Journey:journey:connected-fleet-trip` - Canonical: https://developer.mappls.com/journeys/connected-fleet-trip ```json { "id": "journey:connected-fleet-trip", "kind": "Journey", "title": "Connected fleet trip", "description": "Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.", "href": "/journeys/connected-fleet-trip", "eyebrow": "stateful · trip", "keywords": "intouch-telematics Fleet planner Driver Operations controller Telematics service planned Planned ready Ready active Active exception Exception closing Closing closed Closed create_trip trip.created confirm_device_ready trip.ready start_trip trip.started raise_exception trip.exception_raised resolve_exception trip.exception_resolved request_close trip.close_requested close_trip trip.closed 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." } ``` ## search-destination · Fleet geofence exception - Identity: `search-destination:Journey:journey:fleet-geofence-exception` - Canonical: https://developer.mappls.com/journeys/fleet-geofence-exception ```json { "id": "journey:fleet-geofence-exception", "kind": "Journey", "title": "Fleet geofence exception", "description": "Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.", "href": "/journeys/fleet-geofence-exception", "eyebrow": "stateful · geofence case", "keywords": "intouch-telematics Fleet administrator Telematics service Operations controller Compliance reviewer draft Draft active Active breached Breached acknowledged Acknowledged resolved Resolved retired Retired publish_geofence geofence.published record_breach geofence.breached acknowledge_case geofence_case.acknowledged resolve_case geofence_case.resolved retire_geofence geofence.retired 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." } ``` ## search-destination · Coordinated incident response - Identity: `search-destination:Journey:journey:emergency-incident-response` - Canonical: https://developer.mappls.com/journeys/emergency-incident-response ```json { "id": "journey:emergency-incident-response", "kind": "Journey", "title": "Coordinated incident response", "description": "Resolve an incident location, select a capable available responder, route and observe the unit, adapt to hazards, establish arrival, resolve with evidence, and review every decision.", "href": "/journeys/emergency-incident-response", "eyebrow": "stateful · incident", "keywords": "routes-navigation Call taker Dispatcher Responder Incident commander Telematics service reported Reported located Located dispatched Dispatched en_route En route on_scene On scene resolved Resolved reviewed Reviewed report_incident incident.reported resolve_location incident.located dispatch incident.dispatched accept_dispatch dispatch.accepted record_position unit.position_recorded confirm_arrival incident.arrived resolve incident.resolved review incident.reviewed One external report maps to one incident aggregate. Only available units with the required capability are eligible for ranking. A unit is assigned to at most one active incident in the same operational context. Only the assigned unit can accept dispatch and publish operational telemetry. Raw telemetry preserves event and receipt time; late evidence never regresses latest state. Arrival requires explicit distance, speed, and dwell evidence. Resolution cannot occur without external evidence references." } ``` ## search-destination · Recoverable navigation session - Identity: `search-destination:Journey:journey:navigation-session` - Canonical: https://developer.mappls.com/journeys/navigation-session ```json { "id": "journey:navigation-session", "kind": "Journey", "title": "Recoverable navigation session", "description": "Move from route intent through preview, guidance, reroute, arrival, and cleanup while surviving process, sensor, and network interruption.", "href": "/journeys/navigation-session", "eyebrow": "hybrid · navigation session", "keywords": "routes-navigation Driver Navigation application Mappls navigation SDK Operations backend draft Draft preview Preview navigating Navigating rerouting Rerouting arrived Arrived ended Ended calculate_route route.calculated start_guidance navigation.started request_reroute reroute.requested accept_reroute route.updated confirm_arrival navigation.arrived end_session navigation.ended Only one guidance session owns foreground navigation resources at a time. Every route result is applied only to the intent version that requested it. The last valid route remains available while a reroute is pending. Arrival requires an explicit distance, speed, dwell, and stop policy. End releases every observer, sensor, audio, and service resource exactly once in effect." } ``` ## search-destination · Governed spatial analysis - Identity: `search-destination:Journey:journey:governed-spatial-analysis` - Canonical: https://developer.mappls.com/journeys/governed-spatial-analysis ```json { "id": "journey:governed-spatial-analysis", "kind": "Journey", "title": "Governed spatial analysis", "description": "Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.", "href": "/journeys/governed-spatial-analysis", "eyebrow": "hybrid · analysis run", "keywords": "gis-analytics Data engineer Spatial analyst Workspace administrator Decision consumer draft Draft validating Validating published Published processing Processing ready Ready shared Shared failed Failed create_dataset_version dataset.version_created validate dataset.validation_started publish dataset.published run_analysis analysis.started complete_analysis analysis.completed create_share share.created Published input and output versions are immutable. Every output records exact input versions, parameters, runtime, and actor. Workspace authorization applies separately to source, job, output, visualization, and share. A retry is linked to its previous attempt and never overwrites it. Revoking a share does not destroy dataset or analysis lineage." } ``` ## search-destination · Durable multi-stop itinerary - Identity: `search-destination:Journey:journey:durable-weekend-itinerary` - Canonical: https://developer.mappls.com/journeys/durable-weekend-itinerary ```json { "id": "journey:durable-weekend-itinerary", "kind": "Journey", "title": "Durable multi-stop itinerary", "description": "Discover provider-backed places, preserve their Mappls Pins in a versioned itinerary, preview the exact ordered route, invalidate stale plans on edits, and retain visit or skip progress through completion.", "href": "/journeys/durable-weekend-itinerary", "eyebrow": "hybrid · trip itinerary", "keywords": "routes-navigation Traveller Collaborator Mappls discovery service Mappls routing service draft Draft planned Planned active Active paused Paused completed Completed cancelled Cancelled create_trip trip.created add_or_reorder_stop trip.sequence_changed preview_route trip.route_previewed start_trip trip.started pause_trip trip.paused resume_trip trip.resumed visit_or_skip_next trip.stop_completed complete_trip trip.completed cancel_trip trip.cancelled Every saved stop originated from provider-backed discovery and retains its Mappls Pin and provenance. A Mappls Pin occurs at most once in an itinerary. A route revision is valid only for the exact ordered stop list and constraints that produced it. Only the next pending stop may receive a visit or skip outcome. Completion is impossible while any stop remains pending. Commands are idempotent and compare the expected trip version." } ``` ## search-destination · Consented address verification - Identity: `search-destination:Journey:journey:consented-address-verification` - Canonical: https://developer.mappls.com/journeys/consented-address-verification ```json { "id": "journey:consented-address-verification", "kind": "Journey", "title": "Consented address verification", "description": "Normalize a declared service address, capture purpose-bound device evidence, apply an explainable versioned policy, require human review where evidence is weak, and retire precise data without erasing accountability.", "href": "/journeys/consented-address-verification", "eyebrow": "stateful · address verification", "keywords": "search-places Application user Evidence capture application Policy service Human reviewer Privacy service entered Entered normalized Normalized capture_authorized Capture authorized evidence_captured Evidence captured compared Compared review_required Review required verified Verified rejected Rejected cancelled Cancelled enter_verification address_verification.entered normalize_address address_verification.normalized authorize_capture address_verification.capture_authorized revoke_consent address_verification.consent_revoked capture_evidence address_verification.evidence_captured compare address_verification.compared verify address_verification.verified reject address_verification.rejected defer address_verification.review_required review_verify address_verification.verified review_reject address_verification.rejected One external business reference maps to one verification aggregate. Precise evidence is accepted only under active consent for the exact declared purpose and time window. Provider normalization and application policy are identified separately. An automated actor cannot override its own policy recommendation. Every terminal outcome retains evidence hash, policy version, actor, and attributable reason. Precise evidence can be redacted without erasing the audit trail or claiming that retained hashes can reconstruct it." } ``` ## search-destination · Governed spatial agent run - Identity: `search-destination:Journey:journey:governed-spatial-agent-run` - Canonical: https://developer.mappls.com/journeys/governed-spatial-agent-run ```json { "id": "journey:governed-spatial-agent-run", "kind": "Journey", "title": "Governed spatial agent run", "description": "Turn a natural-language spatial objective into an inspectable plan, obtain an exact least-privilege approval, execute allow-listed Mappls tools, and cite provider evidence without exposing credentials to the model.", "href": "/journeys/governed-spatial-agent-run", "eyebrow": "stateful · agent run", "keywords": "ai-location Application user Agent planner Human approver Execution service Mappls MCP server asked Asked planned Planned approved Approved executing Executing completed Completed rejected Rejected failed Failed ask agent.question_received create_plan agent.plan_created approve_plan agent.plan_approved reject_plan agent.plan_rejected start_execution agent.execution_started complete_execution agent.execution_completed The model never receives Mappls or customer credentials. Only schema-valid allow-listed tools and bounded arguments can enter a plan. Approval names the canonical immutable plan hash and every required scope. An expired, superseded, partially scoped, or self-approved plan cannot execute. Every factual provider claim is traceable to retained Mappls provenance. Tool failures and persisted evidence never expose secrets." } ``` ## search-destination · Offline automotive release - Identity: `search-destination:Journey:journey:offline-automotive-release` - Canonical: https://developer.mappls.com/journeys/offline-automotive-release ```json { "id": "journey:offline-automotive-release", "kind": "Journey", "title": "Offline automotive release", "description": "Manufacture, activate, install, operate, update, recover, and retire a navigation runtime and map-data release as one compatible system.", "href": "/journeys/offline-automotive-release", "eyebrow": "stateful · device release", "keywords": "offline-automotive Manufacturing system Fleet release manager Vehicle runtime Support engineer manufactured Manufactured activated Activated installed Installed operational Operational updating Updating recovering Recovering retired Retired register_device device.registered activate license.activated stage_base_release release.installed qualify release.qualified start_update release.update_started rollback release.rollback_started retire device.retired Runtime, map data, configuration, and voice assets are qualified as one compatible manifest. Only a verified inactive slot may replace the active slot. Power loss at any update point leaves one bootable known-good slot. Activation identity and secrets are distinct from vehicle business identity. Retirement revokes protected access without erasing support and release history." } ``` ## search-destination · Application-owned widget selection - Identity: `search-destination:Journey:journey:widget-selection-session` - Canonical: https://developer.mappls.com/journeys/widget-selection-session ```json { "id": "journey:widget-selection-session", "kind": "Journey", "title": "Application-owned widget selection", "description": "Launch a Mappls widget, recover through a useful fallback, validate a narrow candidate, commit it deliberately, invalidate stale selection, and submit one durable business record.", "href": "/journeys/widget-selection-session", "eyebrow": "hybrid · widget selection session", "keywords": "app-widgets-deep-links Application user Host application Platform adapter Mappls widget draft Draft widget_open Widget open fallback_active Fallback active candidate_received Candidate received selected Selected submitted Submitted cancelled Cancelled create_session host.session_created open_widget widget.opened activate_fallback widget.fallback_activated receive_candidate location.candidate_received accept_selection location.selected edit_host_text host.text_edited submit host.submitted cancel host.cancelled A provider callback or browser message creates only a candidate, never a submitted business record. Every browser message matches the exact reviewed origin and a versioned allow-listed schema. Only a six-character alphanumeric Mappls Pin and bounded printable label enter durable selection state. A host-text edit invalidates every candidate and committed selection from the previous draft version. One launch generation produces at most one terminal adapter outcome; late callbacks are ignored. Credentials, provider controllers, native views, bridge objects, and opaque response payloads are never persisted." } ``` ## search-destination · iOS direction planning and navigation handoff - Identity: `search-destination:Journey:journey:ios-direction-planning-handoff` - Canonical: https://developer.mappls.com/journeys/ios-direction-planning-handoff ```json { "id": "journey:ios-direction-planning-handoff", "kind": "Journey", "title": "iOS direction planning and navigation handoff", "description": "Own route intent and revisions in the host app, present MapplsDirectionUI for editing and calculation, validate the selected route callback, and hand off to navigation without confusing a UI request with a started or completed trip.", "href": "/journeys/ios-direction-planning-handoff", "eyebrow": "hybrid · route planning session", "keywords": "routes-navigation Traveler Host application MapplsDirectionUI Navigation adapter draft Draft editing Editing calculating Calculating candidates_ready Candidates ready selected Selected handoff_pending Handoff pending handed_off Handed off cancelled Cancelled create_plan route_plan.created open_direction_ui route_plan.editor_opened request_routes route_plan.calculation_requested receive_routes route_plan.candidates_received select_route route_plan.route_selected request_navigation route_plan.navigation_requested confirm_handoff route_plan.navigation_handed_off cancel_plan route_plan.cancelled Stops, options, route candidates, and selection share one explicit revision. A selected index is validated before dereferencing its Route candidate. The provider controller and opaque Route objects never become durable application records. The start-navigation callback expresses intent, not proof that navigation started or completed. One presentation generation produces at most one terminal handoff or cancellation. Credentials and unrestricted location histories never enter route-planning audit events." } ``` ## search-destination · iOS geofence draft and publication boundary - Identity: `search-destination:Journey:journey:ios-geofence-draft` - Canonical: https://developer.mappls.com/journeys/ios-geofence-draft ```json { "id": "journey:ios-geofence-draft", "kind": "Journey", "title": "iOS geofence draft and publication boundary", "description": "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.", "href": "/journeys/ios-geofence-draft", "eyebrow": "hybrid · geofence draft", "keywords": "intouch-telematics Operations author Host application MapplsGeofenceUI Geofence reviewer Rule-publication adapter draft Draft editing Editing candidate Candidate review_pending Review pending approved_draft Approved draft cancelled Cancelled create_geofence_draft geofence_draft.created open_editor geofence_draft.editor_opened receive_geometry geofence_draft.geometry_received submit_for_review geofence_draft.review_requested approve_draft geofence_draft.approved cancel_edit geofence_draft.cancelled 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." } ``` ## search-destination · iOS feedback report and review - Identity: `search-destination:Journey:journey:ios-feedback-report-review` - Canonical: https://developer.mappls.com/journeys/ios-feedback-report-review ```json { "id": "journey:ios-feedback-report-review", "kind": "Journey", "title": "iOS feedback report and review", "description": "Open one feedback UI generation, normalize a bounded report candidate, commit an application submission, reconcile provider acknowledgement separately, review evidence, and close only with an attributable resolution.", "href": "/journeys/ios-feedback-report-review", "eyebrow": "hybrid · feedback report", "keywords": "capture-feedback Contributor Host application Mappls Feedback Kit Provider adapter Operations reviewer draft Draft capturing Capturing candidate Candidate submitted Submitted provider_pending Provider pending review_pending Review pending resolved Resolved rejected Rejected cancelled Cancelled create_report feedback_report.created open_feedback_ui feedback_report.ui_opened receive_candidate feedback_report.candidate_received commit_submission feedback_report.submitted request_provider_submission feedback_report.provider_requested queue_review feedback_report.review_queued resolve_report feedback_report.resolved reject_report feedback_report.rejected cancel_report feedback_report.cancelled A UI callback creates only a candidate; it cannot prove application submission, provider receipt, publication, or resolution. One presentation generation produces at most one accepted terminal result and all late callbacks are ignored. Every submission revision is immutable and content-hashed; rework creates a new linked attempt. Provider acknowledgement and reviewer disposition are separate attributable records. Credentials, view controllers, delegates, attachment bodies, and opaque provider payloads never enter durable state. Idempotency, optimistic concurrency, audit, outbox, privacy purpose, retention, and redaction apply to every committed transition." } ``` ## search-destination · Consent-bound location capture evidence - Identity: `search-destination:Journey:journey:location-capture-evidence` - Canonical: https://developer.mappls.com/journeys/location-capture-evidence ```json { "id": "journey:location-capture-evidence", "kind": "Journey", "title": "Consent-bound location capture evidence", "description": "Initialize and configure an entitled Location Capture SDK, acquire a bounded single or subscribed fix, preserve accuracy and timing as evidence, review weak results, and stop every native resource deterministically.", "href": "/journeys/location-capture-evidence", "eyebrow": "hybrid · location capture attempt", "keywords": "capture-feedback Application user Host application Platform adapter Evidence reviewer Mappls Location Capture SDK draft Draft permission_pending Permission pending ready Ready acquiring Acquiring candidate Candidate review_pending Review pending accepted Accepted cancelled Cancelled create_attempt location_capture.attempt_created request_permission location_capture.permission_requested prepare_sdk location_capture.sdk_ready start_acquisition location_capture.acquisition_started receive_location location_capture.candidate_received queue_review location_capture.review_queued accept_evidence location_capture.evidence_accepted approve_weak_evidence location_capture.weak_evidence_approved cancel_attempt location_capture.attempt_cancelled A permission grant is not consent for every purpose; purpose, policy, and retention are recorded separately. One acquisition generation owns one callback family, timeout, stop, and unsubscribe lifecycle. Accuracy, event time, receipt time, and policy result remain attached to the normalized coordinates. A callback creates a candidate, never an accepted business decision. Weak or stale evidence cannot pass an automatic acceptance threshold by omitting quality fields. Credentials, native manager instances, full opaque payloads, and callback closures never enter durable storage." } ``` ## search-destination · Governed place contribution and publication - Identity: `search-destination:Journey:journey:place-contribution-publication` - Canonical: https://developer.mappls.com/journeys/place-contribution-publication ```json { "id": "journey:place-contribution-publication", "kind": "Journey", "title": "Governed place contribution and publication", "description": "Embed the credential-free Add a Place surface, record what the user reports, reconcile independently, and call a place published only when durable provider-backed evidence exists.", "href": "/journeys/place-contribution-publication", "eyebrow": "stateful · place contribution", "keywords": "capture-feedback Contributor Host application Operations reviewer Mappls hosted widget and search draft Draft widget_open Widget open submission_reported Submission reported publication_pending Publication pending published Published rejected Rejected withdrawn Withdrawn create_contribution place_contribution.created open_widget place_contribution.widget_opened report_submission place_contribution.submission_reported queue_reconciliation place_contribution.reconciliation_queued confirm_publication place_contribution.published reject place_contribution.rejected retry place_contribution.retried withdraw place_contribution.withdrawn A hosted success screen or contributor report never proves publication. No callback, browser message, receipt, moderation status, or withdrawal capability is invented when the public source does not document it. Only provider-backed evidence containing a valid Mappls Pin can close the aggregate as published. Every widget attempt is immutable and linked to the aggregate version that opened it. Commands are idempotent, compare expected version, and commit audit plus outbox atomically. Contribution text, actor identity, and precise location follow declared purpose, access, and retention boundaries." } ``` ## search-destination · Entitled RealView remote inspection - Identity: `search-destination:Journey:journey:realview-remote-inspection` - Canonical: https://developer.mappls.com/journeys/realview-remote-inspection ```json { "id": "journey:realview-remote-inspection", "kind": "Journey", "title": "Entitled RealView remote inspection", "description": "Qualify paid RealView entitlement, open one browser-visible-token viewer attempt, handle the documented no-imagery signal safely, and turn human observations into a reviewed business record without inventing panorama metadata.", "href": "/journeys/realview-remote-inspection", "eyebrow": "stateful · remote visual inspection", "keywords": "app-widgets-deep-links Inspector Inspection reviewer Platform administrator Host application Mappls RealView widget draft Draft entitlement_pending Entitlement pending ready Ready viewing Viewing coverage_unavailable Coverage unavailable observation_recorded Observation recorded review_pending Review pending accepted Accepted rework_required Rework required cancelled Cancelled create_inspection realview_inspection.created request_entitlement realview_inspection.entitlement_requested confirm_entitlement realview_inspection.entitlement_confirmed open_viewer realview_inspection.viewer_opened record_no_coverage realview_inspection.coverage_unavailable record_observation realview_inspection.observation_recorded submit_review realview_inspection.review_requested accept realview_inspection.accepted request_rework realview_inspection.rework_requested record_entitlement_expired realview_inspection.entitlement_expired cancel realview_inspection.cancelled No server secret, browser token value, or complete token-bearing iframe URL is persisted, logged, analyzed, exported, or sent to a model. The exact selected origin and narrow documented schema are checked before any browser message reaches domain state. Status 204 proves only no imagery for one attempt and configuration; HTTP 200 and frame load prove only a delivered shell. Human observation is distinct from provider imagery, panorama metadata, measurement, currentness, and inspection acceptance. Imagery is not copied, screenshotted, exported, or retained without an explicit licensed product contract and purpose-specific policy. Every command is idempotent, compares expected version, and commits snapshot, audit, receipt, and outbox atomically. Reviewer acceptance is attributable and cannot be performed by the same automated actor that created the observation." } ``` ## search-destination · Governed SkyDNN inference review - Identity: `search-destination:Journey:journey:vision-inference-review` - Canonical: https://developer.mappls.com/journeys/vision-inference-review ```json { "id": "journey:vision-inference-review", "kind": "Journey", "title": "Governed SkyDNN inference review", "description": "Lock an entitled model to an immutable asset identity, call the documented synchronous prediction boundary, validate geometry and confidence, require independent review, and redact derived detections on schedule.", "href": "/journeys/vision-inference-review", "eyebrow": "stateful · vision evidence case", "keywords": "ai-location Asset steward Vision worker Policy service Independent reviewer Privacy worker Mappls SkyDNN API registered Registered model_locked Model locked inference_requested Inference requested inferred Inferred review_pending Review pending accepted Accepted rejected Rejected redacted Redacted register_case vision.case_registered lock_model vision.model_locked request_inference vision.inference_requested record_inference vision.inference_recorded submit_review vision.review_requested accept vision.accepted reject vision.rejected redact vision.redacted No image bytes, media URL, bearer token, credential, face, number plate, or provider-internal file path enters the reference case store. The provider POST /predict call is synchronous; application queue, review, retry, decision, and retention states are never attributed to SkyDNN. Every attempt binds an immutable asset hash to one discovered model fingerprint and policy version. Confidence and geometry are evidence, not a business outcome or live safety command. Reviewer identity is independent from the fixture inference actor and every override or rejection has a reason. Idempotency, optimistic versions, audit, receipts, and outbox commit atomically." } ``` ## search-destination · Build Field-service task lifecycle - Identity: `search-destination:Journey workshop:journey-workshop:field-service-task` - Canonical: https://developer.mappls.com/journeys/field-service-task/workshop ```json { "id": "journey-workshop:field-service-task", "kind": "Journey workshop", "title": "Build Field-service task lifecycle", "description": "An eight-lab, source-bounded workshop for the complete task lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/field-service-task/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "workmate task Field Service Console Model the lifecycle before the UI Turn the task blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Field Service Console capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 8 reviewed transitions are implemented with actor and source-state checks. All 8 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Field Service Console capstone passes 6 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Connected fleet trip - Identity: `search-destination:Journey workshop:journey-workshop:connected-fleet-trip` - Canonical: https://developer.mappls.com/journeys/connected-fleet-trip/workshop ```json { "id": "journey-workshop:connected-fleet-trip", "kind": "Journey workshop", "title": "Build Connected fleet trip", "description": "An eight-lab, source-bounded workshop for the complete trip lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/connected-fleet-trip/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "intouch-telematics trip Delivery Control Tower Model the lifecycle before the UI Turn the trip blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Delivery Control Tower capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 7 reviewed transitions are implemented with actor and source-state checks. All 7 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Delivery Control Tower capstone passes 7 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Fleet geofence exception - Identity: `search-destination:Journey workshop:journey-workshop:fleet-geofence-exception` - Canonical: https://developer.mappls.com/journeys/fleet-geofence-exception/workshop ```json { "id": "journey-workshop:fleet-geofence-exception", "kind": "Journey workshop", "title": "Build Fleet geofence exception", "description": "An eight-lab, source-bounded workshop for the complete geofence case lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/fleet-geofence-exception/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "intouch-telematics geofence case Fleet Geofence Monitor Model the lifecycle before the UI Turn the geofence case blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Fleet Geofence Monitor capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 5 reviewed transitions are implemented with actor and source-state checks. All 5 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Fleet Geofence Monitor capstone passes 7 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Coordinated incident response - Identity: `search-destination:Journey workshop:journey-workshop:emergency-incident-response` - Canonical: https://developer.mappls.com/journeys/emergency-incident-response/workshop ```json { "id": "journey-workshop:emergency-incident-response", "kind": "Journey workshop", "title": "Build Coordinated incident response", "description": "An eight-lab, source-bounded workshop for the complete incident lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/emergency-incident-response/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "routes-navigation incident Incident Dispatch Model the lifecycle before the UI Turn the incident blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Incident Dispatch capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 8 reviewed transitions are implemented with actor and source-state checks. All 8 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Incident Dispatch capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Recoverable navigation session - Identity: `search-destination:Journey workshop:journey-workshop:navigation-session` - Canonical: https://developer.mappls.com/journeys/navigation-session/workshop ```json { "id": "journey-workshop:navigation-session", "kind": "Journey workshop", "title": "Build Recoverable navigation session", "description": "An eight-lab, source-bounded workshop for the complete navigation session lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/navigation-session/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "routes-navigation navigation session Weekend Trip Planner Model the lifecycle before the UI Turn the navigation session blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Weekend Trip Planner capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 6 reviewed transitions are implemented with actor and source-state checks. All 6 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Weekend Trip Planner capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Governed spatial analysis - Identity: `search-destination:Journey workshop:journey-workshop:governed-spatial-analysis` - Canonical: https://developer.mappls.com/journeys/governed-spatial-analysis/workshop ```json { "id": "journey-workshop:governed-spatial-analysis", "kind": "Journey workshop", "title": "Build Governed spatial analysis", "description": "An eight-lab, source-bounded workshop for the complete analysis run lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/governed-spatial-analysis/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "gis-analytics analysis run Retail Site Lab Model the lifecycle before the UI Turn the analysis run blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Retail Site Lab capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 6 reviewed transitions are implemented with actor and source-state checks. All 6 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Retail Site Lab capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Durable multi-stop itinerary - Identity: `search-destination:Journey workshop:journey-workshop:durable-weekend-itinerary` - Canonical: https://developer.mappls.com/journeys/durable-weekend-itinerary/workshop ```json { "id": "journey-workshop:durable-weekend-itinerary", "kind": "Journey workshop", "title": "Build Durable multi-stop itinerary", "description": "An eight-lab, source-bounded workshop for the complete trip itinerary lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/durable-weekend-itinerary/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "routes-navigation trip itinerary Weekend Trip Planner Model the lifecycle before the UI Turn the trip itinerary blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Weekend Trip Planner capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 9 reviewed transitions are implemented with actor and source-state checks. All 9 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Weekend Trip Planner capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Consented address verification - Identity: `search-destination:Journey workshop:journey-workshop:consented-address-verification` - Canonical: https://developer.mappls.com/journeys/consented-address-verification/workshop ```json { "id": "journey-workshop:consented-address-verification", "kind": "Journey workshop", "title": "Build Consented address verification", "description": "An eight-lab, source-bounded workshop for the complete address verification lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/consented-address-verification/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "search-places address verification Address Verifier Model the lifecycle before the UI Turn the address verification blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Address Verifier capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 11 reviewed transitions are implemented with actor and source-state checks. All 9 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Address Verifier capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Governed spatial agent run - Identity: `search-destination:Journey workshop:journey-workshop:governed-spatial-agent-run` - Canonical: https://developer.mappls.com/journeys/governed-spatial-agent-run/workshop ```json { "id": "journey-workshop:governed-spatial-agent-run", "kind": "Journey workshop", "title": "Build Governed spatial agent run", "description": "An eight-lab, source-bounded workshop for the complete agent run lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/governed-spatial-agent-run/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "ai-location agent run Spatial Operations Agent Model the lifecycle before the UI Turn the agent run blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Spatial Operations Agent capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 6 reviewed transitions are implemented with actor and source-state checks. All 6 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Spatial Operations Agent capstone passes 15 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Offline automotive release - Identity: `search-destination:Journey workshop:journey-workshop:offline-automotive-release` - Canonical: https://developer.mappls.com/journeys/offline-automotive-release/workshop ```json { "id": "journey-workshop:offline-automotive-release", "kind": "Journey workshop", "title": "Build Offline automotive release", "description": "An eight-lab, source-bounded workshop for the complete device release lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/offline-automotive-release/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "offline-automotive device release Offline Release Control Model the lifecycle before the UI Turn the device release blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Offline Release Control capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 7 reviewed transitions are implemented with actor and source-state checks. All 7 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Offline Release Control capstone passes 10 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Application-owned widget selection - Identity: `search-destination:Journey workshop:journey-workshop:widget-selection-session` - Canonical: https://developer.mappls.com/journeys/widget-selection-session/workshop ```json { "id": "journey-workshop:widget-selection-session", "kind": "Journey workshop", "title": "Build Application-owned widget selection", "description": "An eight-lab, source-bounded workshop for the complete widget selection session lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/widget-selection-session/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "app-widgets-deep-links widget selection session Widget Journey Host Model the lifecycle before the UI Turn the widget selection session blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Widget Journey Host capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 8 reviewed transitions are implemented with actor and source-state checks. All 8 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Widget Journey Host capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build iOS direction planning and navigation handoff - Identity: `search-destination:Journey workshop:journey-workshop:ios-direction-planning-handoff` - Canonical: https://developer.mappls.com/journeys/ios-direction-planning-handoff/workshop ```json { "id": "journey-workshop:ios-direction-planning-handoff", "kind": "Journey workshop", "title": "Build iOS direction planning and navigation handoff", "description": "An eight-lab, source-bounded workshop for the complete route planning session lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/ios-direction-planning-handoff/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "routes-navigation route planning session Deep-link & Native UI Journey Host Model the lifecycle before the UI Turn the route planning session blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Deep-link & Native UI Journey Host capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 8 reviewed transitions are implemented with actor and source-state checks. All 8 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Deep-link & Native UI Journey Host capstone passes 11 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build iOS geofence draft and publication boundary - Identity: `search-destination:Journey workshop:journey-workshop:ios-geofence-draft` - Canonical: https://developer.mappls.com/journeys/ios-geofence-draft/workshop ```json { "id": "journey-workshop:ios-geofence-draft", "kind": "Journey workshop", "title": "Build iOS geofence draft and publication boundary", "description": "An eight-lab, source-bounded workshop for the complete geofence draft lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/ios-geofence-draft/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "intouch-telematics geofence draft Deep-link & Native UI Journey Host Model the lifecycle before the UI Turn the geofence draft blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Deep-link & Native UI Journey Host capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 6 reviewed transitions are implemented with actor and source-state checks. All 6 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Deep-link & Native UI Journey Host capstone passes 11 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build iOS feedback report and review - Identity: `search-destination:Journey workshop:journey-workshop:ios-feedback-report-review` - Canonical: https://developer.mappls.com/journeys/ios-feedback-report-review/workshop ```json { "id": "journey-workshop:ios-feedback-report-review", "kind": "Journey workshop", "title": "Build iOS feedback report and review", "description": "An eight-lab, source-bounded workshop for the complete feedback report lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/ios-feedback-report-review/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "capture-feedback feedback report Place Contribution Desk Model the lifecycle before the UI Turn the feedback report blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Place Contribution Desk capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 9 reviewed transitions are implemented with actor and source-state checks. All 9 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Place Contribution Desk capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Consent-bound location capture evidence - Identity: `search-destination:Journey workshop:journey-workshop:location-capture-evidence` - Canonical: https://developer.mappls.com/journeys/location-capture-evidence/workshop ```json { "id": "journey-workshop:location-capture-evidence", "kind": "Journey workshop", "title": "Build Consent-bound location capture evidence", "description": "An eight-lab, source-bounded workshop for the complete location capture attempt lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/location-capture-evidence/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "capture-feedback location capture attempt Address Verifier Model the lifecycle before the UI Turn the location capture attempt blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Address Verifier capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 9 reviewed transitions are implemented with actor and source-state checks. All 9 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Address Verifier capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Governed place contribution and publication - Identity: `search-destination:Journey workshop:journey-workshop:place-contribution-publication` - Canonical: https://developer.mappls.com/journeys/place-contribution-publication/workshop ```json { "id": "journey-workshop:place-contribution-publication", "kind": "Journey workshop", "title": "Build Governed place contribution and publication", "description": "An eight-lab, source-bounded workshop for the complete place contribution lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/place-contribution-publication/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "capture-feedback place contribution Place Contribution Desk Model the lifecycle before the UI Turn the place contribution blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Place Contribution Desk capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 8 reviewed transitions are implemented with actor and source-state checks. All 8 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Place Contribution Desk capstone passes 8 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Entitled RealView remote inspection - Identity: `search-destination:Journey workshop:journey-workshop:realview-remote-inspection` - Canonical: https://developer.mappls.com/journeys/realview-remote-inspection/workshop ```json { "id": "journey-workshop:realview-remote-inspection", "kind": "Journey workshop", "title": "Build Entitled RealView remote inspection", "description": "An eight-lab, source-bounded workshop for the complete remote visual inspection lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/realview-remote-inspection/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "app-widgets-deep-links remote visual inspection RealView Inspection Desk Model the lifecycle before the UI Turn the remote visual inspection blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the RealView Inspection Desk capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 11 reviewed transitions are implemented with actor and source-state checks. All 11 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The RealView Inspection Desk capstone passes 10 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · Build Governed SkyDNN inference review - Identity: `search-destination:Journey workshop:journey-workshop:vision-inference-review` - Canonical: https://developer.mappls.com/journeys/vision-inference-review/workshop ```json { "id": "journey-workshop:vision-inference-review", "kind": "Journey workshop", "title": "Build Governed SkyDNN inference review", "description": "An eight-lab, source-bounded workshop for the complete vision evidence case lifecycle: exact commands and events, durable records, replay, concurrency, unknown outcomes, hostile fixtures, a maintained capstone, and production exit evidence.", "href": "/journeys/vision-inference-review/workshop", "eyebrow": "8 labs · 2 hr 10 min", "keywords": "ai-location vision evidence case Vision Evidence Desk Model the lifecycle before the UI Turn the vision evidence case blueprint into an explicit aggregate boundary owned by the application. Implement every command and event pair Make intent, actor authority, allowed source state, committed state, and emitted fact reviewable together. Persist restart-safe records Separate business identity, provider evidence, command receipts, immutable facts, audit, and downstream delivery. Make concurrency and replay deterministic Apply optimistic expected versions and aggregate-scoped idempotency before executing effects. Control effects and unknown outcomes Commit outbox intent atomically, execute effects outside the transaction, and reconcile ambiguous results. Run all hostile fixture scenarios Exercise the success path plus replay, concurrency, state, and response-loss failures without an account. Trace the Vision Evidence Desk capstone Follow the maintained source through domain rules, adapter seam, repository transaction, HTTP boundary, UI evidence, and restart test. Qualify the real integration boundary Replace only reviewed adapter seams and collect independent production evidence without weakening application invariants. All 8 reviewed transitions are implemented with actor and source-state checks. All 8 application event identities are immutable and versioned. Exact replay, idempotency conflict, stale version, invalid transition, and unknown outcome are tested. Aggregate, event, audit, command result, and outbox intent commit atomically. The Vision Evidence Desk capstone passes 10 declared tests after archive checksum verification. Provider entitlement, payload, callback, completion, and production behavior remain independently evidenced." } ``` ## search-destination · task.created - Identity: `search-destination:Event:event:field-service-task-task-created` - Canonical: https://developer.mappls.com/events/field-service-task-task-created ```json { "id": "event:field-service-task-task-created", "kind": "Event", "title": "task.created", "description": "Application-owned task fact emitted after create_task reaches unassigned.", "href": "/events/field-service-task-task-created", "eyebrow": "stateful · task · v1", "keywords": "Task Created field-service-task Field-service task lifecycle workmate create_task Integration service unassigned outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.assigned - Identity: `search-destination:Event:event:field-service-task-task-assigned` - Canonical: https://developer.mappls.com/events/field-service-task-task-assigned ```json { "id": "event:field-service-task-task-assigned", "kind": "Event", "title": "task.assigned", "description": "Application-owned task fact emitted after assign reaches assigned.", "href": "/events/field-service-task-task-assigned", "eyebrow": "stateful · task · v1", "keywords": "Task Assigned field-service-task Field-service task lifecycle workmate assign Dispatcher unassigned assigned assigned outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.accepted - Identity: `search-destination:Event:event:field-service-task-task-accepted` - Canonical: https://developer.mappls.com/events/field-service-task-task-accepted ```json { "id": "event:field-service-task-task-accepted", "kind": "Event", "title": "task.accepted", "description": "Application-owned task fact emitted after accept reaches accepted.", "href": "/events/field-service-task-task-accepted", "eyebrow": "stateful · task · v1", "keywords": "Task Accepted field-service-task Field-service task lifecycle workmate accept Field worker assigned accepted outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.en_route - Identity: `search-destination:Event:event:field-service-task-task-en-route` - Canonical: https://developer.mappls.com/events/field-service-task-task-en-route ```json { "id": "event:field-service-task-task-en-route", "kind": "Event", "title": "task.en_route", "description": "Application-owned task fact emitted after start_travel reaches en_route.", "href": "/events/field-service-task-task-en-route", "eyebrow": "stateful · task · v1", "keywords": "Task En Route field-service-task Field-service task lifecycle workmate start_travel Field worker accepted en_route outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.started - Identity: `search-destination:Event:event:field-service-task-task-started` - Canonical: https://developer.mappls.com/events/field-service-task-task-started ```json { "id": "event:field-service-task-task-started", "kind": "Event", "title": "task.started", "description": "Application-owned task fact emitted after arrive reaches in_progress.", "href": "/events/field-service-task-task-started", "eyebrow": "stateful · task · v1", "keywords": "Task Started field-service-task Field-service task lifecycle workmate arrive Field worker en_route in_progress outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.proof_submitted - Identity: `search-destination:Event:event:field-service-task-task-proof-submitted` - Canonical: https://developer.mappls.com/events/field-service-task-task-proof-submitted ```json { "id": "event:field-service-task-task-proof-submitted", "kind": "Event", "title": "task.proof_submitted", "description": "Application-owned task fact emitted after submit_proof reaches proof_pending.", "href": "/events/field-service-task-task-proof-submitted", "eyebrow": "stateful · task · v1", "keywords": "Task Proof Submitted field-service-task Field-service task lifecycle workmate submit_proof Field worker in_progress proof_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.completed - Identity: `search-destination:Event:event:field-service-task-task-completed` - Canonical: https://developer.mappls.com/events/field-service-task-task-completed ```json { "id": "event:field-service-task-task-completed", "kind": "Event", "title": "task.completed", "description": "Application-owned task fact emitted after approve_proof reaches completed.", "href": "/events/field-service-task-task-completed", "eyebrow": "stateful · task · v1", "keywords": "Task Completed field-service-task Field-service task lifecycle workmate approve_proof Supervisor proof_pending completed outbox idempotency replay deduplication event schema" } ``` ## search-destination · task.proof_rejected - Identity: `search-destination:Event:event:field-service-task-task-proof-rejected` - Canonical: https://developer.mappls.com/events/field-service-task-task-proof-rejected ```json { "id": "event:field-service-task-task-proof-rejected", "kind": "Event", "title": "task.proof_rejected", "description": "Application-owned task fact emitted after reject_proof reaches in_progress.", "href": "/events/field-service-task-task-proof-rejected", "eyebrow": "stateful · task · v1", "keywords": "Task Proof Rejected field-service-task Field-service task lifecycle workmate reject_proof Supervisor proof_pending in_progress outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.created - Identity: `search-destination:Event:event:connected-fleet-trip-trip-created` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-created ```json { "id": "event:connected-fleet-trip-trip-created", "kind": "Event", "title": "trip.created", "description": "Application-owned trip fact emitted after create_trip reaches planned.", "href": "/events/connected-fleet-trip-trip-created", "eyebrow": "stateful · trip · v1", "keywords": "Trip Created connected-fleet-trip Connected fleet trip intouch-telematics create_trip Fleet planner planned outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.ready - Identity: `search-destination:Event:event:connected-fleet-trip-trip-ready` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-ready ```json { "id": "event:connected-fleet-trip-trip-ready", "kind": "Event", "title": "trip.ready", "description": "Application-owned trip fact emitted after confirm_device_ready reaches ready.", "href": "/events/connected-fleet-trip-trip-ready", "eyebrow": "stateful · trip · v1", "keywords": "Trip Ready connected-fleet-trip Connected fleet trip intouch-telematics confirm_device_ready Telematics service planned ready outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.started - Identity: `search-destination:Event:event:connected-fleet-trip-trip-started` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-started ```json { "id": "event:connected-fleet-trip-trip-started", "kind": "Event", "title": "trip.started", "description": "Application-owned trip fact emitted after start_trip reaches active.", "href": "/events/connected-fleet-trip-trip-started", "eyebrow": "stateful · trip · v1", "keywords": "Trip Started connected-fleet-trip Connected fleet trip intouch-telematics start_trip Driver ready active outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.exception_raised - Identity: `search-destination:Event:event:connected-fleet-trip-trip-exception-raised` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-exception-raised ```json { "id": "event:connected-fleet-trip-trip-exception-raised", "kind": "Event", "title": "trip.exception_raised", "description": "Application-owned trip fact emitted after raise_exception reaches exception.", "href": "/events/connected-fleet-trip-trip-exception-raised", "eyebrow": "stateful · trip · v1", "keywords": "Trip Exception Raised connected-fleet-trip Connected fleet trip intouch-telematics raise_exception Telematics service active exception exception outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.exception_resolved - Identity: `search-destination:Event:event:connected-fleet-trip-trip-exception-resolved` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-exception-resolved ```json { "id": "event:connected-fleet-trip-trip-exception-resolved", "kind": "Event", "title": "trip.exception_resolved", "description": "Application-owned trip fact emitted after resolve_exception reaches active.", "href": "/events/connected-fleet-trip-trip-exception-resolved", "eyebrow": "stateful · trip · v1", "keywords": "Trip Exception Resolved connected-fleet-trip Connected fleet trip intouch-telematics resolve_exception Operations controller exception active outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.close_requested - Identity: `search-destination:Event:event:connected-fleet-trip-trip-close-requested` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-close-requested ```json { "id": "event:connected-fleet-trip-trip-close-requested", "kind": "Event", "title": "trip.close_requested", "description": "Application-owned trip fact emitted after request_close reaches closing.", "href": "/events/connected-fleet-trip-trip-close-requested", "eyebrow": "stateful · trip · v1", "keywords": "Trip Close Requested connected-fleet-trip Connected fleet trip intouch-telematics request_close Driver active exception closing outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.closed - Identity: `search-destination:Event:event:connected-fleet-trip-trip-closed` - Canonical: https://developer.mappls.com/events/connected-fleet-trip-trip-closed ```json { "id": "event:connected-fleet-trip-trip-closed", "kind": "Event", "title": "trip.closed", "description": "Application-owned trip fact emitted after close_trip reaches closed.", "href": "/events/connected-fleet-trip-trip-closed", "eyebrow": "stateful · trip · v1", "keywords": "Trip Closed connected-fleet-trip Connected fleet trip intouch-telematics close_trip Telematics service closing closed outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence.published - Identity: `search-destination:Event:event:fleet-geofence-exception-geofence-published` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-published ```json { "id": "event:fleet-geofence-exception-geofence-published", "kind": "Event", "title": "geofence.published", "description": "Application-owned geofence case fact emitted after publish_geofence reaches active.", "href": "/events/fleet-geofence-exception-geofence-published", "eyebrow": "stateful · geofence case · v1", "keywords": "Geofence Published fleet-geofence-exception Fleet geofence exception intouch-telematics publish_geofence Fleet administrator draft active outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence.breached - Identity: `search-destination:Event:event:fleet-geofence-exception-geofence-breached` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-breached ```json { "id": "event:fleet-geofence-exception-geofence-breached", "kind": "Event", "title": "geofence.breached", "description": "Application-owned geofence case fact emitted after record_breach reaches breached.", "href": "/events/fleet-geofence-exception-geofence-breached", "eyebrow": "stateful · geofence case · v1", "keywords": "Geofence Breached fleet-geofence-exception Fleet geofence exception intouch-telematics record_breach Telematics service active breached breached outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_case.acknowledged - Identity: `search-destination:Event:event:fleet-geofence-exception-geofence-case-acknowledged` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-case-acknowledged ```json { "id": "event:fleet-geofence-exception-geofence-case-acknowledged", "kind": "Event", "title": "geofence_case.acknowledged", "description": "Application-owned geofence case fact emitted after acknowledge_case reaches acknowledged.", "href": "/events/fleet-geofence-exception-geofence-case-acknowledged", "eyebrow": "stateful · geofence case · v1", "keywords": "Geofence Case Acknowledged fleet-geofence-exception Fleet geofence exception intouch-telematics acknowledge_case Operations controller breached acknowledged outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_case.resolved - Identity: `search-destination:Event:event:fleet-geofence-exception-geofence-case-resolved` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-case-resolved ```json { "id": "event:fleet-geofence-exception-geofence-case-resolved", "kind": "Event", "title": "geofence_case.resolved", "description": "Application-owned geofence case fact emitted after resolve_case reaches resolved.", "href": "/events/fleet-geofence-exception-geofence-case-resolved", "eyebrow": "stateful · geofence case · v1", "keywords": "Geofence Case Resolved fleet-geofence-exception Fleet geofence exception intouch-telematics resolve_case Operations controller acknowledged resolved outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence.retired - Identity: `search-destination:Event:event:fleet-geofence-exception-geofence-retired` - Canonical: https://developer.mappls.com/events/fleet-geofence-exception-geofence-retired ```json { "id": "event:fleet-geofence-exception-geofence-retired", "kind": "Event", "title": "geofence.retired", "description": "Application-owned geofence case fact emitted after retire_geofence reaches retired.", "href": "/events/fleet-geofence-exception-geofence-retired", "eyebrow": "stateful · geofence case · v1", "keywords": "Geofence Retired fleet-geofence-exception Fleet geofence exception intouch-telematics retire_geofence Fleet administrator draft active retired outbox idempotency replay deduplication event schema" } ``` ## search-destination · incident.reported - Identity: `search-destination:Event:event:emergency-incident-response-incident-reported` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-reported ```json { "id": "event:emergency-incident-response-incident-reported", "kind": "Event", "title": "incident.reported", "description": "Application-owned incident fact emitted after report_incident reaches reported.", "href": "/events/emergency-incident-response-incident-reported", "eyebrow": "stateful · incident · v1", "keywords": "Incident Reported emergency-incident-response Coordinated incident response routes-navigation report_incident Call taker reported outbox idempotency replay deduplication event schema" } ``` ## search-destination · incident.located - Identity: `search-destination:Event:event:emergency-incident-response-incident-located` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-located ```json { "id": "event:emergency-incident-response-incident-located", "kind": "Event", "title": "incident.located", "description": "Application-owned incident fact emitted after resolve_location reaches located.", "href": "/events/emergency-incident-response-incident-located", "eyebrow": "stateful · incident · v1", "keywords": "Incident Located emergency-incident-response Coordinated incident response routes-navigation resolve_location Dispatcher reported located outbox idempotency replay deduplication event schema" } ``` ## search-destination · incident.dispatched - Identity: `search-destination:Event:event:emergency-incident-response-incident-dispatched` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-dispatched ```json { "id": "event:emergency-incident-response-incident-dispatched", "kind": "Event", "title": "incident.dispatched", "description": "Application-owned incident fact emitted after dispatch reaches dispatched.", "href": "/events/emergency-incident-response-incident-dispatched", "eyebrow": "stateful · incident · v1", "keywords": "Incident Dispatched emergency-incident-response Coordinated incident response routes-navigation dispatch Dispatcher located dispatched outbox idempotency replay deduplication event schema" } ``` ## search-destination · dispatch.accepted - Identity: `search-destination:Event:event:emergency-incident-response-dispatch-accepted` - Canonical: https://developer.mappls.com/events/emergency-incident-response-dispatch-accepted ```json { "id": "event:emergency-incident-response-dispatch-accepted", "kind": "Event", "title": "dispatch.accepted", "description": "Application-owned incident fact emitted after accept_dispatch reaches en_route.", "href": "/events/emergency-incident-response-dispatch-accepted", "eyebrow": "stateful · incident · v1", "keywords": "Dispatch Accepted emergency-incident-response Coordinated incident response routes-navigation accept_dispatch Responder dispatched en_route outbox idempotency replay deduplication event schema" } ``` ## search-destination · unit.position_recorded - Identity: `search-destination:Event:event:emergency-incident-response-unit-position-recorded` - Canonical: https://developer.mappls.com/events/emergency-incident-response-unit-position-recorded ```json { "id": "event:emergency-incident-response-unit-position-recorded", "kind": "Event", "title": "unit.position_recorded", "description": "Application-owned incident fact emitted after record_position reaches en_route.", "href": "/events/emergency-incident-response-unit-position-recorded", "eyebrow": "stateful · incident · v1", "keywords": "Unit Position Recorded emergency-incident-response Coordinated incident response routes-navigation record_position Telematics service en_route en_route outbox idempotency replay deduplication event schema" } ``` ## search-destination · incident.arrived - Identity: `search-destination:Event:event:emergency-incident-response-incident-arrived` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-arrived ```json { "id": "event:emergency-incident-response-incident-arrived", "kind": "Event", "title": "incident.arrived", "description": "Application-owned incident fact emitted after confirm_arrival reaches on_scene.", "href": "/events/emergency-incident-response-incident-arrived", "eyebrow": "stateful · incident · v1", "keywords": "Incident Arrived emergency-incident-response Coordinated incident response routes-navigation confirm_arrival Responder en_route on_scene outbox idempotency replay deduplication event schema" } ``` ## search-destination · incident.resolved - Identity: `search-destination:Event:event:emergency-incident-response-incident-resolved` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-resolved ```json { "id": "event:emergency-incident-response-incident-resolved", "kind": "Event", "title": "incident.resolved", "description": "Application-owned incident fact emitted after resolve reaches resolved.", "href": "/events/emergency-incident-response-incident-resolved", "eyebrow": "stateful · incident · v1", "keywords": "Incident Resolved emergency-incident-response Coordinated incident response routes-navigation resolve Responder on_scene resolved outbox idempotency replay deduplication event schema" } ``` ## search-destination · incident.reviewed - Identity: `search-destination:Event:event:emergency-incident-response-incident-reviewed` - Canonical: https://developer.mappls.com/events/emergency-incident-response-incident-reviewed ```json { "id": "event:emergency-incident-response-incident-reviewed", "kind": "Event", "title": "incident.reviewed", "description": "Application-owned incident fact emitted after review reaches reviewed.", "href": "/events/emergency-incident-response-incident-reviewed", "eyebrow": "stateful · incident · v1", "keywords": "Incident Reviewed emergency-incident-response Coordinated incident response routes-navigation review Incident commander resolved reviewed outbox idempotency replay deduplication event schema" } ``` ## search-destination · route.calculated - Identity: `search-destination:Event:event:navigation-session-route-calculated` - Canonical: https://developer.mappls.com/events/navigation-session-route-calculated ```json { "id": "event:navigation-session-route-calculated", "kind": "Event", "title": "route.calculated", "description": "Application-owned navigation session fact emitted after calculate_route reaches preview.", "href": "/events/navigation-session-route-calculated", "eyebrow": "hybrid · navigation session · v1", "keywords": "Route Calculated navigation-session Recoverable navigation session routes-navigation calculate_route Navigation application draft preview preview outbox idempotency replay deduplication event schema" } ``` ## search-destination · navigation.started - Identity: `search-destination:Event:event:navigation-session-navigation-started` - Canonical: https://developer.mappls.com/events/navigation-session-navigation-started ```json { "id": "event:navigation-session-navigation-started", "kind": "Event", "title": "navigation.started", "description": "Application-owned navigation session fact emitted after start_guidance reaches navigating.", "href": "/events/navigation-session-navigation-started", "eyebrow": "hybrid · navigation session · v1", "keywords": "Navigation Started navigation-session Recoverable navigation session routes-navigation start_guidance Driver preview navigating outbox idempotency replay deduplication event schema" } ``` ## search-destination · reroute.requested - Identity: `search-destination:Event:event:navigation-session-reroute-requested` - Canonical: https://developer.mappls.com/events/navigation-session-reroute-requested ```json { "id": "event:navigation-session-reroute-requested", "kind": "Event", "title": "reroute.requested", "description": "Application-owned navigation session fact emitted after request_reroute reaches rerouting.", "href": "/events/navigation-session-reroute-requested", "eyebrow": "hybrid · navigation session · v1", "keywords": "Reroute Requested navigation-session Recoverable navigation session routes-navigation request_reroute Navigation application navigating rerouting rerouting outbox idempotency replay deduplication event schema" } ``` ## search-destination · route.updated - Identity: `search-destination:Event:event:navigation-session-route-updated` - Canonical: https://developer.mappls.com/events/navigation-session-route-updated ```json { "id": "event:navigation-session-route-updated", "kind": "Event", "title": "route.updated", "description": "Application-owned navigation session fact emitted after accept_reroute reaches navigating.", "href": "/events/navigation-session-route-updated", "eyebrow": "hybrid · navigation session · v1", "keywords": "Route Updated navigation-session Recoverable navigation session routes-navigation accept_reroute Mappls navigation SDK rerouting navigating outbox idempotency replay deduplication event schema" } ``` ## search-destination · navigation.arrived - Identity: `search-destination:Event:event:navigation-session-navigation-arrived` - Canonical: https://developer.mappls.com/events/navigation-session-navigation-arrived ```json { "id": "event:navigation-session-navigation-arrived", "kind": "Event", "title": "navigation.arrived", "description": "Application-owned navigation session fact emitted after confirm_arrival reaches arrived.", "href": "/events/navigation-session-navigation-arrived", "eyebrow": "hybrid · navigation session · v1", "keywords": "Navigation Arrived navigation-session Recoverable navigation session routes-navigation confirm_arrival Navigation application navigating arrived outbox idempotency replay deduplication event schema" } ``` ## search-destination · navigation.ended - Identity: `search-destination:Event:event:navigation-session-navigation-ended` - Canonical: https://developer.mappls.com/events/navigation-session-navigation-ended ```json { "id": "event:navigation-session-navigation-ended", "kind": "Event", "title": "navigation.ended", "description": "Application-owned navigation session fact emitted after end_session reaches ended.", "href": "/events/navigation-session-navigation-ended", "eyebrow": "hybrid · navigation session · v1", "keywords": "Navigation Ended navigation-session Recoverable navigation session routes-navigation end_session Driver preview navigating rerouting arrived ended outbox idempotency replay deduplication event schema" } ``` ## search-destination · dataset.version_created - Identity: `search-destination:Event:event:governed-spatial-analysis-dataset-version-created` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-dataset-version-created ```json { "id": "event:governed-spatial-analysis-dataset-version-created", "kind": "Event", "title": "dataset.version_created", "description": "Application-owned analysis run fact emitted after create_dataset_version reaches draft.", "href": "/events/governed-spatial-analysis-dataset-version-created", "eyebrow": "hybrid · analysis run · v1", "keywords": "Dataset Version Created governed-spatial-analysis Governed spatial analysis gis-analytics create_dataset_version Data engineer draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · dataset.validation_started - Identity: `search-destination:Event:event:governed-spatial-analysis-dataset-validation-started` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-dataset-validation-started ```json { "id": "event:governed-spatial-analysis-dataset-validation-started", "kind": "Event", "title": "dataset.validation_started", "description": "Application-owned analysis run fact emitted after validate reaches validating.", "href": "/events/governed-spatial-analysis-dataset-validation-started", "eyebrow": "hybrid · analysis run · v1", "keywords": "Dataset Validation Started governed-spatial-analysis Governed spatial analysis gis-analytics validate Spatial analyst draft validating outbox idempotency replay deduplication event schema" } ``` ## search-destination · dataset.published - Identity: `search-destination:Event:event:governed-spatial-analysis-dataset-published` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-dataset-published ```json { "id": "event:governed-spatial-analysis-dataset-published", "kind": "Event", "title": "dataset.published", "description": "Application-owned analysis run fact emitted after publish reaches published.", "href": "/events/governed-spatial-analysis-dataset-published", "eyebrow": "hybrid · analysis run · v1", "keywords": "Dataset Published governed-spatial-analysis Governed spatial analysis gis-analytics publish Workspace administrator validating published outbox idempotency replay deduplication event schema" } ``` ## search-destination · analysis.started - Identity: `search-destination:Event:event:governed-spatial-analysis-analysis-started` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-analysis-started ```json { "id": "event:governed-spatial-analysis-analysis-started", "kind": "Event", "title": "analysis.started", "description": "Application-owned analysis run fact emitted after run_analysis reaches processing.", "href": "/events/governed-spatial-analysis-analysis-started", "eyebrow": "hybrid · analysis run · v1", "keywords": "Analysis Started governed-spatial-analysis Governed spatial analysis gis-analytics run_analysis Spatial analyst published ready processing outbox idempotency replay deduplication event schema" } ``` ## search-destination · analysis.completed - Identity: `search-destination:Event:event:governed-spatial-analysis-analysis-completed` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-analysis-completed ```json { "id": "event:governed-spatial-analysis-analysis-completed", "kind": "Event", "title": "analysis.completed", "description": "Application-owned analysis run fact emitted after complete_analysis reaches ready.", "href": "/events/governed-spatial-analysis-analysis-completed", "eyebrow": "hybrid · analysis run · v1", "keywords": "Analysis Completed governed-spatial-analysis Governed spatial analysis gis-analytics complete_analysis Spatial processing service processing ready outbox idempotency replay deduplication event schema" } ``` ## search-destination · share.created - Identity: `search-destination:Event:event:governed-spatial-analysis-share-created` - Canonical: https://developer.mappls.com/events/governed-spatial-analysis-share-created ```json { "id": "event:governed-spatial-analysis-share-created", "kind": "Event", "title": "share.created", "description": "Application-owned analysis run fact emitted after create_share reaches shared.", "href": "/events/governed-spatial-analysis-share-created", "eyebrow": "hybrid · analysis run · v1", "keywords": "Share Created governed-spatial-analysis Governed spatial analysis gis-analytics create_share Workspace administrator ready shared outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.created - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-created` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-created ```json { "id": "event:durable-weekend-itinerary-trip-created", "kind": "Event", "title": "trip.created", "description": "Application-owned trip itinerary fact emitted after create_trip reaches draft.", "href": "/events/durable-weekend-itinerary-trip-created", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Created durable-weekend-itinerary Durable multi-stop itinerary routes-navigation create_trip Traveller draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.sequence_changed - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-sequence-changed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-sequence-changed ```json { "id": "event:durable-weekend-itinerary-trip-sequence-changed", "kind": "Event", "title": "trip.sequence_changed", "description": "Application-owned trip itinerary fact emitted after add_or_reorder_stop reaches draft.", "href": "/events/durable-weekend-itinerary-trip-sequence-changed", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Sequence Changed durable-weekend-itinerary Durable multi-stop itinerary routes-navigation add_or_reorder_stop Traveller draft planned draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.route_previewed - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-route-previewed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-route-previewed ```json { "id": "event:durable-weekend-itinerary-trip-route-previewed", "kind": "Event", "title": "trip.route_previewed", "description": "Application-owned trip itinerary fact emitted after preview_route reaches planned.", "href": "/events/durable-weekend-itinerary-trip-route-previewed", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Route Previewed durable-weekend-itinerary Durable multi-stop itinerary routes-navigation preview_route Mappls routing service draft planned outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.started - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-started` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-started ```json { "id": "event:durable-weekend-itinerary-trip-started", "kind": "Event", "title": "trip.started", "description": "Application-owned trip itinerary fact emitted after start_trip reaches active.", "href": "/events/durable-weekend-itinerary-trip-started", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Started durable-weekend-itinerary Durable multi-stop itinerary routes-navigation start_trip Traveller planned active outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.paused - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-paused` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-paused ```json { "id": "event:durable-weekend-itinerary-trip-paused", "kind": "Event", "title": "trip.paused", "description": "Application-owned trip itinerary fact emitted after pause_trip reaches paused.", "href": "/events/durable-weekend-itinerary-trip-paused", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Paused durable-weekend-itinerary Durable multi-stop itinerary routes-navigation pause_trip Traveller active paused outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.resumed - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-resumed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-resumed ```json { "id": "event:durable-weekend-itinerary-trip-resumed", "kind": "Event", "title": "trip.resumed", "description": "Application-owned trip itinerary fact emitted after resume_trip reaches active.", "href": "/events/durable-weekend-itinerary-trip-resumed", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Resumed durable-weekend-itinerary Durable multi-stop itinerary routes-navigation resume_trip Traveller paused active outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.stop_completed - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-stop-completed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-stop-completed ```json { "id": "event:durable-weekend-itinerary-trip-stop-completed", "kind": "Event", "title": "trip.stop_completed", "description": "Application-owned trip itinerary fact emitted after visit_or_skip_next reaches active.", "href": "/events/durable-weekend-itinerary-trip-stop-completed", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Stop Completed durable-weekend-itinerary Durable multi-stop itinerary routes-navigation visit_or_skip_next Traveller active active outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.completed - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-completed` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-completed ```json { "id": "event:durable-weekend-itinerary-trip-completed", "kind": "Event", "title": "trip.completed", "description": "Application-owned trip itinerary fact emitted after complete_trip reaches completed.", "href": "/events/durable-weekend-itinerary-trip-completed", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Completed durable-weekend-itinerary Durable multi-stop itinerary routes-navigation complete_trip Traveller active completed outbox idempotency replay deduplication event schema" } ``` ## search-destination · trip.cancelled - Identity: `search-destination:Event:event:durable-weekend-itinerary-trip-cancelled` - Canonical: https://developer.mappls.com/events/durable-weekend-itinerary-trip-cancelled ```json { "id": "event:durable-weekend-itinerary-trip-cancelled", "kind": "Event", "title": "trip.cancelled", "description": "Application-owned trip itinerary fact emitted after cancel_trip reaches cancelled.", "href": "/events/durable-weekend-itinerary-trip-cancelled", "eyebrow": "hybrid · trip itinerary · v1", "keywords": "Trip Cancelled durable-weekend-itinerary Durable multi-stop itinerary routes-navigation cancel_trip Traveller draft planned active paused cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.entered - Identity: `search-destination:Event:event:consented-address-verification-address-verification-entered` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-entered ```json { "id": "event:consented-address-verification-address-verification-entered", "kind": "Event", "title": "address_verification.entered", "description": "Application-owned address verification fact emitted after enter_verification reaches entered.", "href": "/events/consented-address-verification-address-verification-entered", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Entered consented-address-verification Consented address verification search-places enter_verification Application user entered outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.normalized - Identity: `search-destination:Event:event:consented-address-verification-address-verification-normalized` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-normalized ```json { "id": "event:consented-address-verification-address-verification-normalized", "kind": "Event", "title": "address_verification.normalized", "description": "Application-owned address verification fact emitted after normalize_address reaches normalized.", "href": "/events/consented-address-verification-address-verification-normalized", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Normalized consented-address-verification Consented address verification search-places normalize_address Policy service entered normalized outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.capture_authorized - Identity: `search-destination:Event:event:consented-address-verification-address-verification-capture-authorized` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-capture-authorized ```json { "id": "event:consented-address-verification-address-verification-capture-authorized", "kind": "Event", "title": "address_verification.capture_authorized", "description": "Application-owned address verification fact emitted after authorize_capture reaches capture_authorized.", "href": "/events/consented-address-verification-address-verification-capture-authorized", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Capture Authorized consented-address-verification Consented address verification search-places authorize_capture Application user normalized capture_authorized outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.consent_revoked - Identity: `search-destination:Event:event:consented-address-verification-address-verification-consent-revoked` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-consent-revoked ```json { "id": "event:consented-address-verification-address-verification-consent-revoked", "kind": "Event", "title": "address_verification.consent_revoked", "description": "Application-owned address verification fact emitted after revoke_consent reaches cancelled.", "href": "/events/consented-address-verification-address-verification-consent-revoked", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Consent Revoked consented-address-verification Consented address verification search-places revoke_consent Application user capture_authorized cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.evidence_captured - Identity: `search-destination:Event:event:consented-address-verification-address-verification-evidence-captured` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-evidence-captured ```json { "id": "event:consented-address-verification-address-verification-evidence-captured", "kind": "Event", "title": "address_verification.evidence_captured", "description": "Application-owned address verification fact emitted after capture_evidence reaches evidence_captured.", "href": "/events/consented-address-verification-address-verification-evidence-captured", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Evidence Captured consented-address-verification Consented address verification search-places capture_evidence Evidence capture application capture_authorized evidence_captured outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.compared - Identity: `search-destination:Event:event:consented-address-verification-address-verification-compared` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-compared ```json { "id": "event:consented-address-verification-address-verification-compared", "kind": "Event", "title": "address_verification.compared", "description": "Application-owned address verification fact emitted after compare reaches compared.", "href": "/events/consented-address-verification-address-verification-compared", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Compared consented-address-verification Consented address verification search-places compare Policy service evidence_captured compared outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.verified - Identity: `search-destination:Event:event:consented-address-verification-address-verification-verified` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-verified ```json { "id": "event:consented-address-verification-address-verification-verified", "kind": "Event", "title": "address_verification.verified", "description": "Application-owned address verification fact emitted after verify or review_verify reaches verified.", "href": "/events/consented-address-verification-address-verification-verified", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Verified consented-address-verification Consented address verification search-places verify Policy service compared verified review_verify Human reviewer review_required verified outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.rejected - Identity: `search-destination:Event:event:consented-address-verification-address-verification-rejected` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-rejected ```json { "id": "event:consented-address-verification-address-verification-rejected", "kind": "Event", "title": "address_verification.rejected", "description": "Application-owned address verification fact emitted after reject or review_reject reaches rejected.", "href": "/events/consented-address-verification-address-verification-rejected", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Rejected consented-address-verification Consented address verification search-places reject Policy service compared rejected review_reject Human reviewer review_required rejected outbox idempotency replay deduplication event schema" } ``` ## search-destination · address_verification.review_required - Identity: `search-destination:Event:event:consented-address-verification-address-verification-review-required` - Canonical: https://developer.mappls.com/events/consented-address-verification-address-verification-review-required ```json { "id": "event:consented-address-verification-address-verification-review-required", "kind": "Event", "title": "address_verification.review_required", "description": "Application-owned address verification fact emitted after defer reaches review_required.", "href": "/events/consented-address-verification-address-verification-review-required", "eyebrow": "stateful · address verification · v1", "keywords": "Address Verification Review Required consented-address-verification Consented address verification search-places defer Policy service compared review_required outbox idempotency replay deduplication event schema" } ``` ## search-destination · agent.question_received - Identity: `search-destination:Event:event:governed-spatial-agent-run-agent-question-received` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-question-received ```json { "id": "event:governed-spatial-agent-run-agent-question-received", "kind": "Event", "title": "agent.question_received", "description": "Application-owned agent run fact emitted after ask reaches asked.", "href": "/events/governed-spatial-agent-run-agent-question-received", "eyebrow": "stateful · agent run · v1", "keywords": "Agent Question Received governed-spatial-agent-run Governed spatial agent run ai-location ask Application user asked outbox idempotency replay deduplication event schema" } ``` ## search-destination · agent.plan_created - Identity: `search-destination:Event:event:governed-spatial-agent-run-agent-plan-created` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-created ```json { "id": "event:governed-spatial-agent-run-agent-plan-created", "kind": "Event", "title": "agent.plan_created", "description": "Application-owned agent run fact emitted after create_plan reaches planned.", "href": "/events/governed-spatial-agent-run-agent-plan-created", "eyebrow": "stateful · agent run · v1", "keywords": "Agent Plan Created governed-spatial-agent-run Governed spatial agent run ai-location create_plan Agent planner asked planned outbox idempotency replay deduplication event schema" } ``` ## search-destination · agent.plan_approved - Identity: `search-destination:Event:event:governed-spatial-agent-run-agent-plan-approved` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-approved ```json { "id": "event:governed-spatial-agent-run-agent-plan-approved", "kind": "Event", "title": "agent.plan_approved", "description": "Application-owned agent run fact emitted after approve_plan reaches approved.", "href": "/events/governed-spatial-agent-run-agent-plan-approved", "eyebrow": "stateful · agent run · v1", "keywords": "Agent Plan Approved governed-spatial-agent-run Governed spatial agent run ai-location approve_plan Human approver planned approved outbox idempotency replay deduplication event schema" } ``` ## search-destination · agent.plan_rejected - Identity: `search-destination:Event:event:governed-spatial-agent-run-agent-plan-rejected` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-plan-rejected ```json { "id": "event:governed-spatial-agent-run-agent-plan-rejected", "kind": "Event", "title": "agent.plan_rejected", "description": "Application-owned agent run fact emitted after reject_plan reaches rejected.", "href": "/events/governed-spatial-agent-run-agent-plan-rejected", "eyebrow": "stateful · agent run · v1", "keywords": "Agent Plan Rejected governed-spatial-agent-run Governed spatial agent run ai-location reject_plan Human approver planned rejected outbox idempotency replay deduplication event schema" } ``` ## search-destination · agent.execution_started - Identity: `search-destination:Event:event:governed-spatial-agent-run-agent-execution-started` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-execution-started ```json { "id": "event:governed-spatial-agent-run-agent-execution-started", "kind": "Event", "title": "agent.execution_started", "description": "Application-owned agent run fact emitted after start_execution reaches executing.", "href": "/events/governed-spatial-agent-run-agent-execution-started", "eyebrow": "stateful · agent run · v1", "keywords": "Agent Execution Started governed-spatial-agent-run Governed spatial agent run ai-location start_execution Execution service approved executing outbox idempotency replay deduplication event schema" } ``` ## search-destination · agent.execution_completed - Identity: `search-destination:Event:event:governed-spatial-agent-run-agent-execution-completed` - Canonical: https://developer.mappls.com/events/governed-spatial-agent-run-agent-execution-completed ```json { "id": "event:governed-spatial-agent-run-agent-execution-completed", "kind": "Event", "title": "agent.execution_completed", "description": "Application-owned agent run fact emitted after complete_execution reaches completed.", "href": "/events/governed-spatial-agent-run-agent-execution-completed", "eyebrow": "stateful · agent run · v1", "keywords": "Agent Execution Completed governed-spatial-agent-run Governed spatial agent run ai-location complete_execution Execution service executing completed outbox idempotency replay deduplication event schema" } ``` ## search-destination · device.registered - Identity: `search-destination:Event:event:offline-automotive-release-device-registered` - Canonical: https://developer.mappls.com/events/offline-automotive-release-device-registered ```json { "id": "event:offline-automotive-release-device-registered", "kind": "Event", "title": "device.registered", "description": "Application-owned device release fact emitted after register_device reaches manufactured.", "href": "/events/offline-automotive-release-device-registered", "eyebrow": "stateful · device release · v1", "keywords": "Device Registered offline-automotive-release Offline automotive release offline-automotive register_device Manufacturing system manufactured outbox idempotency replay deduplication event schema" } ``` ## search-destination · license.activated - Identity: `search-destination:Event:event:offline-automotive-release-license-activated` - Canonical: https://developer.mappls.com/events/offline-automotive-release-license-activated ```json { "id": "event:offline-automotive-release-license-activated", "kind": "Event", "title": "license.activated", "description": "Application-owned device release fact emitted after activate reaches activated.", "href": "/events/offline-automotive-release-license-activated", "eyebrow": "stateful · device release · v1", "keywords": "License Activated offline-automotive-release Offline automotive release offline-automotive activate Fleet release manager manufactured activated outbox idempotency replay deduplication event schema" } ``` ## search-destination · release.installed - Identity: `search-destination:Event:event:offline-automotive-release-release-installed` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-installed ```json { "id": "event:offline-automotive-release-release-installed", "kind": "Event", "title": "release.installed", "description": "Application-owned device release fact emitted after stage_base_release reaches installed.", "href": "/events/offline-automotive-release-release-installed", "eyebrow": "stateful · device release · v1", "keywords": "Release Installed offline-automotive-release Offline automotive release offline-automotive stage_base_release Vehicle runtime activated installed outbox idempotency replay deduplication event schema" } ``` ## search-destination · release.qualified - Identity: `search-destination:Event:event:offline-automotive-release-release-qualified` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-qualified ```json { "id": "event:offline-automotive-release-release-qualified", "kind": "Event", "title": "release.qualified", "description": "Application-owned device release fact emitted after qualify reaches operational.", "href": "/events/offline-automotive-release-release-qualified", "eyebrow": "stateful · device release · v1", "keywords": "Release Qualified offline-automotive-release Offline automotive release offline-automotive qualify Vehicle runtime installed recovering operational outbox idempotency replay deduplication event schema" } ``` ## search-destination · release.update_started - Identity: `search-destination:Event:event:offline-automotive-release-release-update-started` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-update-started ```json { "id": "event:offline-automotive-release-release-update-started", "kind": "Event", "title": "release.update_started", "description": "Application-owned device release fact emitted after start_update reaches updating.", "href": "/events/offline-automotive-release-release-update-started", "eyebrow": "stateful · device release · v1", "keywords": "Release Update Started offline-automotive-release Offline automotive release offline-automotive start_update Fleet release manager operational updating outbox idempotency replay deduplication event schema" } ``` ## search-destination · release.rollback_started - Identity: `search-destination:Event:event:offline-automotive-release-release-rollback-started` - Canonical: https://developer.mappls.com/events/offline-automotive-release-release-rollback-started ```json { "id": "event:offline-automotive-release-release-rollback-started", "kind": "Event", "title": "release.rollback_started", "description": "Application-owned device release fact emitted after rollback reaches recovering.", "href": "/events/offline-automotive-release-release-rollback-started", "eyebrow": "stateful · device release · v1", "keywords": "Release Rollback Started offline-automotive-release Offline automotive release offline-automotive rollback Vehicle runtime updating operational recovering outbox idempotency replay deduplication event schema" } ``` ## search-destination · device.retired - Identity: `search-destination:Event:event:offline-automotive-release-device-retired` - Canonical: https://developer.mappls.com/events/offline-automotive-release-device-retired ```json { "id": "event:offline-automotive-release-device-retired", "kind": "Event", "title": "device.retired", "description": "Application-owned device release fact emitted after retire reaches retired.", "href": "/events/offline-automotive-release-device-retired", "eyebrow": "stateful · device release · v1", "keywords": "Device Retired offline-automotive-release Offline automotive release offline-automotive retire Fleet release manager manufactured activated installed operational recovering retired outbox idempotency replay deduplication event schema" } ``` ## search-destination · host.session_created - Identity: `search-destination:Event:event:widget-selection-session-host-session-created` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-session-created ```json { "id": "event:widget-selection-session-host-session-created", "kind": "Event", "title": "host.session_created", "description": "Application-owned widget selection session fact emitted after create_session reaches draft.", "href": "/events/widget-selection-session-host-session-created", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Host Session Created widget-selection-session Application-owned widget selection app-widgets-deep-links create_session Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · widget.opened - Identity: `search-destination:Event:event:widget-selection-session-widget-opened` - Canonical: https://developer.mappls.com/events/widget-selection-session-widget-opened ```json { "id": "event:widget-selection-session-widget-opened", "kind": "Event", "title": "widget.opened", "description": "Application-owned widget selection session fact emitted after open_widget reaches widget_open.", "href": "/events/widget-selection-session-widget-opened", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Widget Opened widget-selection-session Application-owned widget selection app-widgets-deep-links open_widget Application user draft fallback_active widget_open outbox idempotency replay deduplication event schema" } ``` ## search-destination · widget.fallback_activated - Identity: `search-destination:Event:event:widget-selection-session-widget-fallback-activated` - Canonical: https://developer.mappls.com/events/widget-selection-session-widget-fallback-activated ```json { "id": "event:widget-selection-session-widget-fallback-activated", "kind": "Event", "title": "widget.fallback_activated", "description": "Application-owned widget selection session fact emitted after activate_fallback reaches fallback_active.", "href": "/events/widget-selection-session-widget-fallback-activated", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Widget Fallback Activated widget-selection-session Application-owned widget selection app-widgets-deep-links activate_fallback Platform adapter widget_open fallback_active outbox idempotency replay deduplication event schema" } ``` ## search-destination · location.candidate_received - Identity: `search-destination:Event:event:widget-selection-session-location-candidate-received` - Canonical: https://developer.mappls.com/events/widget-selection-session-location-candidate-received ```json { "id": "event:widget-selection-session-location-candidate-received", "kind": "Event", "title": "location.candidate_received", "description": "Application-owned widget selection session fact emitted after receive_candidate reaches candidate_received.", "href": "/events/widget-selection-session-location-candidate-received", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Location Candidate Received widget-selection-session Application-owned widget selection app-widgets-deep-links receive_candidate Platform adapter widget_open fallback_active candidate_received outbox idempotency replay deduplication event schema" } ``` ## search-destination · location.selected - Identity: `search-destination:Event:event:widget-selection-session-location-selected` - Canonical: https://developer.mappls.com/events/widget-selection-session-location-selected ```json { "id": "event:widget-selection-session-location-selected", "kind": "Event", "title": "location.selected", "description": "Application-owned widget selection session fact emitted after accept_selection reaches selected.", "href": "/events/widget-selection-session-location-selected", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Location Selected widget-selection-session Application-owned widget selection app-widgets-deep-links accept_selection Application user candidate_received selected outbox idempotency replay deduplication event schema" } ``` ## search-destination · host.text_edited - Identity: `search-destination:Event:event:widget-selection-session-host-text-edited` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-text-edited ```json { "id": "event:widget-selection-session-host-text-edited", "kind": "Event", "title": "host.text_edited", "description": "Application-owned widget selection session fact emitted after edit_host_text reaches draft.", "href": "/events/widget-selection-session-host-text-edited", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Host Text Edited widget-selection-session Application-owned widget selection app-widgets-deep-links edit_host_text Application user draft widget_open fallback_active candidate_received selected draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · host.submitted - Identity: `search-destination:Event:event:widget-selection-session-host-submitted` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-submitted ```json { "id": "event:widget-selection-session-host-submitted", "kind": "Event", "title": "host.submitted", "description": "Application-owned widget selection session fact emitted after submit reaches submitted.", "href": "/events/widget-selection-session-host-submitted", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Host Submitted widget-selection-session Application-owned widget selection app-widgets-deep-links submit Application user selected submitted outbox idempotency replay deduplication event schema" } ``` ## search-destination · host.cancelled - Identity: `search-destination:Event:event:widget-selection-session-host-cancelled` - Canonical: https://developer.mappls.com/events/widget-selection-session-host-cancelled ```json { "id": "event:widget-selection-session-host-cancelled", "kind": "Event", "title": "host.cancelled", "description": "Application-owned widget selection session fact emitted after cancel reaches cancelled.", "href": "/events/widget-selection-session-host-cancelled", "eyebrow": "hybrid · widget selection session · v1", "keywords": "Host Cancelled widget-selection-session Application-owned widget selection app-widgets-deep-links cancel Application user draft widget_open fallback_active candidate_received selected cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.created - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-created` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-created ```json { "id": "event:ios-direction-planning-handoff-route-plan-created", "kind": "Event", "title": "route_plan.created", "description": "Application-owned route planning session fact emitted after create_plan reaches draft.", "href": "/events/ios-direction-planning-handoff-route-plan-created", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Created ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation create_plan Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.editor_opened - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-editor-opened` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-editor-opened ```json { "id": "event:ios-direction-planning-handoff-route-plan-editor-opened", "kind": "Event", "title": "route_plan.editor_opened", "description": "Application-owned route planning session fact emitted after open_direction_ui reaches editing.", "href": "/events/ios-direction-planning-handoff-route-plan-editor-opened", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Editor Opened ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation open_direction_ui Traveler draft selected editing outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.calculation_requested - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-calculation-requested` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-calculation-requested ```json { "id": "event:ios-direction-planning-handoff-route-plan-calculation-requested", "kind": "Event", "title": "route_plan.calculation_requested", "description": "Application-owned route planning session fact emitted after request_routes reaches calculating.", "href": "/events/ios-direction-planning-handoff-route-plan-calculation-requested", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Calculation Requested ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation request_routes Traveler editing calculating outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.candidates_received - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-candidates-received` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-candidates-received ```json { "id": "event:ios-direction-planning-handoff-route-plan-candidates-received", "kind": "Event", "title": "route_plan.candidates_received", "description": "Application-owned route planning session fact emitted after receive_routes reaches candidates_ready.", "href": "/events/ios-direction-planning-handoff-route-plan-candidates-received", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Candidates Received ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation receive_routes MapplsDirectionUI calculating candidates_ready outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.route_selected - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-route-selected` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-route-selected ```json { "id": "event:ios-direction-planning-handoff-route-plan-route-selected", "kind": "Event", "title": "route_plan.route_selected", "description": "Application-owned route planning session fact emitted after select_route reaches selected.", "href": "/events/ios-direction-planning-handoff-route-plan-route-selected", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Route Selected ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation select_route Traveler candidates_ready selected outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.navigation_requested - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-navigation-requested` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-navigation-requested ```json { "id": "event:ios-direction-planning-handoff-route-plan-navigation-requested", "kind": "Event", "title": "route_plan.navigation_requested", "description": "Application-owned route planning session fact emitted after request_navigation reaches handoff_pending.", "href": "/events/ios-direction-planning-handoff-route-plan-navigation-requested", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Navigation Requested ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation request_navigation Traveler selected candidates_ready handoff_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.navigation_handed_off - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-navigation-handed-off` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-navigation-handed-off ```json { "id": "event:ios-direction-planning-handoff-route-plan-navigation-handed-off", "kind": "Event", "title": "route_plan.navigation_handed_off", "description": "Application-owned route planning session fact emitted after confirm_handoff reaches handed_off.", "href": "/events/ios-direction-planning-handoff-route-plan-navigation-handed-off", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Navigation Handed Off ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation confirm_handoff Navigation adapter handoff_pending handed_off outbox idempotency replay deduplication event schema" } ``` ## search-destination · route_plan.cancelled - Identity: `search-destination:Event:event:ios-direction-planning-handoff-route-plan-cancelled` - Canonical: https://developer.mappls.com/events/ios-direction-planning-handoff-route-plan-cancelled ```json { "id": "event:ios-direction-planning-handoff-route-plan-cancelled", "kind": "Event", "title": "route_plan.cancelled", "description": "Application-owned route planning session fact emitted after cancel_plan reaches cancelled.", "href": "/events/ios-direction-planning-handoff-route-plan-cancelled", "eyebrow": "hybrid · route planning session · v1", "keywords": "Route Plan Cancelled ios-direction-planning-handoff iOS direction planning and navigation handoff routes-navigation cancel_plan Traveler draft editing calculating candidates_ready selected handoff_pending cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_draft.created - Identity: `search-destination:Event:event:ios-geofence-draft-geofence-draft-created` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-created ```json { "id": "event:ios-geofence-draft-geofence-draft-created", "kind": "Event", "title": "geofence_draft.created", "description": "Application-owned geofence draft fact emitted after create_geofence_draft reaches draft.", "href": "/events/ios-geofence-draft-geofence-draft-created", "eyebrow": "hybrid · geofence draft · v1", "keywords": "Geofence Draft Created ios-geofence-draft iOS geofence draft and publication boundary intouch-telematics create_geofence_draft Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_draft.editor_opened - Identity: `search-destination:Event:event:ios-geofence-draft-geofence-draft-editor-opened` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-editor-opened ```json { "id": "event:ios-geofence-draft-geofence-draft-editor-opened", "kind": "Event", "title": "geofence_draft.editor_opened", "description": "Application-owned geofence draft fact emitted after open_editor reaches editing.", "href": "/events/ios-geofence-draft-geofence-draft-editor-opened", "eyebrow": "hybrid · geofence draft · v1", "keywords": "Geofence Draft Editor Opened ios-geofence-draft iOS geofence draft and publication boundary intouch-telematics open_editor Operations author draft review_pending editing outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_draft.geometry_received - Identity: `search-destination:Event:event:ios-geofence-draft-geofence-draft-geometry-received` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-geometry-received ```json { "id": "event:ios-geofence-draft-geofence-draft-geometry-received", "kind": "Event", "title": "geofence_draft.geometry_received", "description": "Application-owned geofence draft fact emitted after receive_geometry reaches candidate.", "href": "/events/ios-geofence-draft-geofence-draft-geometry-received", "eyebrow": "hybrid · geofence draft · v1", "keywords": "Geofence Draft Geometry Received ios-geofence-draft iOS geofence draft and publication boundary intouch-telematics receive_geometry MapplsGeofenceUI editing candidate outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_draft.review_requested - Identity: `search-destination:Event:event:ios-geofence-draft-geofence-draft-review-requested` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-review-requested ```json { "id": "event:ios-geofence-draft-geofence-draft-review-requested", "kind": "Event", "title": "geofence_draft.review_requested", "description": "Application-owned geofence draft fact emitted after submit_for_review reaches review_pending.", "href": "/events/ios-geofence-draft-geofence-draft-review-requested", "eyebrow": "hybrid · geofence draft · v1", "keywords": "Geofence Draft Review Requested ios-geofence-draft iOS geofence draft and publication boundary intouch-telematics submit_for_review Operations author candidate review_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_draft.approved - Identity: `search-destination:Event:event:ios-geofence-draft-geofence-draft-approved` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-approved ```json { "id": "event:ios-geofence-draft-geofence-draft-approved", "kind": "Event", "title": "geofence_draft.approved", "description": "Application-owned geofence draft fact emitted after approve_draft reaches approved_draft.", "href": "/events/ios-geofence-draft-geofence-draft-approved", "eyebrow": "hybrid · geofence draft · v1", "keywords": "Geofence Draft Approved ios-geofence-draft iOS geofence draft and publication boundary intouch-telematics approve_draft Geofence reviewer review_pending approved_draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · geofence_draft.cancelled - Identity: `search-destination:Event:event:ios-geofence-draft-geofence-draft-cancelled` - Canonical: https://developer.mappls.com/events/ios-geofence-draft-geofence-draft-cancelled ```json { "id": "event:ios-geofence-draft-geofence-draft-cancelled", "kind": "Event", "title": "geofence_draft.cancelled", "description": "Application-owned geofence draft fact emitted after cancel_edit reaches cancelled.", "href": "/events/ios-geofence-draft-geofence-draft-cancelled", "eyebrow": "hybrid · geofence draft · v1", "keywords": "Geofence Draft Cancelled ios-geofence-draft iOS geofence draft and publication boundary intouch-telematics cancel_edit Operations author draft editing candidate review_pending cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.created - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-created` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-created ```json { "id": "event:ios-feedback-report-review-feedback-report-created", "kind": "Event", "title": "feedback_report.created", "description": "Application-owned feedback report fact emitted after create_report reaches draft.", "href": "/events/ios-feedback-report-review-feedback-report-created", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Created ios-feedback-report-review iOS feedback report and review capture-feedback create_report Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.ui_opened - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-ui-opened` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-ui-opened ```json { "id": "event:ios-feedback-report-review-feedback-report-ui-opened", "kind": "Event", "title": "feedback_report.ui_opened", "description": "Application-owned feedback report fact emitted after open_feedback_ui reaches capturing.", "href": "/events/ios-feedback-report-review-feedback-report-ui-opened", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Ui Opened ios-feedback-report-review iOS feedback report and review capture-feedback open_feedback_ui Contributor draft capturing outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.candidate_received - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-candidate-received` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-candidate-received ```json { "id": "event:ios-feedback-report-review-feedback-report-candidate-received", "kind": "Event", "title": "feedback_report.candidate_received", "description": "Application-owned feedback report fact emitted after receive_candidate reaches candidate.", "href": "/events/ios-feedback-report-review-feedback-report-candidate-received", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Candidate Received ios-feedback-report-review iOS feedback report and review capture-feedback receive_candidate Mappls Feedback Kit capturing candidate outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.submitted - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-submitted` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-submitted ```json { "id": "event:ios-feedback-report-review-feedback-report-submitted", "kind": "Event", "title": "feedback_report.submitted", "description": "Application-owned feedback report fact emitted after commit_submission reaches submitted.", "href": "/events/ios-feedback-report-review-feedback-report-submitted", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Submitted ios-feedback-report-review iOS feedback report and review capture-feedback commit_submission Contributor candidate submitted outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.provider_requested - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-provider-requested` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-provider-requested ```json { "id": "event:ios-feedback-report-review-feedback-report-provider-requested", "kind": "Event", "title": "feedback_report.provider_requested", "description": "Application-owned feedback report fact emitted after request_provider_submission reaches provider_pending.", "href": "/events/ios-feedback-report-review-feedback-report-provider-requested", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Provider Requested ios-feedback-report-review iOS feedback report and review capture-feedback request_provider_submission Provider adapter submitted provider_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.review_queued - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-review-queued` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-review-queued ```json { "id": "event:ios-feedback-report-review-feedback-report-review-queued", "kind": "Event", "title": "feedback_report.review_queued", "description": "Application-owned feedback report fact emitted after queue_review reaches review_pending.", "href": "/events/ios-feedback-report-review-feedback-report-review-queued", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Review Queued ios-feedback-report-review iOS feedback report and review capture-feedback queue_review Host application submitted provider_pending review_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.resolved - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-resolved` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-resolved ```json { "id": "event:ios-feedback-report-review-feedback-report-resolved", "kind": "Event", "title": "feedback_report.resolved", "description": "Application-owned feedback report fact emitted after resolve_report reaches resolved.", "href": "/events/ios-feedback-report-review-feedback-report-resolved", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Resolved ios-feedback-report-review iOS feedback report and review capture-feedback resolve_report Operations reviewer review_pending resolved outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.rejected - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-rejected` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-rejected ```json { "id": "event:ios-feedback-report-review-feedback-report-rejected", "kind": "Event", "title": "feedback_report.rejected", "description": "Application-owned feedback report fact emitted after reject_report reaches rejected.", "href": "/events/ios-feedback-report-review-feedback-report-rejected", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Rejected ios-feedback-report-review iOS feedback report and review capture-feedback reject_report Operations reviewer review_pending rejected outbox idempotency replay deduplication event schema" } ``` ## search-destination · feedback_report.cancelled - Identity: `search-destination:Event:event:ios-feedback-report-review-feedback-report-cancelled` - Canonical: https://developer.mappls.com/events/ios-feedback-report-review-feedback-report-cancelled ```json { "id": "event:ios-feedback-report-review-feedback-report-cancelled", "kind": "Event", "title": "feedback_report.cancelled", "description": "Application-owned feedback report fact emitted after cancel_report reaches cancelled.", "href": "/events/ios-feedback-report-review-feedback-report-cancelled", "eyebrow": "hybrid · feedback report · v1", "keywords": "Feedback Report Cancelled ios-feedback-report-review iOS feedback report and review capture-feedback cancel_report Contributor draft capturing candidate cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.attempt_created - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-attempt-created` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-attempt-created ```json { "id": "event:location-capture-evidence-location-capture-attempt-created", "kind": "Event", "title": "location_capture.attempt_created", "description": "Application-owned location capture attempt fact emitted after create_attempt reaches draft.", "href": "/events/location-capture-evidence-location-capture-attempt-created", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Attempt Created location-capture-evidence Consent-bound location capture evidence capture-feedback create_attempt Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.permission_requested - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-permission-requested` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-permission-requested ```json { "id": "event:location-capture-evidence-location-capture-permission-requested", "kind": "Event", "title": "location_capture.permission_requested", "description": "Application-owned location capture attempt fact emitted after request_permission reaches permission_pending.", "href": "/events/location-capture-evidence-location-capture-permission-requested", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Permission Requested location-capture-evidence Consent-bound location capture evidence capture-feedback request_permission Application user draft permission_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.sdk_ready - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-sdk-ready` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-sdk-ready ```json { "id": "event:location-capture-evidence-location-capture-sdk-ready", "kind": "Event", "title": "location_capture.sdk_ready", "description": "Application-owned location capture attempt fact emitted after prepare_sdk reaches ready.", "href": "/events/location-capture-evidence-location-capture-sdk-ready", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Sdk Ready location-capture-evidence Consent-bound location capture evidence capture-feedback prepare_sdk Platform adapter permission_pending ready outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.acquisition_started - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-acquisition-started` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-acquisition-started ```json { "id": "event:location-capture-evidence-location-capture-acquisition-started", "kind": "Event", "title": "location_capture.acquisition_started", "description": "Application-owned location capture attempt fact emitted after start_acquisition reaches acquiring.", "href": "/events/location-capture-evidence-location-capture-acquisition-started", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Acquisition Started location-capture-evidence Consent-bound location capture evidence capture-feedback start_acquisition Application user ready review_pending acquiring outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.candidate_received - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-candidate-received` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-candidate-received ```json { "id": "event:location-capture-evidence-location-capture-candidate-received", "kind": "Event", "title": "location_capture.candidate_received", "description": "Application-owned location capture attempt fact emitted after receive_location reaches candidate.", "href": "/events/location-capture-evidence-location-capture-candidate-received", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Candidate Received location-capture-evidence Consent-bound location capture evidence capture-feedback receive_location Platform adapter acquiring candidate outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.review_queued - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-review-queued` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-review-queued ```json { "id": "event:location-capture-evidence-location-capture-review-queued", "kind": "Event", "title": "location_capture.review_queued", "description": "Application-owned location capture attempt fact emitted after queue_review reaches review_pending.", "href": "/events/location-capture-evidence-location-capture-review-queued", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Review Queued location-capture-evidence Consent-bound location capture evidence capture-feedback queue_review Host application candidate review_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.evidence_accepted - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-evidence-accepted` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-evidence-accepted ```json { "id": "event:location-capture-evidence-location-capture-evidence-accepted", "kind": "Event", "title": "location_capture.evidence_accepted", "description": "Application-owned location capture attempt fact emitted after accept_evidence reaches accepted.", "href": "/events/location-capture-evidence-location-capture-evidence-accepted", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Evidence Accepted location-capture-evidence Consent-bound location capture evidence capture-feedback accept_evidence Application user candidate accepted outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.weak_evidence_approved - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-weak-evidence-approved` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-weak-evidence-approved ```json { "id": "event:location-capture-evidence-location-capture-weak-evidence-approved", "kind": "Event", "title": "location_capture.weak_evidence_approved", "description": "Application-owned location capture attempt fact emitted after approve_weak_evidence reaches accepted.", "href": "/events/location-capture-evidence-location-capture-weak-evidence-approved", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Weak Evidence Approved location-capture-evidence Consent-bound location capture evidence capture-feedback approve_weak_evidence Evidence reviewer review_pending accepted outbox idempotency replay deduplication event schema" } ``` ## search-destination · location_capture.attempt_cancelled - Identity: `search-destination:Event:event:location-capture-evidence-location-capture-attempt-cancelled` - Canonical: https://developer.mappls.com/events/location-capture-evidence-location-capture-attempt-cancelled ```json { "id": "event:location-capture-evidence-location-capture-attempt-cancelled", "kind": "Event", "title": "location_capture.attempt_cancelled", "description": "Application-owned location capture attempt fact emitted after cancel_attempt reaches cancelled.", "href": "/events/location-capture-evidence-location-capture-attempt-cancelled", "eyebrow": "hybrid · location capture attempt · v1", "keywords": "Location Capture Attempt Cancelled location-capture-evidence Consent-bound location capture evidence capture-feedback cancel_attempt Application user draft permission_pending ready acquiring candidate review_pending cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.created - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-created` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-created ```json { "id": "event:place-contribution-publication-place-contribution-created", "kind": "Event", "title": "place_contribution.created", "description": "Application-owned place contribution fact emitted after create_contribution reaches draft.", "href": "/events/place-contribution-publication-place-contribution-created", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Created place-contribution-publication Governed place contribution and publication capture-feedback create_contribution Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.widget_opened - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-widget-opened` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-widget-opened ```json { "id": "event:place-contribution-publication-place-contribution-widget-opened", "kind": "Event", "title": "place_contribution.widget_opened", "description": "Application-owned place contribution fact emitted after open_widget reaches widget_open.", "href": "/events/place-contribution-publication-place-contribution-widget-opened", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Widget Opened place-contribution-publication Governed place contribution and publication capture-feedback open_widget Contributor draft widget_open outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.submission_reported - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-submission-reported` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-submission-reported ```json { "id": "event:place-contribution-publication-place-contribution-submission-reported", "kind": "Event", "title": "place_contribution.submission_reported", "description": "Application-owned place contribution fact emitted after report_submission reaches submission_reported.", "href": "/events/place-contribution-publication-place-contribution-submission-reported", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Submission Reported place-contribution-publication Governed place contribution and publication capture-feedback report_submission Contributor widget_open submission_reported outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.reconciliation_queued - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-reconciliation-queued` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-reconciliation-queued ```json { "id": "event:place-contribution-publication-place-contribution-reconciliation-queued", "kind": "Event", "title": "place_contribution.reconciliation_queued", "description": "Application-owned place contribution fact emitted after queue_reconciliation reaches publication_pending.", "href": "/events/place-contribution-publication-place-contribution-reconciliation-queued", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Reconciliation Queued place-contribution-publication Governed place contribution and publication capture-feedback queue_reconciliation Host application submission_reported publication_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.published - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-published` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-published ```json { "id": "event:place-contribution-publication-place-contribution-published", "kind": "Event", "title": "place_contribution.published", "description": "Application-owned place contribution fact emitted after confirm_publication reaches published.", "href": "/events/place-contribution-publication-place-contribution-published", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Published place-contribution-publication Governed place contribution and publication capture-feedback confirm_publication Operations reviewer submission_reported publication_pending published outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.rejected - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-rejected` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-rejected ```json { "id": "event:place-contribution-publication-place-contribution-rejected", "kind": "Event", "title": "place_contribution.rejected", "description": "Application-owned place contribution fact emitted after reject reaches rejected.", "href": "/events/place-contribution-publication-place-contribution-rejected", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Rejected place-contribution-publication Governed place contribution and publication capture-feedback reject Operations reviewer submission_reported publication_pending rejected outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.retried - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-retried` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-retried ```json { "id": "event:place-contribution-publication-place-contribution-retried", "kind": "Event", "title": "place_contribution.retried", "description": "Application-owned place contribution fact emitted after retry reaches widget_open.", "href": "/events/place-contribution-publication-place-contribution-retried", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Retried place-contribution-publication Governed place contribution and publication capture-feedback retry Contributor rejected widget_open outbox idempotency replay deduplication event schema" } ``` ## search-destination · place_contribution.withdrawn - Identity: `search-destination:Event:event:place-contribution-publication-place-contribution-withdrawn` - Canonical: https://developer.mappls.com/events/place-contribution-publication-place-contribution-withdrawn ```json { "id": "event:place-contribution-publication-place-contribution-withdrawn", "kind": "Event", "title": "place_contribution.withdrawn", "description": "Application-owned place contribution fact emitted after withdraw reaches withdrawn.", "href": "/events/place-contribution-publication-place-contribution-withdrawn", "eyebrow": "stateful · place contribution · v1", "keywords": "Place Contribution Withdrawn place-contribution-publication Governed place contribution and publication capture-feedback withdraw Contributor draft widget_open submission_reported publication_pending withdrawn outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.created - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-created` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-created ```json { "id": "event:realview-remote-inspection-realview-inspection-created", "kind": "Event", "title": "realview_inspection.created", "description": "Application-owned remote visual inspection fact emitted after create_inspection reaches draft.", "href": "/events/realview-remote-inspection-realview-inspection-created", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Created realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links create_inspection Host application draft outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.entitlement_requested - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-entitlement-requested` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-requested ```json { "id": "event:realview-remote-inspection-realview-inspection-entitlement-requested", "kind": "Event", "title": "realview_inspection.entitlement_requested", "description": "Application-owned remote visual inspection fact emitted after request_entitlement reaches entitlement_pending.", "href": "/events/realview-remote-inspection-realview-inspection-entitlement-requested", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Entitlement Requested realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links request_entitlement Inspector draft entitlement_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.entitlement_confirmed - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-entitlement-confirmed` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-confirmed ```json { "id": "event:realview-remote-inspection-realview-inspection-entitlement-confirmed", "kind": "Event", "title": "realview_inspection.entitlement_confirmed", "description": "Application-owned remote visual inspection fact emitted after confirm_entitlement reaches ready.", "href": "/events/realview-remote-inspection-realview-inspection-entitlement-confirmed", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Entitlement Confirmed realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links confirm_entitlement Platform administrator entitlement_pending ready outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.viewer_opened - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-viewer-opened` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-viewer-opened ```json { "id": "event:realview-remote-inspection-realview-inspection-viewer-opened", "kind": "Event", "title": "realview_inspection.viewer_opened", "description": "Application-owned remote visual inspection fact emitted after open_viewer reaches viewing.", "href": "/events/realview-remote-inspection-realview-inspection-viewer-opened", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Viewer Opened realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links open_viewer Inspector ready coverage_unavailable rework_required viewing outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.coverage_unavailable - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-coverage-unavailable` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-coverage-unavailable ```json { "id": "event:realview-remote-inspection-realview-inspection-coverage-unavailable", "kind": "Event", "title": "realview_inspection.coverage_unavailable", "description": "Application-owned remote visual inspection fact emitted after record_no_coverage reaches coverage_unavailable.", "href": "/events/realview-remote-inspection-realview-inspection-coverage-unavailable", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Coverage Unavailable realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links record_no_coverage Host application viewing coverage_unavailable outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.observation_recorded - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-observation-recorded` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-observation-recorded ```json { "id": "event:realview-remote-inspection-realview-inspection-observation-recorded", "kind": "Event", "title": "realview_inspection.observation_recorded", "description": "Application-owned remote visual inspection fact emitted after record_observation reaches observation_recorded.", "href": "/events/realview-remote-inspection-realview-inspection-observation-recorded", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Observation Recorded realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links record_observation Inspector viewing observation_recorded outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.review_requested - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-review-requested` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-review-requested ```json { "id": "event:realview-remote-inspection-realview-inspection-review-requested", "kind": "Event", "title": "realview_inspection.review_requested", "description": "Application-owned remote visual inspection fact emitted after submit_review reaches review_pending.", "href": "/events/realview-remote-inspection-realview-inspection-review-requested", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Review Requested realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links submit_review Inspector observation_recorded review_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.accepted - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-accepted` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-accepted ```json { "id": "event:realview-remote-inspection-realview-inspection-accepted", "kind": "Event", "title": "realview_inspection.accepted", "description": "Application-owned remote visual inspection fact emitted after accept reaches accepted.", "href": "/events/realview-remote-inspection-realview-inspection-accepted", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Accepted realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links accept Inspection reviewer review_pending accepted outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.rework_requested - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-rework-requested` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-rework-requested ```json { "id": "event:realview-remote-inspection-realview-inspection-rework-requested", "kind": "Event", "title": "realview_inspection.rework_requested", "description": "Application-owned remote visual inspection fact emitted after request_rework reaches rework_required.", "href": "/events/realview-remote-inspection-realview-inspection-rework-requested", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Rework Requested realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links request_rework Inspection reviewer review_pending rework_required outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.entitlement_expired - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-entitlement-expired` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-entitlement-expired ```json { "id": "event:realview-remote-inspection-realview-inspection-entitlement-expired", "kind": "Event", "title": "realview_inspection.entitlement_expired", "description": "Application-owned remote visual inspection fact emitted after record_entitlement_expired reaches entitlement_pending.", "href": "/events/realview-remote-inspection-realview-inspection-entitlement-expired", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Entitlement Expired realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links record_entitlement_expired Host application ready viewing entitlement_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · realview_inspection.cancelled - Identity: `search-destination:Event:event:realview-remote-inspection-realview-inspection-cancelled` - Canonical: https://developer.mappls.com/events/realview-remote-inspection-realview-inspection-cancelled ```json { "id": "event:realview-remote-inspection-realview-inspection-cancelled", "kind": "Event", "title": "realview_inspection.cancelled", "description": "Application-owned remote visual inspection fact emitted after cancel reaches cancelled.", "href": "/events/realview-remote-inspection-realview-inspection-cancelled", "eyebrow": "stateful · remote visual inspection · v1", "keywords": "Realview Inspection Cancelled realview-remote-inspection Entitled RealView remote inspection app-widgets-deep-links cancel Inspector draft entitlement_pending ready viewing coverage_unavailable observation_recorded review_pending rework_required cancelled outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.case_registered - Identity: `search-destination:Event:event:vision-inference-review-vision-case-registered` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-case-registered ```json { "id": "event:vision-inference-review-vision-case-registered", "kind": "Event", "title": "vision.case_registered", "description": "Application-owned vision evidence case fact emitted after register_case reaches registered.", "href": "/events/vision-inference-review-vision-case-registered", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Case Registered vision-inference-review Governed SkyDNN inference review ai-location register_case Asset steward registered outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.model_locked - Identity: `search-destination:Event:event:vision-inference-review-vision-model-locked` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-model-locked ```json { "id": "event:vision-inference-review-vision-model-locked", "kind": "Event", "title": "vision.model_locked", "description": "Application-owned vision evidence case fact emitted after lock_model reaches model_locked.", "href": "/events/vision-inference-review-vision-model-locked", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Model Locked vision-inference-review Governed SkyDNN inference review ai-location lock_model Vision worker registered model_locked outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.inference_requested - Identity: `search-destination:Event:event:vision-inference-review-vision-inference-requested` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-inference-requested ```json { "id": "event:vision-inference-review-vision-inference-requested", "kind": "Event", "title": "vision.inference_requested", "description": "Application-owned vision evidence case fact emitted after request_inference reaches inference_requested.", "href": "/events/vision-inference-review-vision-inference-requested", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Inference Requested vision-inference-review Governed SkyDNN inference review ai-location request_inference Vision worker model_locked inference_requested outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.inference_recorded - Identity: `search-destination:Event:event:vision-inference-review-vision-inference-recorded` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-inference-recorded ```json { "id": "event:vision-inference-review-vision-inference-recorded", "kind": "Event", "title": "vision.inference_recorded", "description": "Application-owned vision evidence case fact emitted after record_inference reaches inferred.", "href": "/events/vision-inference-review-vision-inference-recorded", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Inference Recorded vision-inference-review Governed SkyDNN inference review ai-location record_inference Vision worker inference_requested inferred outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.review_requested - Identity: `search-destination:Event:event:vision-inference-review-vision-review-requested` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-review-requested ```json { "id": "event:vision-inference-review-vision-review-requested", "kind": "Event", "title": "vision.review_requested", "description": "Application-owned vision evidence case fact emitted after submit_review reaches review_pending.", "href": "/events/vision-inference-review-vision-review-requested", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Review Requested vision-inference-review Governed SkyDNN inference review ai-location submit_review Policy service inferred review_pending outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.accepted - Identity: `search-destination:Event:event:vision-inference-review-vision-accepted` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-accepted ```json { "id": "event:vision-inference-review-vision-accepted", "kind": "Event", "title": "vision.accepted", "description": "Application-owned vision evidence case fact emitted after accept reaches accepted.", "href": "/events/vision-inference-review-vision-accepted", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Accepted vision-inference-review Governed SkyDNN inference review ai-location accept Independent reviewer review_pending accepted outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.rejected - Identity: `search-destination:Event:event:vision-inference-review-vision-rejected` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-rejected ```json { "id": "event:vision-inference-review-vision-rejected", "kind": "Event", "title": "vision.rejected", "description": "Application-owned vision evidence case fact emitted after reject reaches rejected.", "href": "/events/vision-inference-review-vision-rejected", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Rejected vision-inference-review Governed SkyDNN inference review ai-location reject Independent reviewer review_pending rejected outbox idempotency replay deduplication event schema" } ``` ## search-destination · vision.redacted - Identity: `search-destination:Event:event:vision-inference-review-vision-redacted` - Canonical: https://developer.mappls.com/events/vision-inference-review-vision-redacted ```json { "id": "event:vision-inference-review-vision-redacted", "kind": "Event", "title": "vision.redacted", "description": "Application-owned vision evidence case fact emitted after redact reaches redacted.", "href": "/events/vision-inference-review-vision-redacted", "eyebrow": "stateful · vision evidence case · v1", "keywords": "Vision Redacted vision-inference-review Governed SkyDNN inference review ai-location redact Privacy worker inferred review_pending accepted rejected redacted outbox idempotency replay deduplication event schema" } ``` ## search-destination · Store Locator - Identity: `search-destination:Sample app:sample-app:store-locator` - Canonical: https://developer.mappls.com/samples/store-locator ```json { "id": "sample-app:store-locator", "kind": "Sample app", "title": "Store Locator", "description": "Discover eligible branches, compare distance and ETA, preserve Mappls Pin identity, and hand off safely to navigation.", "href": "/samples/store-locator", "eyebrow": "Starter · 6 tests", "keywords": "Node.js Responsive map-and-list UI Nearby adapter Matrix adapter maps search-places routes-navigation app-widgets-deep-links Locate → discover → filter → rank → select → navigate Responsive synchronized map and list Credential-safe server boundary Nearby and matrix contract provenance Stable Mappls Pin continuity Service intersection filters Opening and accessibility eligibility Distance, ETA, and name ranking Honest radius and empty states Validated navigation deep links Canonical bounded cache Defensive cache isolation" } ``` ## search-destination · Delivery Control Tower - Identity: `search-destination:Sample app:sample-app:delivery-control-tower` - Canonical: https://developer.mappls.com/samples/delivery-control-tower ```json { "id": "sample-app:delivery-control-tower", "kind": "Sample app", "title": "Delivery Control Tower", "description": "Track live orders, explain ETA risk, replay a trip, and handle delivery exceptions.", "href": "/samples/delivery-control-tower", "eyebrow": "Advanced · 7 tests", "keywords": "Node.js Browser UI InTouch adapter intouch-telematics routes-navigation maps Plan → ready → track → recover → close → replay Responsive fleet control tower Durable trip aggregates Immutable telemetry ledger Event-time and receipt-time ordering Late-event derived revisions Owned exception recovery Idempotent commands and observations Optimistic concurrency Transactional outbox InTouch adapter boundary Provider close reconciliation Restart recovery" } ``` ## search-destination · Grid Restoration Desk - Identity: `search-destination:Sample app:sample-app:grid-restoration-desk` - Canonical: https://developer.mappls.com/samples/grid-restoration-desk ```json { "id": "sample-app:grid-restoration-desk", "kind": "Sample app", "title": "Grid Restoration Desk", "description": "Correlate an outage, govern independent switching approval, dispatch an assigned crew, preserve rework, and reconcile restoration from telemetry and customer-impact evidence.", "href": "/samples/grid-restoration-desk", "eyebrow": "Advanced · 14 tests", "keywords": "Node.js Responsive operations desk Atomic evidence repository Mappls fixture adapter gis-analytics intouch-telematics workmate routes-navigation capture-feedback Report → correlate → approve switching → dispatch → prove → reconcile Responsive restoration operations desk Complete eight-event outage journey Role-scoped operational commands Independent switching-plan approval Assigned-crew enforcement Independent restoration reconciliation Telemetry and customer-impact recovery gate Rejected-attempt retention and rework Map and route evidence separated from electrical authority Private evidence and credential rejection Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free zero-network fixture mode" } ``` ## search-destination · Care Transfer Desk - Identity: `search-destination:Sample app:sample-app:care-transfer-desk` - Canonical: https://developer.mappls.com/samples/care-transfer-desk ```json { "id": "sample-app:care-transfer-desk", "kind": "Sample app", "title": "Care Transfer Desk", "description": "Confirm the correct receiving entrance, assign eligible transport, preserve courier custody, review condition exceptions, and reconcile receiver acceptance without retaining patient or clinical data.", "href": "/samples/care-transfer-desk", "eyebrow": "Advanced · 17 tests", "keywords": "Node.js Responsive custody desk Atomic evidence repository Mappls care fixture adapter search-places routes-navigation intouch-telematics capture-feedback gis-analytics Request → confirm facility → assign → custody → review exceptions → accept Responsive privacy-minimized custody desk Complete ten-event exception-aware journey Exact role-scoped commands Confirmed clinical-entrance revision Bounded transport eligibility and stability window Assigned-courier custody enforcement Independent condition-exception review Arrival separated from completion Custody-bound receiver acceptance Independent quality reconciliation Rejected receipt retention and rework Patient and clinical evidence rejection Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free zero-network fixture mode" } ``` ## search-destination · Airside Turnaround Desk - Identity: `search-destination:Sample app:sample-app:airside-turnaround-desk` - Canonical: https://developer.mappls.com/samples/airside-turnaround-desk ```json { "id": "sample-app:airside-turnaround-desk", "kind": "Sample app", "title": "Airside Turnaround Desk", "description": "Coordinate a revision-safe aircraft turnaround, pause for airside exceptions, preserve four service milestones, and require independent airline, airport, and safety readiness decisions.", "href": "/samples/airside-turnaround-desk", "eyebrow": "Advanced · 22 tests", "keywords": "Node.js Responsive airside control desk Atomic evidence repository Mappls aviation fixture adapter gis-analytics intouch-telematics workmate maps capture-feedback Draft → lock stand → plan → dispatch → evidence → review → ready Responsive aviation control desk Complete sixteen-event exception-aware journey Exact role-scoped operational commands Immutable stand and zone revisions Stale plan and assignment invalidation Eligible vehicle and assigned-lead enforcement Four independently evidenced service milestones Independent airside exception investigation Abort without invented readiness Airline, airport, and safety authority separation Map, route, task, and telemetry evidence separated from authority Passenger, location, clearance, and credential rejection Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free zero-network fixture mode" } ``` ## search-destination · Field Service Console - Identity: `search-destination:Sample app:sample-app:field-service` - Canonical: https://developer.mappls.com/samples/field-service ```json { "id": "sample-app:field-service", "kind": "Sample app", "title": "Field Service Console", "description": "Create, assign, execute, and audit a technician visit with proof.", "href": "/samples/field-service", "eyebrow": "Production pattern · 6 tests", "keywords": "Node.js Browser UI Workmate adapter workmate routes-navigation capture-feedback Create → assign → accept → travel → prove → close Browser operations console Durable task snapshots Append-only audit history Idempotent commands Optimistic concurrency Proof approval and rework Transactional outbox Mappls adapter boundary Restart recovery" } ``` ## search-destination · Fleet Geofence Monitor - Identity: `search-destination:Sample app:sample-app:fleet-geofence` - Canonical: https://developer.mappls.com/samples/fleet-geofence ```json { "id": "sample-app:fleet-geofence", "kind": "Sample app", "title": "Fleet Geofence Monitor", "description": "Design zones and run an actionable live enter/exit event queue.", "href": "/samples/fleet-geofence", "eyebrow": "Production pattern · 7 tests", "keywords": "Node.js Browser UI InTouch adapter intouch-telematics maps Draft → publish → breach → acknowledge → resolve Responsive exception queue Validated geofence geometry Versioned provider rule identity Immutable source activity ledger Jitter suppression without evidence loss Asset-scope enforcement Named case ownership and SLA Evidence-backed resolution Safe rule retirement Idempotent activity ingestion Optimistic concurrency Transactional outbox Restart recovery" } ``` ## search-destination · Retail Site Lab - Identity: `search-destination:Sample app:sample-app:retail-site-lab` - Canonical: https://developer.mappls.com/samples/retail-site-lab ```json { "id": "sample-app:retail-site-lab", "kind": "Sample app", "title": "Retail Site Lab", "description": "Compare candidate sites through immutable dataset versions, reproducible scoring, lineage, and governed sharing.", "href": "/samples/retail-site-lab", "eyebrow": "Advanced · 8 tests", "keywords": "Node.js Browser UI mGIS adapter Insight lineage gis-analytics search-places Version → validate → publish → process → share → revoke Responsive decision lab Immutable dataset versions Content-hash deduplication CRS and feature diagnostics Reproducible weighted scoring Parameter and input lineage Failed-attempt retry links Audience, expiry, export, and embed policy Share revocation without evidence loss Idempotent commands Optimistic concurrency Transactional outbox Restart recovery" } ``` ## search-destination · Weekend Trip Planner - Identity: `search-destination:Sample app:sample-app:trip-planner` - Canonical: https://developer.mappls.com/samples/trip-planner ```json { "id": "sample-app:trip-planner", "kind": "Sample app", "title": "Weekend Trip Planner", "description": "Preserve Mappls place identity through a durable ordered itinerary, route revisions, progress, and completion.", "href": "/samples/trip-planner", "eyebrow": "Starter · 8 tests", "keywords": "Node.js Responsive itinerary UI Search adapter Routes adapter maps search-places routes-navigation app-widgets-deep-links Discover → save → sequence → preview → go → complete Responsive itinerary planner Provider-backed discovery provenance Mappls Pin identity continuity Bounded duplicate-free stops Exact sequence validation Profile-aware multi-leg routes Immutable route revisions Automatic stale-route invalidation Ordered visit and explicit skip progress Pause, resume, and deliberate cancellation Completion invariants Idempotent commands Optimistic concurrency Transactional outbox Restart recovery" } ``` ## search-destination · Incident Dispatch - Identity: `search-destination:Sample app:sample-app:incident-dispatch` - Canonical: https://developer.mappls.com/samples/incident-dispatch ```json { "id": "sample-app:incident-dispatch", "kind": "Sample app", "title": "Incident Dispatch", "description": "Resolve an incident, choose a capable available responder, route, track evidence, enforce arrival, and review.", "href": "/samples/incident-dispatch", "eyebrow": "Advanced · 8 tests", "keywords": "Node.js Browser control room Search adapter Routes adapter InTouch adapter search-places routes-navigation intouch-telematics gis-analytics Report → locate → dispatch → route → coordinate → resolve → review Responsive incident command UI Stable CAD identity Confidence-bearing location resolution Capability and availability filtering Matrix ETA responder ranking Active-unit double-dispatch prevention Assigned-unit acceptance Vehicle-aware route identity Event-time telemetry ordering Late evidence without state regression Hazard updates Objective arrival policy Resolution evidence Attributable review metrics Idempotent commands Optimistic concurrency Transactional outbox Restart recovery" } ``` ## search-destination · Address Verifier - Identity: `search-destination:Sample app:sample-app:address-verifier` - Canonical: https://developer.mappls.com/samples/address-verifier ```json { "id": "sample-app:address-verifier", "kind": "Sample app", "title": "Address Verifier", "description": "Normalize an address, govern consented device evidence, apply versioned policy, and retain an attributable decision.", "href": "/samples/address-verifier", "eyebrow": "Production pattern · 8 tests", "keywords": "Node.js Browser trust studio Search adapter Evidence ledger search-places capture-feedback Enter → normalize → consent → capture → compare → decide → redact Responsive trust studio Stable external business identity Mappls Pin normalization and provenance Purpose-bound expiring consent Consent revocation Immutable device-evidence ledger Event and receipt time Accuracy-bearing capture Evidence content hashes Versioned distance policy Mandatory weak-evidence review Automated override prevention Precise-data redaction with audit retention Idempotent commands Optimistic concurrency Transactional outbox Restart recovery" } ``` ## search-destination · Map Story - Identity: `search-destination:Sample app:sample-app:map-story` - Canonical: https://developer.mappls.com/samples/map-story ```json { "id": "sample-app:map-story", "kind": "Sample app", "title": "Map Story", "description": "Compile validated GeoJSON into an accessible, deterministic, source-disclosed narrative map.", "href": "/samples/map-story", "eyebrow": "Starter · 5 tests", "keywords": "Node.js Accessible scrollytelling UI GeoJSON compiler maps gis-analytics Validate → compile → encode → narrate → share Responsive scrollytelling experience Bounded GeoJSON compiler Geometry and coordinate validation Unique feature and sequence identity Numeric range enforcement Markup-safe narrative content Derived geographic bounds and metrics Deterministic documented visual encoding Keyboard-accessible map points Scroll, focus, and URL synchronization Required source, date, and license disclosure Honest fixture labelling" } ``` ## search-destination · Spatial Operations Agent - Identity: `search-destination:Sample app:sample-app:spatial-agent` - Canonical: https://developer.mappls.com/samples/spatial-agent ```json { "id": "sample-app:spatial-agent", "kind": "Sample app", "title": "Spatial Operations Agent", "description": "Research, plan, approve, execute, and cite grounded Mappls MCP operations through fixture, local stdio, or authenticated remote transports.", "href": "/samples/spatial-agent", "eyebrow": "Advanced · 15 tests", "keywords": "Node.js Browser agent lab Mappls MCP SDK client ai-location search-places routes-navigation intouch-telematics Ask → plan → review → approve → execute → cite Responsive governed-agent UI Six-pattern agent authority planner Twelve conditional governance controls Eight-dimension evaluation contract Credential-free solution research All sixteen industries and thirteen platform targets Deterministic fixture boundary Real local stdio MCP client Authenticated Streamable HTTP MCP client Offline and live-read profile isolation HTTPS and exact endpoint validation Bounded arguments, calls, buffers, and outputs Advertised-tool enforcement Gateway credential non-echo Deterministic allow-listed plans Immutable SHA-256 plan identity Human approval as a state transition Explicit least-privilege scopes Expiring approvals Sensitive live-location risk class Dependency-bound tool execution Provider provenance on every live result Explicit catalog provenance for offline tools Grounded per-step citations Secret-safe failure persistence Idempotent commands Optimistic concurrency Transactional outbox Graceful MCP shutdown Restart recovery" } ``` ## search-destination · A2A Solution Studio - Identity: `search-destination:Sample app:sample-app:a2a-solution-studio` - Canonical: https://developer.mappls.com/samples/a2a-solution-studio ```json { "id": "sample-app:a2a-solution-studio", "kind": "Sample app", "title": "A2A Solution Studio", "description": "Discover the Mappls A2A v1 service, delegate exact offline or purpose-bound live-read work, reconcile ambiguous outcomes, and review immutable artifacts without elevating their authority.", "href": "/samples/a2a-solution-studio", "eyebrow": "Advanced · 21 tests", "keywords": "Node.js Responsive coordination UI Official A2A SDK client Durable evidence ledger ai-location search-places routes-navigation intouch-telematics Draft → discover profile → delegate → reconcile → review → accept or reject Responsive A2A coordination studio Official A2A v1 SDK client JSONRPC and HTTP+JSON negotiation OAuth-protected A2A client Transport token non-persistence Agent Card OAuth contract validation Offline and live-read profile discovery All ten live-read command contracts Exact live-read OAuth scope Purpose and data-class evidence One-read authority validation Provider payload excluded from audit Credential-free zero-network fixture Agent Card SHA-256 fingerprint Advertised-skill and protocol validation Client-owned message and context identity Server-assigned task identity Unknown-outcome context reconciliation Structured-only command allowlist Canonical command and artifact digests Offline authority non-escalation Live authority non-escalation Human accept and reject review Explicit no provider writes Explicit no production approval Idempotent commands Changed-intent replay rejection Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Bounded input and Agent Card HTTPS outside loopback" } ``` ## search-destination · MCP Identity Interoperability Lab - Identity: `search-destination:Sample app:sample-app:mcp-identity-lab` - Canonical: https://developer.mappls.com/samples/mcp-identity-lab ```json { "id": "sample-app:mcp-identity-lab", "kind": "Sample app", "title": "MCP Identity Interoperability Lab", "description": "Provision, discover, validate, and revoke a remote MCP client through a signed, replay-safe control-plane adapter and a non-issuing OAuth interoperability sandbox.", "href": "/samples/mcp-identity-lab", "eyebrow": "Advanced · 13 tests", "keywords": "Node.js Signed pre-registration adapter OAuth discovery validator Durable audit UI ai-location Approve → deliver → register → discover → validate → revoke Responsive identity boundary explorer Worker-compatible HMAC-SHA256 envelope Five-minute signature freshness window Strict 32 KiB request bound Secret-shaped field rejection Public and confidential callback policy Deterministic non-secret client identity Signed retry contract compatibility Exact replay and event conflict handling Durable signed-event receipts RFC 9728 protected-resource metadata RFC 8414 authorization-server metadata Exact OAuth resource indicator PKCE S256 request validation Exact redirect and least-scope checks No authorization-code or token issuance Idempotent conformance runs Typed revocation outcomes Append-only audit evidence Atomic file persistence Restart recovery" } ``` ## search-destination · Vision Evidence Desk - Identity: `search-destination:Sample app:sample-app:vision-evidence-desk` - Canonical: https://developer.mappls.com/samples/vision-evidence-desk ```json { "id": "sample-app:vision-evidence-desk", "kind": "Sample app", "title": "Vision Evidence Desk", "description": "Lock a SkyDNN model to an immutable asset identity, record a synchronous fixture inference, validate geometry and confidence, review independently, and redact derived detections on schedule.", "href": "/samples/vision-evidence-desk", "eyebrow": "Advanced · 10 tests", "keywords": "Node.js Responsive review UI SkyDNN synchronous adapter Evidence and retention ledger ai-location gis-analytics capture-feedback Register → lock model → infer → validate → review → decide → redact Responsive vision-review desk Public OpenAPI and marketing boundary separation Synchronous provider contract separated from application workflow No image body, media URL, credential, face, plate, or internal path input Opaque asset references and SHA-256 identity Purpose, lawful-basis, capture-time, and retention gates Entitled model-discovery fixture Immutable model fingerprint lock Idempotent inference attempts Normalized rectangle, polygon, and polyline validation Confidence and sensitive-class review policy Independent reviewer separation of duties Attributable acceptance and rejection Derived-output redaction with minimum audit retention Secret-safe provider failures Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free fixture mode" } ``` ## search-destination · Widget Journey Host - Identity: `search-destination:Sample app:sample-app:widget-journey-host` - Canonical: https://developer.mappls.com/samples/widget-journey-host ```json { "id": "sample-app:widget-journey-host", "kind": "Sample app", "title": "Widget Journey Host", "description": "Own a complete place-selection journey around a Mappls widget: launch, recover through fallback, normalize a candidate, commit deliberately, invalidate stale selection, and submit exactly once in effect.", "href": "/samples/widget-journey-host", "eyebrow": "Production pattern · 8 tests", "keywords": "Node.js Responsive host form UI Widget message adapter Durable evidence store app-widgets-deep-links search-places Draft → open → candidate → commit → submit Responsive widget-host journey Exact-origin postMessage validation Versioned candidate schema Mappls Pin normalization Opaque provider result rejection Application-owned durable selection Useful manual fallback Stale-selection invalidation after host edits Deliberate cancellation Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Restart recovery Credential-free fixture mode" } ``` ## search-destination · Deep-link & Native UI Journey Host - Identity: `search-destination:Sample app:sample-app:deep-link-journey-host` - Canonical: https://developer.mappls.com/samples/deep-link-journey-host ```json { "id": "sample-app:deep-link-journey-host", "kind": "Sample app", "title": "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.", "href": "/samples/deep-link-journey-host", "eyebrow": "Production pattern · 11 tests", "keywords": "Node.js Responsive two-lane journey UI iOS native fixture adapters Durable evidence store app-widgets-deep-links routes-navigation intouch-telematics Draft → edit → validate → select or review → acknowledge Responsive direction and geofence journey lab Exact documented Mappls navigation HTTPS fallback Validated Mappls app URI Explicit no-return-callback evidence boundary Versioned host-owned iOS adapter envelopes Stale editor generation rejection Immutable route and geometry draft revisions Route-index and intent-match validation Navigation request separated from target acceptance Circle radius and coordinate bounds Canonical non-crossing polygon validation SHA-256 geometry identity Independent geofence reviewer separation of duties Approved application draft separated from provider publication No invented geofence deep link or rule identity Idempotent commands Cross-aggregate replay rejection Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free fixture mode" } ``` ## search-destination · Place Contribution Desk - Identity: `search-destination:Sample app:sample-app:place-contribution-desk` - Canonical: https://developer.mappls.com/samples/place-contribution-desk ```json { "id": "sample-app:place-contribution-desk", "kind": "Sample app", "title": "Place Contribution Desk", "description": "Embed the public Add a Place form, preserve contributor-reported submission as testimony, reconcile independently, and close only with attributable publication evidence.", "href": "/samples/place-contribution-desk", "eyebrow": "Production pattern · 8 tests", "keywords": "Node.js Responsive operations UI Add a Place iframe Reconciliation evidence ledger app-widgets-deep-links capture-feedback search-places Draft → open → report → reconcile → publish, reject, or withdraw Responsive contribution operations desk Corrected public iframe query shape No undocumented submission endpoint No invented callback or receipt Contributor testimony separated from provider evidence Seven explicit lifecycle states Immutable widget attempts Mappls Pin evidence validation Allow-listed evidence sources Explicit application-side withdrawal boundary Rejection and immutable retry Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free fixture mode" } ``` ## search-destination · RealView Inspection Desk - Identity: `search-destination:Sample app:sample-app:realview-inspection-desk` - Canonical: https://developer.mappls.com/samples/realview-inspection-desk ```json { "id": "sample-app:realview-inspection-desk", "kind": "Sample app", "title": "RealView Inspection Desk", "description": "Qualify paid RealView access, open bounded viewer attempts, validate the documented no-imagery signal, record human observations, and require separate review without persisting tokens or imagery.", "href": "/samples/realview-inspection-desk", "eyebrow": "Advanced · 10 tests", "keywords": "Node.js Responsive inspection UI RealView Auth2 adapter Human evidence and review ledger app-widgets-deep-links maps capture-feedback Draft → entitle → view → observe → review → accept or rework Responsive remote-inspection desk Paid-entitlement state separated from application state No credential or token-bearing URL input Non-secret entitlement references Ephemeral token-handle model Exact Auth2 origin equality One-field status-204 schema validation Lookalike-origin rejection HTTP shell and coverage evidence separation Immutable viewer attempts Human observations without provider metadata No imagery or screenshot persistence Inspector-reviewer separation of duties Entitlement expiry recovery Immutable rework Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free fixture mode" } ``` ## search-destination · Offline Release Control - Identity: `search-destination:Sample app:sample-app:offline-release-control` - Canonical: https://developer.mappls.com/samples/offline-release-control ```json { "id": "sample-app:offline-release-control", "kind": "Sample app", "title": "Offline Release Control", "description": "Operate an entitled offline or automotive runtime as one compatible, dual-slot release across manufacture, activation, installation, qualification, update, interruption, rollback, and retirement.", "href": "/samples/offline-release-control", "eyebrow": "Advanced · 10 tests", "keywords": "Node.js Responsive fleet release UI A/B slot controller Manifest and qualification ledger offline-automotive maps routes-navigation Manufacture → activate → install → qualify → update → recover → retire Responsive fleet release console Public and local evidence-generation separation No runtime, map package, binary, license, activation key, credential, or URL input Non-secret entitlement evidence Runtime/data/configuration/voice manifest unit Exact CPU/ABI/OS/graphics compatibility SHA-256 manifest and component identities Independent signature and observed-digest attestations Dual-slot active and known-good invariants Download, verify, stage, switch, and qualify checkpoints Seven-lane deterministic qualification suite Power-loss recovery before atomic switch Power-loss rollback after switch Post-qualification regression rollback Activation expiry and offline-grace gate Retirement without history deletion Idempotent commands Optimistic concurrency Append-only audit events Transactional outbox Atomic restart recovery Credential-free fixture mode" } ``` ## stateful-product · Search & Places - Identity: `stateful-product:search-places` - Canonical: https://developer.mappls.com/tools/stateful?product=search-places - State model: stateless ```json { "slug": "search-places", "name": "Search & Places", "stateModel": "stateless", "ownership": "application-stateful", "accent": "#00a88f", "journeyCount": 1, "boundary": "Search & Places is stateless at the product boundary for this catalog, while the published consent, selection, inspection, or publication journeys are application-owned state machines. Do not attribute those states to Mappls.", "aggregates": [ "address verification" ], "journeySlugs": [ "consented-address-verification" ], "sampleSlugs": [ "address-verifier" ], "tutorialSlugs": [ "address-autocomplete", "nearby-discovery", "mappls-mcp-agent", "a2a-solution-coordination", "oauth-server-integration", "flutter-map", "rest-geocode-service", "reverse-geocode-check-in", "web-widget-place-picker", "cordova-map", "xamarin-map", "distance-matrix-dispatch", "cordova-release-hardening", "deep-link-attribution-resilience", "flutter-production-lifecycle", "ios-sdk-production-readiness", "react-native-native-parity", "widget-host-production", "xamarin-maintenance-migration" ], "useCaseSlugs": [ "last-mile-delivery", "ride-hailing", "retail-expansion", "banking-address-risk", "hospital-care-logistics", "emergency-response", "connected-vehicle", "travel-discovery" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api" ], "sourceGuideSlugs": [ "mappls-rest-apis" ], "totals": { "states": 9, "transitions": 11, "failurePlans": 4, "durableRecords": 5, "operationalSignals": 8 } } ``` ## stateful-product · Routes & Navigation - Identity: `stateful-product:routes-navigation` - Canonical: https://developer.mappls.com/tools/stateful?product=routes-navigation - State model: hybrid ```json { "slug": "routes-navigation", "name": "Routes & Navigation", "stateModel": "hybrid", "ownership": "hybrid-provider-application", "accent": "#ff7a45", "journeyCount": 4, "boundary": "Routes & Navigation combines request/response capabilities with durable sessions, workspaces, releases, reviews, or agent runs. Persist the business journey independently from any one provider response.", "aggregates": [ "incident", "navigation session", "trip itinerary", "route planning session" ], "journeySlugs": [ "emergency-incident-response", "navigation-session", "durable-weekend-itinerary", "ios-direction-planning-handoff" ], "sampleSlugs": [ "incident-dispatch", "trip-planner", "deep-link-journey-host" ], "tutorialSlugs": [ "route-preview", "delivery-eta", "mappls-mcp-agent", "a2a-solution-coordination", "oauth-server-integration", "navigation-deep-link", "distance-matrix-dispatch", "traffic-aware-commute", "intouch-trip-lifecycle", "cordova-release-hardening", "deep-link-attribution-resilience", "flutter-production-lifecycle", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs", "react-native-native-parity", "widget-host-production", "xamarin-maintenance-migration" ], "useCaseSlugs": [ "last-mile-delivery", "ride-hailing", "field-service", "energy-grid-resilience", "insurance-claims", "hospital-care-logistics", "emergency-response", "connected-vehicle", "travel-discovery", "telecom-network-care" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-rest-key-rev-geocode-reverse-geocode-api", "core-location-get-rest-key-resources-profile-geopositions-distance-matrix-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device" ], "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "mapmyindia-intouch-rest-apis", "mappls-android-sdk", "mappls-ios-sdk", "mappls-react-native-sdk", "mapmyindia-maps-vectorsdk-android", "mapmyindia-maps-vectorsdk-ios", "mappls-direction-ui-ios-distribution", "mappls-direction-ui-ios-distribution-base" ], "totals": { "states": 27, "transitions": 31, "failurePlans": 17, "durableRecords": 16, "operationalSignals": 28 } } ``` ## stateful-product · InTouch Telematics - Identity: `stateful-product:intouch-telematics` - Canonical: https://developer.mappls.com/tools/stateful?product=intouch-telematics - State model: stateful ```json { "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 } } ``` ## stateful-product · Workmate - Identity: `stateful-product:workmate` - Canonical: https://developer.mappls.com/tools/stateful?product=workmate - State model: stateful ```json { "slug": "workmate", "name": "Workmate", "stateModel": "stateful", "ownership": "provider-stateful", "accent": "#3478f6", "journeyCount": 1, "boundary": "Workmate exposes durable operational resources. Mirror provider identity and lifecycle evidence in an application aggregate; an accepted request is not a completed business outcome.", "aggregates": [ "task" ], "journeySlugs": [ "field-service-task" ], "sampleSlugs": [ "field-service" ], "tutorialSlugs": [ "workmate-task-lifecycle", "webhook-reliability", "workmate-proof-review", "ios-sdk-production-readiness", "react-native-native-parity" ], "useCaseSlugs": [ "field-service", "energy-grid-resilience", "insurance-claims", "smart-city-operations", "aviation-ground-operations", "agriculture-field-ops", "mining-haulage-safety", "telecom-network-care" ], "contractSlugs": [ "workmate-post-tasks-to-create-new-task", "workmate-get-tasks-taskid-to-get-the-task-details-for-the-given-task-id", "workmate-put-tasks-taskid-to-update-the-task-description-status", "workmate-get-users-to-get-all-the-user-details-which-belongs-to-your-organization", "workmate-get-clients-to-get-all-your-client-details" ], "sourceGuideSlugs": [ "mapmyindia-workmate-apis", "mappls-workmate-android-sdk" ], "totals": { "states": 8, "transitions": 8, "failurePlans": 4, "durableRecords": 4, "operationalSignals": 6 } } ``` ## stateful-product · GIS & Analytics - Identity: `stateful-product:gis-analytics` - Canonical: https://developer.mappls.com/tools/stateful?product=gis-analytics - State model: hybrid ```json { "slug": "gis-analytics", "name": "GIS & Analytics", "stateModel": "hybrid", "ownership": "hybrid-provider-application", "accent": "#17a8e3", "journeyCount": 1, "boundary": "GIS & Analytics combines request/response capabilities with durable sessions, workspaces, releases, reviews, or agent runs. Persist the business journey independently from any one provider response.", "aggregates": [ "analysis run" ], "journeySlugs": [ "governed-spatial-analysis" ], "sampleSlugs": [ "retail-site-lab" ], "tutorialSlugs": [ "gis-site-selection", "webhook-reliability", "geojson-operations-layer" ], "useCaseSlugs": [ "field-service", "energy-grid-resilience", "retail-expansion", "banking-address-risk", "insurance-claims", "hospital-care-logistics", "emergency-response", "smart-city-operations", "aviation-ground-operations", "agriculture-field-ops", "mining-haulage-safety", "telecom-network-care" ], "contractSlugs": [], "sourceGuideSlugs": [ "mapmyindia-mgis-apis", "mapmyindia-mgis-libraries", "mappls-insight-sdk" ], "totals": { "states": 7, "transitions": 6, "failurePlans": 4, "durableRecords": 4, "operationalSignals": 6 } } ``` ## stateful-product · App Widgets & Deep Links - Identity: `stateful-product:app-widgets-deep-links` - Canonical: https://developer.mappls.com/tools/stateful?product=app-widgets-deep-links - State model: stateless ```json { "slug": "app-widgets-deep-links", "name": "App Widgets & Deep Links", "stateModel": "stateless", "ownership": "application-stateful", "accent": "#ff4f64", "journeyCount": 2, "boundary": "App Widgets & Deep Links is stateless at the product boundary for this catalog, while the published consent, selection, inspection, or publication journeys are application-owned state machines. Do not attribute those states to Mappls.", "aggregates": [ "widget selection session", "remote visual inspection" ], "journeySlugs": [ "widget-selection-session", "realview-remote-inspection" ], "sampleSlugs": [ "widget-journey-host", "realview-inspection-desk" ], "tutorialSlugs": [ "deep-link-campaign", "web-widget-place-picker", "navigation-deep-link", "deep-link-attribution-resilience", "ios-sdk-production-readiness", "ios-direction-geofence-handoffs", "widget-host-production" ], "useCaseSlugs": [ "travel-discovery" ], "contractSlugs": [], "sourceGuideSlugs": [ "mappls-app-widgets", "mappls-android-sdk", "mappls-ui-widget-ios-distribution", "mappls-ui-widget-ios-distribution-base", "mappls-flutter-sdk", "mappls-react-native-sdk", "mappls-web-maps-js" ], "totals": { "states": 17, "transitions": 19, "failurePlans": 11, "durableRecords": 9, "operationalSignals": 16 } } ``` ## stateful-product · Offline & Automotive - Identity: `stateful-product:offline-automotive` - Canonical: https://developer.mappls.com/tools/stateful?product=offline-automotive - State model: stateful ```json { "slug": "offline-automotive", "name": "Offline & Automotive", "stateModel": "stateful", "ownership": "provider-stateful", "accent": "#d6a600", "journeyCount": 1, "boundary": "Offline & Automotive exposes durable operational resources. Mirror provider identity and lifecycle evidence in an application aggregate; an accepted request is not a completed business outcome.", "aggregates": [ "device release" ], "journeySlugs": [ "offline-automotive-release" ], "sampleSlugs": [ "offline-release-control" ], "tutorialSlugs": [ "offline-package-update", "linux-map-client", "ios-sdk-production-readiness" ], "useCaseSlugs": [ "connected-vehicle", "mining-haulage-safety" ], "contractSlugs": [], "sourceGuideSlugs": [], "totals": { "states": 7, "transitions": 7, "failurePlans": 4, "durableRecords": 4, "operationalSignals": 6 } } ``` ## stateful-product · AI & Location - Identity: `stateful-product:ai-location` - Canonical: https://developer.mappls.com/tools/stateful?product=ai-location - State model: hybrid ```json { "slug": "ai-location", "name": "AI & Location", "stateModel": "hybrid", "ownership": "hybrid-provider-application", "accent": "#845ef7", "journeyCount": 2, "boundary": "AI & Location combines request/response capabilities with durable sessions, workspaces, releases, reviews, or agent runs. Persist the business journey independently from any one provider response.", "aggregates": [ "agent run", "vision evidence case" ], "journeySlugs": [ "governed-spatial-agent-run", "vision-inference-review" ], "sampleSlugs": [ "spatial-agent", "vision-evidence-desk" ], "tutorialSlugs": [ "mappls-mcp-agent", "a2a-solution-coordination", "mcp-client-identity", "ios-sdk-production-readiness" ], "useCaseSlugs": [ "insurance-claims" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-api-places-nearby-json-nearby-api", "core-location-get-rest-key-resources-profile-geopositions-routing-api", "intouch-get-devices-gets-the-live-data-of-devices", "skydnn-ai-get-server-whoami-returns-the-current-models-in-port", "skydnn-ai-get-models-api-model-key-returns-the-details-of-provided-model", "skydnn-ai-post-predict-returns-the-prediction-as-response-in-form-of-json" ], "sourceGuideSlugs": [ "mappls-rest-apis", "mappls-intouch-rest-apis", "skydnn-aiapi-docs" ], "totals": { "states": 15, "transitions": 14, "failurePlans": 10, "durableRecords": 11, "operationalSignals": 14 } } ``` ## stateful-product · Capture & Feedback - Identity: `stateful-product:capture-feedback` - Canonical: https://developer.mappls.com/tools/stateful?product=capture-feedback - State model: hybrid ```json { "slug": "capture-feedback", "name": "Capture & Feedback", "stateModel": "hybrid", "ownership": "hybrid-provider-application", "accent": "#1c9c62", "journeyCount": 3, "boundary": "Capture & Feedback combines request/response capabilities with durable sessions, workspaces, releases, reviews, or agent runs. Persist the business journey independently from any one provider response.", "aggregates": [ "feedback report", "location capture attempt", "place contribution" ], "journeySlugs": [ "ios-feedback-report-review", "location-capture-evidence", "place-contribution-publication" ], "sampleSlugs": [ "place-contribution-desk", "address-verifier" ], "tutorialSlugs": [ "reverse-geocode-check-in", "workmate-proof-review", "flutter-production-lifecycle", "ios-sdk-production-readiness", "react-native-native-parity", "widget-host-production" ], "useCaseSlugs": [ "last-mile-delivery", "field-service", "energy-grid-resilience", "banking-address-risk", "insurance-claims", "hospital-care-logistics", "aviation-ground-operations", "agriculture-field-ops", "mining-haulage-safety", "telecom-network-care" ], "contractSlugs": [ "core-location-get-api-places-search-json-autosuggest-api", "core-location-get-apis-o2o-entity-eloc-place-detail-api" ], "sourceGuideSlugs": [ "mappls-feedback-kit-ios-distribution", "mappls-feedback-kit-ios-distribution-base", "mappls-feedback-uikit-ios-distribution", "mappls-feedback-uikit-ios-distribution-base", "mappls-location-capture-android-sdk", "mappls-location-capture-ios-sdk", "mappls-location-capture-sdk-ios-distribution", "mappls-app-widgets", "mappls-rest-apis" ], "totals": { "states": 24, "transitions": 26, "failurePlans": 14, "durableRecords": 12, "operationalSignals": 23 } } ``` ## developer-experience-benchmark · Developer-experience benchmark - Identity: `developer-experience-benchmark:current` - Canonical: https://developer.mappls.com/benchmark ```json { "schemaVersion": "mappls.developer-experience-benchmark.v1", "verifiedOn": "2026-08-18", "summary": { "officialPatterns": 4, "criteria": 20, "evidencedCriteria": 20, "externalGates": 1 }, "proof": { "products": 10, "platforms": 13, "capabilityDecisions": 130, "qualificationPlans": 130, "apiOperations": 162, "sdkAndDistributionRecords": 58, "tutorials": 40, "learningPaths": 624, "implementationRecipes": 48, "statefulJourneys": 18, "journeyWorkshops": 18, "applicationEventContracts": 138, "maintainedApps": 21, "declaredSampleTests": 222, "searchDestinations": 714, "mcpOfflineTools": 32, "mcpLiveReadTools": 42 }, "comparators": [ { "id": "stripe-outcome-to-release", "platform": "Stripe", "pattern": "Outcome-led onboarding connected to setup and release evidence", "observation": "Stripe connects common business use cases to account setup, development environment, keys, quickstarts, testing, migration, and product discovery.", "sources": [ { "label": "Stripe Get started", "url": "https://docs.stripe.com/get-started" } ], "verifiedOn": "2026-08-18", "responseStatus": "differentiated", "mapplsResponse": "Mappls starts from sixteen physical-world outcomes, then preserves exact platform, product, contract, state, runnable proof, environment, and independent release boundaries through one deterministic plan.", "evidence": [ { "label": "Solution architect", "href": "/architect" }, { "label": "Environment readiness", "href": "/environments" }, { "label": "Release model", "href": "/trust" } ] }, { "id": "stripe-agent-and-sandbox", "platform": "Stripe", "pattern": "Agent-native setup, terminal documentation, and anonymous live sandbox", "observation": "Stripe now places agent skills and CLI setup first and documents an anonymous sandbox that can issue working sandbox keys without account registration.", "sources": [ { "label": "Stripe Get started", "url": "https://docs.stripe.com/get-started" } ], "verifiedOn": "2026-08-18", "responseStatus": "external-gate", "mapplsResponse": "Mappls provides a checksummed offline CLI, MCP, A2A, machine discovery, deterministic contract fixtures, and governed live-read profiles. It does not claim anonymous live Mappls credentials: issued non-production accounts and product entitlements remain an external company gate.", "evidence": [ { "label": "Developer CLI", "href": "/cli" }, { "label": "MCP", "href": "/ai" }, { "label": "A2A", "href": "/ai/a2a" }, { "label": "Credential-free sandbox", "href": "/sandbox" }, { "label": "Live conformance", "href": "/conformance" } ] }, { "id": "google-job-and-platform-picker", "platform": "Google Maps Platform", "pattern": "Choose documentation by job, product, and exact runtime", "observation": "Google organizes documentation around jobs and product families, publishes platform-specific API and SDK choices, and connects first tasks to samples, popular docs, and industry solutions.", "sources": [ { "label": "Google Maps documentation", "url": "https://developers.google.com/maps/documentation" }, { "label": "APIs by platform", "url": "https://developers.google.com/maps/apis-by-platform" } ], "verifiedOn": "2026-08-18", "responseStatus": "differentiated", "mapplsResponse": "The Mappls architect, product-platform matrix, Qualification Center, platform playbooks, quickstarts, and industry blueprints keep unsupported and evidence-selection cells visible instead of inferring availability from a nearby SDK or sample.", "evidence": [ { "label": "Capability matrix", "href": "/platforms/matrix" }, { "label": "Qualification Center", "href": "/platforms/qualify" }, { "label": "Platform playbooks", "href": "/platforms" }, { "label": "Industry solutions", "href": "/use-cases" } ] }, { "id": "apple-technology-overviews", "platform": "Apple Developer", "pattern": "Choose a technology before entering deep reference material", "observation": "Apple Technology Overviews provide high-level selection guidance, then lead into API reference, articles, sample code, and tutorials for the chosen technology.", "sources": [ { "label": "Apple Technology Overviews", "url": "https://developer.apple.com/documentation/TechnologyOverviews" } ], "verifiedOn": "2026-08-18", "responseStatus": "adopted", "mapplsResponse": "Thirteen Mappls platform playbooks establish architecture, lifecycle, and evidence boundaries before developers enter exact quickstarts, source-derived reference, migration guidance, tutorials, and tested downloadable applications.", "evidence": [ { "label": "Platform playbooks", "href": "/platforms" }, { "label": "Quickstarts", "href": "/quickstart" }, { "label": "SDK center", "href": "/sdks" }, { "label": "Sample applications", "href": "/samples" } ] } ], "criteria": [ { "number": 1, "pillar": "discover", "id": "many-entry-points", "title": "Start from the developer's context", "requirement": "A developer can begin from an outcome, product, platform, operation, migration, or already provisioned application.", "evidence": [ { "label": "Architect", "href": "/architect" }, { "label": "Global search", "href": "/api/search" }, { "label": "Developer console", "href": "/console" } ] }, { "number": 2, "pillar": "ai-and-trust", "id": "evidence-classes", "title": "Name the evidence class", "requirement": "Recommendations must not turn a repository, adjacent package, fixture, or generated plan into entitlement proof.", "evidence": [ { "label": "Trust model", "href": "/trust" }, { "label": "Source Atlas", "href": "/sources" } ] }, { "number": 3, "pillar": "build", "id": "state-model-separation", "title": "Separate calls from journeys", "requirement": "Stateless request-response work remains distinct from durable aggregates, provider resources, unknown outcomes, and human decisions.", "evidence": [ { "label": "Stateful planner", "href": "/tools/stateful" }, { "label": "Journey Lab", "href": "/tools/journey-lab" } ] }, { "number": 4, "pillar": "discover", "id": "one-canonical-catalog", "title": "Publish one canonical catalog", "requirement": "Human pages, search, sitemap, JSON, llms.txt, console launch packs, MCP, and A2A derive from the same records.", "evidence": [ { "label": "Catalog API", "href": "/api/catalog" }, { "label": "AI discovery", "href": "/.well-known/mappls-ai.json" } ] }, { "number": 5, "pillar": "build", "id": "first-success-exit", "title": "Make first success operational", "requirement": "A quickstart includes credential ownership, observable failure, cleanup, and production exit evidence—not only a screenshot.", "evidence": [ { "label": "Quickstarts", "href": "/quickstart" }, { "label": "Authentication", "href": "/authentication" } ] }, { "number": 6, "pillar": "build", "id": "maintained-samples", "title": "Ship maintained full applications", "requirement": "Every maintained sample is downloadable, tested, explicit about fixture versus live behavior, and restart-aware when stateful.", "evidence": [ { "label": "Sample applications", "href": "/samples" } ] }, { "number": 7, "pillar": "ai-and-trust", "id": "machine-parity", "title": "Give machines the same plan", "requirement": "Machine consumers retrieve canonical plans without scraping prose or receiving credentials.", "evidence": [ { "label": "AI-native center", "href": "/ai" }, { "label": "llms.txt", "href": "/llms.txt" } ] }, { "number": 8, "pillar": "build", "id": "terminal-parity", "title": "Support terminal-first development", "requirement": "The CLI searches the same catalog, creates exact platform starters, and inspects trust boundaries offline.", "evidence": [ { "label": "Developer CLI", "href": "/cli" }, { "label": "Starter kits", "href": "/starter-kits" } ] }, { "number": 9, "pillar": "operate", "id": "failure-path", "title": "Give every failure one safe path", "requirement": "Status and code evidence leads to fix, bounded retry, reconciliation, console correlation, and minimized support evidence.", "evidence": [ { "label": "Diagnostics", "href": "/errors" }, { "label": "Request logs", "href": "/console/logs" } ] }, { "number": 10, "pillar": "operate", "id": "environment-promotion", "title": "Promote artifacts, not secrets", "requirement": "Development, staging, and production evidence remain isolated; promotion never copies credentials or state and production stays independently governed.", "evidence": [ { "label": "Environments", "href": "/environments" }, { "label": "Release governance", "href": "/admin/releases" } ] }, { "number": 11, "pillar": "ai-and-trust", "id": "agent-authority", "title": "Design AI authority before tools", "requirement": "Every AI application fixes pattern, deployment, provider mode, data class, allowlist, human control, evaluations, and production evidence first.", "evidence": [ { "label": "Agent Integration Center", "href": "/ai/agents" } ] }, { "number": 12, "pillar": "build", "id": "hostile-journeys", "title": "Execute hostile durable journeys", "requirement": "Every durable journey covers success, replay, stale version, invalid transition, and unknown outcome without requiring an account.", "evidence": [ { "label": "Journey Lab", "href": "/tools/journey-lab" }, { "label": "Journey workshops", "href": "/journeys" } ] }, { "number": 13, "pillar": "learn", "id": "outcome-learning", "title": "Learn from outcome to production exit", "requirement": "Curricula join an industry outcome and exact runtime to canonical code, reliability practice, a tested capstone, and non-certifying release criteria.", "evidence": [ { "label": "Developer Academy", "href": "/academy" } ] }, { "number": 14, "pillar": "learn", "id": "composed-recipes", "title": "Teach increasing operating depth", "requirement": "Developers move from isolated contracts to composed experiences and durable operations without losing provenance, ownership, recovery, or runnable proof.", "evidence": [ { "label": "Implementation recipes", "href": "/recipes" } ] }, { "number": 15, "pillar": "build", "id": "application-workspace", "title": "Join guidance to actual application evidence", "requirement": "One tenant workspace combines product, credential-status, event, runtime, recipe, and exact contract evidence without copying a credential.", "evidence": [ { "label": "Developer console", "href": "/console" } ] }, { "number": 16, "pillar": "ai-and-trust", "id": "smallest-ai-authority", "title": "Compute smallest AI authority per application", "requirement": "Live tools map to exact product access while durable state, human decisions, hostile evaluations, and release controls remain outside model context.", "evidence": [ { "label": "AI workspace", "href": "/console/ai" }, { "label": "MCP authority", "href": "/ai" } ] }, { "number": 17, "pillar": "operate", "id": "governed-feedback", "title": "Govern documentation feedback", "requirement": "Revision-bound feedback moves through an assigned owner, different reviewer, immutable evidence, and a publishing handoff without self-publication.", "evidence": [ { "label": "Documentation coverage", "href": "/coverage" } ] }, { "number": 18, "pillar": "learn", "id": "private-progress", "title": "Keep learning progress private", "requirement": "A learner resumes revision-bound modules without an account, analytics inventory, certification claim, or server write.", "evidence": [ { "label": "Developer Academy", "href": "/academy" } ] }, { "number": 19, "pillar": "discover", "id": "private-search", "title": "Keep discovery predictable and private", "requirement": "Every kind has explicit order and scope; queries stay browser-local, totals remain honest, and keyboard focus remains valid.", "evidence": [ { "label": "Search index", "href": "/api/search" } ] }, { "number": 20, "pillar": "operate", "id": "tenant-audit", "title": "Expose tenant-owned control evidence", "requirement": "Every organization can filter and download its minimized append-only changes without cross-tenant rows or raw audit metadata.", "evidence": [ { "label": "Audit workspace", "href": "/console/audit" } ] } ], "authority": { "providerCalls": 0, "credentialsAccepted": false, "competitiveScorePublished": false, "productionApprovalGranted": false, "boundary": "The scorecard proves repository-backed Mappls developer-experience controls and records current official comparison patterns. It does not measure competitor quality, claim product equivalence or superiority, prove Mappls entitlement, or approve production." } } ``` ## mcp-authority · MCP authority and tool profiles - Identity: `mcp-authority:current` - Canonical: https://developer.mappls.com/ai ```json { "profiles": { "offline": { "tools": 32, "providerNetworkCalls": false }, "live-read": { "tools": 42, "providerNetworkCalls": true } }, "resources": 38, "prompts": 2, "writeTools": 0, "sessionMode": "stateless" } ``` ## a2a-authority · A2A service contract - Identity: `a2a-authority:current` - Canonical: https://developer.mappls.com/ai/a2a ```json { "protocol": { "name": "Agent2Agent (A2A)", "version": "1.0", "specificationUrl": "https://a2a-protocol.org/v1.0.0/specification/", "sdk": "@a2a-js/sdk", "sdkVersion": "1.0.1", "sdkUrl": "https://github.com/a2aproject/a2a-js" }, "service": { "package": "@mappls/a2a-server", "agentCardPath": "/.well-known/agent-card.json", "jsonRpcPath": "/a2a/jsonrpc", "restPath": "/a2a/rest", "healthPath": "/healthz", "livenessPath": "/health/live", "readinessPath": "/health/ready", "inputModes": [ "application/json" ], "outputModes": [ "application/json", "text/plain" ], "transports": [ "JSONRPC", "HTTP+JSON" ], "defaultToolProfile": "offline" }, "authentication": { "localMode": "fixture-none-loopback-only", "productionMode": "oauth-jwt", "requiredScope": "mappls:a2a:offline", "liveReadScope": "mappls:a2a:live-read", "defaultTenantClaim": "mappls_tenant_id", "protectedResourceMetadataPath": "/.well-known/oauth-protected-resource/a2a", "verifiedClaims": [ "issuer", "resource audience", "subject", "client", "issued-at", "expiry", "tenant", "scope" ], "storageIdentity": "issuer-bound opaque tenant and subject digests" }, "storage": { "loopbackDefault": "sqlite", "productionRequired": "postgres", "schemaVersion": 1, "migration": "packages/a2a-server/sql/001_a2a_task_store.sql", "recordBytes": 524288, "isolation": "tenant-owner-task composite key", "readiness": "database-backed outside loopback" }, "profiles": { "offline": { "skills": 3, "providerCalls": false, "providerCredentialsRequired": false, "taskPayloadCredentialsAccepted": false, "writesExposed": false }, "live-read": { "skills": 13, "addedProviderReadSkills": 10, "providerCalls": true, "providerCredentialsRequired": true, "taskPayloadCredentialsAccepted": false, "writesExposed": false } }, "skills": [ { "id": "plan-mappls-solution", "name": "Plan a Mappls solution", "description": "Compose one source-grounded industry and platform plan from the canonical 208-plan catalog.", "input": { "useCaseSlug": "last-mile-delivery", "platform": "Android" }, "coverage": "16 industry outcomes × 13 platforms" }, { "id": "inspect-mappls-capability", "name": "Inspect a Mappls capability", "description": "Return one exact product-platform availability decision without promoting adjacent evidence into support.", "input": { "productSlug": "routes-navigation", "platformSlug": "android" }, "coverage": "130 product-platform decisions" }, { "id": "simulate-mappls-journey", "name": "Simulate a stateful Mappls journey", "description": "Execute one deterministic complete or hostile application-owned lifecycle fixture.", "input": { "journeySlug": "connected-fleet-trip", "scenario": "unknown-outcome" }, "coverage": "18 journeys × 5 scenarios" } ], "liveReadSkills": [ { "id": "search-mappls-places", "name": "Search live Mappls places", "product": "Search", "dataClass": "user-place-intent", "purpose": "user-requested-place-discovery" }, { "id": "geocode-mappls-address", "name": "Geocode a live Mappls address", "product": "Search", "dataClass": "user-address", "purpose": "user-requested-place-discovery" }, { "id": "reverse-geocode-mappls-coordinate", "name": "Reverse geocode a live coordinate", "product": "Search", "dataClass": "precise-location", "purpose": "user-requested-place-discovery" }, { "id": "find-mappls-nearby", "name": "Find live nearby Mappls places", "product": "Search", "dataClass": "precise-location", "purpose": "user-requested-place-discovery" }, { "id": "plan-mappls-route-live", "name": "Plan a live Mappls route", "product": "Routes & Navigation", "dataClass": "precise-location", "purpose": "route-planning" }, { "id": "calculate-mappls-matrix", "name": "Calculate a live Mappls matrix", "product": "Routes & Navigation", "dataClass": "precise-location", "purpose": "route-planning" }, { "id": "read-mappls-asset-status", "name": "Read live Mappls asset status", "product": "InTouch", "dataClass": "sensitive-live-location", "purpose": "fleet-operations" }, { "id": "read-mappls-asset-events", "name": "Read Mappls asset events", "product": "InTouch", "dataClass": "sensitive-location-history", "purpose": "safety-investigation" }, { "id": "read-mappls-geofence-activity", "name": "Read Mappls geofence activity", "product": "InTouch", "dataClass": "sensitive-location-history", "purpose": "safety-investigation" }, { "id": "read-mappls-trip-status", "name": "Read live Mappls trip status", "product": "InTouch", "dataClass": "sensitive-operational-state", "purpose": "fleet-operations" } ], "authority": { "profile": "offline", "providerCalls": 0, "providerCredentialsRequired": false, "providerCredentialsAccepted": false, "taskPayloadCredentialsAccepted": false, "freeFormPromptsAccepted": false, "filesAccepted": false, "urlsAccepted": false, "writesExposed": false, "taskPersistence": "postgres-production-sqlite-loopback", "productionApprovalGranted": false, "boundary": "A2A exposes only deterministic public-catalog planning and simulation. It does not call Mappls, accept customer data, persist operational work, grant entitlement, or authorize production." }, "limits": { "requestBytes": 16384, "resultBytes": 131072, "taskBytes": 524288, "oneStructuredPartPerMessage": true }, "deploymentGates": [ "Publish an HTTPS base URL and keep both advertised transports functionally equivalent.", "Add gateway rate limits, concurrency limits, request deadlines, abuse telemetry, and an emergency disablement control.", "Deploy the implemented PostgreSQL task store on an approved highly available service and prove backup, restore, failover, migration, least-privilege role, and pool-capacity behavior.", "Register the implemented OAuth JWT resource boundary with the approved authorization server and prove issuer, audience, tenant, client, scope, consent, revocation, and abuse controls; never reuse a Mappls provider credential as an A2A client credential.", "Keep the offline profile as the public default; enable live-read only with restricted server-held Mappls credentials, exact product entitlement, purpose policy, data minimization, rate limits, and sensitive-location audit evidence.", "Sign the Agent Card only through an approved KMS-backed key and publish independently governed JWKS evidence.", "Run official client interoperability and hostile-input conformance in the release environment." ] } ``` ## agent-skill · Build with Mappls Agent Skill - Identity: `agent-skill:build-with-mappls` - Canonical: https://developer.mappls.com/ai/skills ```json { "schemaVersion": "mappls.agent-skill-integration.v1", "name": "build-with-mappls", "title": "Build with Mappls Agent Skill", "format": "Agent Skills", "specificationUrl": "https://agentskills.io/specification", "guidePath": "/ai/skills", "downloadPath": "/downloads/build-with-mappls-skill.zip", "checksumPath": "/downloads/build-with-mappls-skill.zip.sha256", "sourcePath": "skills/build-with-mappls", "package": { "requiredFile": "SKILL.md", "optionalDirectories": [ "agents", "scripts", "references" ], "progressiveDisclosure": [ "metadata", "instructions", "task-specific references" ], "validationCommand": "python3 scripts/quick_validate.py skills/build-with-mappls" }, "workflows": [ { "id": "select", "title": "Select exact capability", "outcome": "Resolve industry, platform, product, state depth, source generation, and evidence gaps before writing code." }, { "id": "manifest", "title": "Freeze an integration manifest", "outcome": "Generate one canonical use-case × platform × operating-mode contract before implementation." }, { "id": "implement", "title": "Implement the narrowest path", "outcome": "Use exact quickstarts, contracts, SDK records, source launchpads, tutorials, and maintained apps without inventing provider syntax." }, { "id": "state", "title": "Own durable state explicitly", "outcome": "Model identities, transitions, idempotency, concurrency, reconciliation, audit, privacy, and recovery outside model context." }, { "id": "qualify", "title": "Qualify and hand off", "outcome": "Prove fixtures first, then separately validate issued-account behavior and independent production authority." } ], "bundledCommands": [ "summary", "search", "manifest" ], "canonicalInputs": { "searchDestinations": "packages/developer-cli/generated/catalog.json#searchIndex", "integrationManifests": "packages/developer-cli/generated/catalog.json#integrationManifests", "starterKits": "packages/developer-cli/generated/catalog.json#starterKits" }, "authority": { "providerCredentialsAccepted": false, "providerPayloadsAccepted": false, "providerNetworkCalls": 0, "writesExposed": false, "productionApprovalGranted": false, "rule": "The skill packages repository-backed planning and implementation guidance. It cannot prove entitlement, live provider behavior, compatibility, support, customer authority, or production approval." } } ``` ## ai-evaluation-suite · Mappls AI Integration Evaluation Lab - Identity: `ai-evaluation-suite:current` - Canonical: https://developer.mappls.com/ai/evals ```json { "schemaVersion": "mappls.ai-evaluation-suite.v1", "title": "Mappls AI Integration Evaluation Lab", "guidePath": "/ai/evals", "downloadPath": "/downloads/mappls-ai-evaluation-lab.zip", "checksumPath": "/downloads/mappls-ai-evaluation-lab.zip.sha256", "casesPath": "/downloads/mappls-ai-evaluation-cases.jsonl", "casesChecksumPath": "/downloads/mappls-ai-evaluation-cases.jsonl.sha256", "cases": 90, "assertions": 918, "protocolCases": { "mcp": 42, "a2a": 13, "agentSkill": 5, "statefulJourneys": 18, "hostileBoundaries": 12 }, "surfaces": { "a2a": 17, "agent-skill": 9, "mcp": 46, "stateful-journey": 18 }, "dimensions": { "authority": 29, "discovery": 3, "grounding": 35, "handoff": 1, "resilience": 3, "state": 19 }, "profiles": { "fixture": 18, "hostile": 12, "live-read": 20, "offline": 40 }, "offlineRunnable": true, "responseFormat": "mappls.ai-evaluation-response.v1", "authority": { "providerNetworkCalls": 0, "providerCredentialsAccepted": false, "taskPayloadCredentialsAccepted": false, "writesExposed": false, "productionApprovalGranted": false }, "rule": "The lab evaluates deterministic structured contracts and negative authority. It does not grade open-ended model quality, call Mappls providers, accept credentials, prove entitlement, or grant production approval." } ``` ## client-library-studio · Mappls API Client Studio - Identity: `client-library-studio:current` - Canonical: https://developer.mappls.com/client-libraries ```json { "schemaVersion": "mappls.client-library-studio.v1", "title": "Mappls API Client Studio", "guidePath": "/client-libraries", "apiPath": "/api/client-libraries", "languages": 8, "operations": 162, "preferredOperations": 145, "generatedOperationBindings": 1296, "fixtureTests": 8, "bundleFiles": 58, "features": [ "exact operation identity and generation metadata", "fixed source-declared HTTPS host", "fixture-first transport with zero provider calls", "source fingerprint and lifecycle evidence" ], "boundedLiveLanguages": 3, "runtimeExecutedLanguages": 4, "authority": { "packageCredentialsIncluded": false, "requestCredentialArgumentsAccepted": false, "fixtureProviderCalls": 0, "liveProviderCallsRequireExplicitExecution": true, "writesInferredSafe": false, "entitlementProven": false, "compatibilityProven": false, "productionApprovalGranted": false }, "rule": "Generated contract clients make source-backed HTTP integration reusable; they do not replace native SDKs, prove provider support or entitlement, make state-changing operations retry-safe, or grant production approval." } ``` ## webhook-guide · Webhook receiver guide - Identity: `webhook-guide:current` - Canonical: https://developer.mappls.com/webhooks ```json { "schemaVersion": "mappls.webhook-guide.v1", "title": "Mappls Developer Console webhooks", "summary": "Receive signed application provisioning and usage events with raw-body verification, durable deduplication, per-aggregate ordering, bounded retries, and independently governed replay.", "authority": { "surface": "Mappls Developer Console control-plane events", "providerPayloadClaims": 0, "boundary": "These four topics describe this developer console reference implementation. They are not Mappls product webhooks, InTouch payloads, or the 138 application-owned event blueprints." }, "topics": [ { "type": "application.provisioning_requested.v1", "title": "Application provisioning requested", "meaning": "The control plane durably accepted a provisioning request and queued the provider handoff. The application is not active yet.", "aggregate": "application" }, { "type": "application.provisioned.v1", "title": "Application provisioned", "meaning": "A separately authenticated provider result activated the requested application identity. Consumers should still read current entitlement and credential state.", "aggregate": "application" }, { "type": "usage.metered.v1", "title": "Usage metered", "meaning": "An authoritative meter event was accepted for one application operation. Use it as a notification, not as a replacement for billing reconciliation.", "aggregate": "application" }, { "type": "usage.threshold_reached.v1", "title": "Usage threshold reached", "meaning": "A configured monthly usage alert crossed its threshold for one product and application. Re-read current usage before taking consequential action.", "aggregate": "usage_alert" } ], "envelope": { "fields": [ "id", "type", "createdAt", "applicationId", "data" ], "example": { "id": "evt_example_01J5MAPPLS", "type": "usage.threshold_reached.v1", "createdAt": "2026-08-16T12:00:00.000Z", "applicationId": "app_example", "data": {} }, "rule": "Treat data as event-version-specific input. Validate an allow-listed schema before copying fields into application state." }, "signing": { "algorithm": "HMAC-SHA256", "version": "v1", "signedBytes": "${timestamp}.${eventId}.${rawBody}", "timestampToleranceSeconds": 300, "maxBodyBytes": 262144, "headers": [ [ "content-type", "application/json" ], [ "x-mappls-event-id", "Stable delivery identity and receiver deduplication key" ], [ "x-mappls-event-type", "Versioned topic identity" ], [ "x-mappls-timestamp", "Unix seconds included in the signature" ], [ "x-mappls-signature", "v1=" ], [ "x-mappls-test-mode", "true only for console-generated synthetic tests" ] ], "rules": [ "Read and bound the raw request bytes before JSON parsing.", "Reject timestamps outside the five-minute window before doing business work.", "Recompute the HMAC over the exact timestamp, event ID, separators, and raw body.", "Compare digests in constant time and reject unknown signature versions.", "Keep endpoint signing secrets in a receiver-side secret manager; never log or return them." ] }, "verification": { "eventType": "webhook.endpoint_verification.v1", "challengeTtlSeconds": 900, "responseHeader": "x-mappls-verification-response", "signedBytes": "${challengeId}.${nonce}", "response": "v1=", "rule": "A 2xx with the exact proof establishes destination ownership for that challenge version; it does not prove business-event handling or provider entitlement." }, "receiverSteps": [ [ "Bound", "Reject a body above 256 KiB and retain the exact raw bytes." ], [ "Verify", "Validate timestamp, event ID, signature shape, and constant-time HMAC before parsing." ], [ "Parse", "Decode JSON and allow-list the exact versioned topic and event schema." ], [ "Deduplicate", "Insert the event ID into a unique inbox record in the same transaction as the business effect." ], [ "Commit", "Persist the normalized effect, evidence, and any application outbox work atomically." ], [ "Acknowledge", "Return 2xx only after commit; otherwise return a deliberate non-2xx for bounded retry." ] ], "delivery": { "success": "Any 2xx response after the receiver's durable commit completes delivery.", "retry": "Network errors, timeouts, and non-2xx responses use bounded Retry-After or exponential backoff until terminal exhaustion.", "timeoutSeconds": 10, "redirectsFollowed": false, "responseBodyRead": false, "ordering": "The worker dispatches only the earliest unresolved delivery in each endpoint + aggregate type + aggregate ID lane. Independent lanes continue in parallel.", "guarantee": "At-least-once delivery with ordered lanes—not exactly once. The receiver must deduplicate every event ID." }, "replay": { "identity": "Replay preserves the original event ID and aggregate sequence; it is another attempt at the same transition.", "preconditions": [ "Terminal business failure", "Paused endpoint", "No active lease", "Lane still eligible", "Independent unexpired approval", "Current replay generation" ], "rule": "Never bypass receiver deduplication for a replay. Reconciliation and replay approval are operational evidence, not a new event." }, "lifecycle": [ [ "configured", "Endpoint and exact topic set recorded; signing secret revealed once." ], [ "verification pending", "Signed ownership challenge queued; business delivery remains closed." ], [ "verified + active", "Synthetic tests and subscribed business fan-out may be admitted." ], [ "queued", "Immutable event identity and aggregate lane allocated transactionally." ], [ "delivering", "One fenced worker lease owns the bounded attempt." ], [ "delivered / retrying / failed", "Safe attempt evidence records success, retry schedule, or terminal exhaustion." ], [ "replay governed", "Paused-only request, independent decision, single-use authorization, and preserved identity." ] ], "productionChecklist": [ "Public HTTPS receiver on standard port 443 with no redirect dependency", "Raw-body capture and 256 KiB limit before parsing", "Five-minute timestamp rejection and constant-time HMAC comparison", "Endpoint-specific signing secret stored in a managed secret system", "Unique durable inbox constraint on event ID", "Inbox record, domain effect, audit, and application outbox committed atomically", "Versioned schema allow-list and unknown-topic rejection", "Fast 2xx after commit; slow work moved to an application queue", "Synthetic challenge and subscribed-topic tests completed", "Duplicate, stale, malformed, timeout, 429, 5xx, ordering, and replay tests", "Metrics for latency, signature rejection, duplicates, retries, lane blocking, and terminal failures", "Runbook for pause, drain, secret rotation, reconciliation, approved replay, and rollback" ], "samples": [ { "language": "TypeScript", "label": "Node.js receiver", "code": "import { createHmac, timingSafeEqual } from \"node:crypto\";\n\nconst MAX_AGE_SECONDS = 300;\n\nexport function verifyMapplsWebhook(input: {\n rawBody: Buffer;\n headers: Record;\n secret: string;\n nowSeconds?: number;\n}) {\n const timestamp = input.headers[\"x-mappls-timestamp\"] ?? \"\";\n const eventId = input.headers[\"x-mappls-event-id\"] ?? \"\";\n const signature = input.headers[\"x-mappls-signature\"] ?? \"\";\n const now = input.nowSeconds ?? Math.floor(Date.now() / 1000);\n\n if (!/^\\d{10}$/.test(timestamp) || Math.abs(now - Number(timestamp)) > MAX_AGE_SECONDS) {\n throw new Error(\"stale_webhook\");\n }\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$/.test(eventId)) {\n throw new Error(\"invalid_event_id\");\n }\n if (!/^v1=[a-f0-9]{64}$/.test(signature)) throw new Error(\"invalid_signature\");\n\n const expected = createHmac(\"sha256\", input.secret)\n .update(`${timestamp}.${eventId}.`)\n .update(input.rawBody)\n .digest();\n const actual = Buffer.from(signature.slice(3), \"hex\");\n if (actual.length !== expected.length || !timingSafeEqual(actual, expected)) {\n throw new Error(\"invalid_signature\");\n }\n return JSON.parse(input.rawBody.toString(\"utf8\"));\n}\n\nexport function verificationResponse(secret: string, challengeId: string, nonce: string) {\n return `v1=${createHmac(\"sha256\", secret)\n .update(`${challengeId}.${nonce}`)\n .digest(\"hex\")}`;\n}\n\n// Commit event.id and your durable effect in one transaction.\n// Return 2xx only after that transaction commits." }, { "language": "Python", "label": "Python receiver", "code": "import hashlib\nimport hmac\nimport json\nimport time\n\nMAX_AGE_SECONDS = 300\n\ndef verify_mappls_webhook(raw_body: bytes, headers: dict[str, str], secret: str):\n timestamp = headers.get(\"x-mappls-timestamp\", \"\")\n event_id = headers.get(\"x-mappls-event-id\", \"\")\n signature = headers.get(\"x-mappls-signature\", \"\")\n\n if not timestamp.isdigit() or abs(int(time.time()) - int(timestamp)) > MAX_AGE_SECONDS:\n raise ValueError(\"stale_webhook\")\n if not signature.startswith(\"v1=\") or len(signature) != 67:\n raise ValueError(\"invalid_signature\")\n\n signed = f\"{timestamp}.{event_id}.\".encode(\"utf-8\") + raw_body\n expected = hmac.new(secret.encode(\"utf-8\"), signed, hashlib.sha256).hexdigest()\n if not hmac.compare_digest(signature[3:], expected):\n raise ValueError(\"invalid_signature\")\n return json.loads(raw_body)\n\ndef verification_response(secret: str, challenge_id: str, nonce: str) -> str:\n signed = f\"{challenge_id}.{nonce}\".encode(\"utf-8\")\n return \"v1=\" + hmac.new(secret.encode(\"utf-8\"), signed, hashlib.sha256).hexdigest()\n\n# Insert event[\"id\"] and the business effect atomically, then return 204." }, { "language": "Java", "label": "Java receiver", "code": "import java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\nimport java.time.Instant;\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\n\npublic final class MapplsWebhookVerifier {\n private static final long MAX_AGE_SECONDS = 300;\n\n public static void verify(byte[] rawBody, String timestamp, String eventId,\n String signature, String secret) throws Exception {\n long sentAt = Long.parseLong(timestamp);\n if (Math.abs(Instant.now().getEpochSecond() - sentAt) > MAX_AGE_SECONDS) {\n throw new SecurityException(\"stale_webhook\");\n }\n if (signature == null || !signature.matches(\"v1=[a-f0-9]{64}\")) {\n throw new SecurityException(\"invalid_signature\");\n }\n\n Mac mac = Mac.getInstance(\"HmacSHA256\");\n mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), \"HmacSHA256\"));\n mac.update((timestamp + \".\" + eventId + \".\").getBytes(StandardCharsets.UTF_8));\n byte[] expected = mac.doFinal(rawBody);\n byte[] actual = java.util.HexFormat.of().parseHex(signature.substring(3));\n if (!MessageDigest.isEqual(actual, expected)) throw new SecurityException(\"invalid_signature\");\n }\n\n // Read the request body once as bytes. After verification, deduplicate and\n // commit the business effect before returning an HTTP 2xx response.\n}" }, { "language": "Go", "label": "Go receiver", "code": "package webhooks\n\nimport (\n \"crypto/hmac\"\n \"crypto/sha256\"\n \"encoding/hex\"\n \"errors\"\n \"fmt\"\n \"strconv\"\n \"time\"\n)\n\nfunc Verify(rawBody []byte, timestamp, eventID, signature string, secret []byte) error {\n sentAt, err := strconv.ParseInt(timestamp, 10, 64)\n if err != nil || abs(time.Now().Unix()-sentAt) > 300 { return errors.New(\"stale_webhook\") }\n if len(signature) != 67 || signature[:3] != \"v1=\" { return errors.New(\"invalid_signature\") }\n\n actual, err := hex.DecodeString(signature[3:])\n if err != nil { return errors.New(\"invalid_signature\") }\n mac := hmac.New(sha256.New, secret)\n fmt.Fprintf(mac, \"%s.%s.\", timestamp, eventID)\n mac.Write(rawBody)\n if !hmac.Equal(actual, mac.Sum(nil)) { return errors.New(\"invalid_signature\") }\n return nil\n}\n\nfunc abs(value int64) int64 { if value < 0 { return -value }; return value }\n\n// Bound the raw request body to 256 KiB. Persist event ID and effect in one\n// transaction, then acknowledge; duplicate IDs return the original result." } ], "links": { "guide": "/webhooks", "api": "/api/webhook-guide", "console": "/console", "eventCatalog": "/events", "trust": "/trust" }, "credentialValuesIncluded": false, "providerCalls": 0, "writesExposed": false } ``` ## deep-link-evidence · Deep-link evidence boundary - Identity: `deep-link-evidence:current` - Canonical: https://developer.mappls.com/tools/deep-links ```json { "officialDocumentationUrl": "https://developer.mappls.com/mappls-apps/ios/", "repositoryGuideSlug": "mappls-app-widgets", "repositoryUrl": "https://github.com/mappls-api/mappls-app-widgets", "repositoryFingerprint": "1cb282714a115237fb8e116d179eb00c273a6cb63f0bacbbcda785ec754ed177", "verifiedAt": "2026-08-17", "boundary": "The current official Mappls deep-link page documents the exact HTTPS and app-URI shapes. The public repository establishes the credential-light widget family but does not contain those path contracts. Installed-app association, regional availability, and downstream arrival still require device evidence." } ``` ## automotive · Offline and automotive release control - Identity: `automotive:current` - Canonical: https://developer.mappls.com/tools/automotive ```json { "verifiedAt": "2026-08-17", "title": "Offline and automotive release control", "readiness": "entitlement-and-contract-required", "publicBoundary": "The public Mappls organization advertises NaviMaps SDK APIs for hybrid embedded navigation and the public Android index names NCASE, NaviMaps, and Navigation SDK families. The reviewed public snapshot does not establish the production automotive runtime, package, activation, compiler, vehicle-interface, or safety contract.", "localBoundary": "Local repositories contain a newer Telecons engine line with map, search, route, simulation, GPS, voice, traffic-event customization, and 2026 release evidence; a separate legacy Hybrid Android SDK; and sparse earlier Linux/navigation repositories. These generations are adjacent evidence, not interchangeable SDK syntax.", "credentialBoundary": "The reference workflow accepts no credential, activation key, license file, protected package, binary, package URL, or artifact body. It persists only non-secret entitlement references, manifest identities, verifier attestations, target compatibility, and release decisions.", "runtimeBoundary": "Fixture qualification proves the application control plane only. It does not emulate Mappls navigation, certify a package, establish road safety, or replace the entitled runtime owner's acceptance suite.", "publicEvidence": [ { "label": "Mappls API public organization", "url": "https://github.com/mappls-api", "evidence": "Advertises NaviMaps SDK APIs as hybrid navigation for embedded systems." }, { "label": "Mappls Android documentation index", "url": "https://developer.mappls.com/documentation/sdk/android/", "evidence": "Names NCASE Automotive Suite, NaviMaps, and Navigation SDK product families without exposing an automotive implementation contract in the reviewed index." } ], "evidenceGenerations": [ { "generation": "Public product surface", "source": "github.com/mappls-api and developer.mappls.com", "status": "public-product-evidence", "capabilities": [ "NaviMaps embedded/hybrid navigation family", "NCASE and Navigation SDK family names" ], "boundary": "Product discovery evidence only; obtain the entitled edition and exact contract before implementation." }, { "generation": "Telecons engine line", "source": "local/mappls-telecons-offline-sdk", "status": "local-current-reference", "capabilities": [ "Map rendering", "Offline and online route planning", "Search and nearby", "Simulation", "GPS state", "Voice guidance", "Traffic-event customization" ], "boundary": "Local implementation evidence dated through March 2026; not a public redistribution or compatibility promise." }, { "generation": "Hybrid Android line", "source": "local/offline-sdk", "status": "local-legacy-reference", "capabilities": [ "Region download", "Offline/online mode switching", "Map lifecycle", "Offline map/search/route concept" ], "boundary": "Legacy MapmyIndia 0.0.1 documentation exposes app-held credential patterns that must not be copied into a current architecture." }, { "generation": "Earlier embedded lines", "source": "local/linuxsdk-dev1, linuxsdk-dev2, mapmyindia-navigation-sdk", "status": "identity-only-reference", "capabilities": [ "Repository identity" ], "boundary": "Sparse READMEs do not establish symbols, versions, compatibility, or readiness." } ], "releasePhases": [ { "phase": "manufacture", "owner": "Manufacturing system", "proof": "Unique hardware, vehicle, edition, target CPU/ABI/OS/graphics, and manufacturing batch identity." }, { "phase": "activate", "owner": "Fleet release manager", "proof": "Non-secret entitlement reference, edition, regions, expiry, offline grace, and restriction fingerprint." }, { "phase": "install", "owner": "Package verifier", "proof": "One signed manifest binds runtime, data, configuration, voice, target, component hashes, and observed content digest." }, { "phase": "qualify", "owner": "Vehicle runtime", "proof": "Versioned startup, render, offline search, offline route, position, voice, and storage suite passes." }, { "phase": "update", "owner": "Release control plane", "proof": "Inactive slot advances through download, verification, staging, atomic switch, and target qualification checkpoints." }, { "phase": "recover", "owner": "Boot control and watchdog", "proof": "Power loss or health regression selects a known-good slot without erasing the rejected manifest or incident." }, { "phase": "retire", "owner": "Fleet release manager", "proof": "Activation and protected-package access are revoked while release and support history remain." } ], "durableRecords": [ "Device identity: hardware, vehicle, product edition, target facts, and lifecycle version.", "Release manifest: runtime, data, configuration, voice, target, component digests, and verifier reference.", "A/B slot table: active pointer, previous known-good pointer, slot status, and immutable manifest identity.", "Update plan: campaign, source/target slots, phase checkpoints, interruption, switch, and qualification evidence.", "Qualification and incident ledgers: suite version, results, signal, action, outcome, actor, and time.", "Append-only audit and transactional outbox committed with every state change." ], "useCases": [ { "industry": "Passenger vehicles", "scenario": "Head-unit map and guidance release", "proof": "Cold boot, local render/search/route, vehicle-signal simulation, voice, HMI policy, and rollback." }, { "industry": "Commercial fleets", "scenario": "Regional truck navigation rollout", "proof": "Vehicle profile, restricted-road data, cohort health, offline grace, and route-regression threshold." }, { "industry": "Mining", "scenario": "Disconnected haul-road navigation", "proof": "Private-region package identity, long offline operation, positioning degradation, storage health, and field recovery." }, { "industry": "Agriculture", "scenario": "Farm machinery guidance console", "proof": "Seasonal regional data, rugged-device target, intermittent activation refresh, operator controls, and rollback." }, { "industry": "Emergency response", "scenario": "Resilient in-vehicle map stack", "proof": "Deterministic boot, offline place/route availability, stale-data disclosure, power interruption, and safe degraded mode." }, { "industry": "Public transit", "scenario": "Bus console release campaign", "proof": "Route-set compatibility, depot cohorting, audio prompts, driver-distraction review, and watchdog evidence." }, { "industry": "Industrial mobility", "scenario": "Yard and port vehicle terminals", "proof": "Facility data edition, target GPU/ABI, GNSS shadow handling, restricted zones, and support diagnostics." }, { "industry": "Two-wheelers", "scenario": "Compact offline navigation display", "proof": "Storage budget, simplified HMI, voice/haptic policy, power cycling, and target-specific qualification." } ], "releaseTests": [ "Reject CPU, ABI, OS, graphics, runtime, data, configuration, or voice incompatibility before active-slot mutation.", "Reject malformed manifests, mismatched observed digests, failed signature attestations, and protected artifact input.", "Prove there is exactly one bootable active slot through interruption at every update checkpoint.", "Power loss before the switch boots the unchanged known-good slot and retains resumable staging evidence.", "Power loss after the switch but before qualification restores the prior known-good slot.", "A newly qualified route, crash, rendering, positioning, voice, or storage regression halts the cohort and rolls back.", "Expired activation follows the contracted offline-grace policy and cannot be extended by changing device time.", "Idempotent replay and stale aggregate versions cannot duplicate campaigns, switches, incidents, audit, or outbox work.", "Process restart recovers device, slots, phase checkpoints, qualification, incidents, audit, and outbox atomically.", "Retirement revokes protected access without deleting manifests, support evidence, or prior release decisions." ] } ``` ## vision · Vision evidence workflow - Identity: `vision:current` - Canonical: https://developer.mappls.com/tools/vision ```json { "verifiedAt": "2026-08-17", "title": "SkyDNN vision evidence workflow", "readiness": "entitlement-and-model-selection-required", "publicBoundary": "The public SkyDNN repository establishes a bearer-authenticated OpenAPI 3 surface at ai.mappls.com with synchronous multipart POST /predict and model-discovery GET operations. Its prose also mentions /predict/polygon, but that path is absent from the reviewed OpenAPI document and therefore remains selection-required rather than an implemented contract.", "marketingBoundary": "Current Mappls material describes satellite imagery, street photographs, and video frames returning confidence, labels, and bounding-box, polygon, or polyline geometry. It also advertises JavaScript integration and human-in-the-loop annotation workflows, but does not make those exact SDK or review-state contracts available in the reviewed public repository.", "localBoundary": "The local source snapshot mirrors the public API documentation and contains a separate beta SkyDNN category-icon package with nineteen map/road ontology icons. Icon names, internal paths, model configuration examples, and historic release metadata are evidence for documentation review—not a stable inference SDK or production model entitlement.", "trustBoundary": "The reference workflow accepts no image bytes, image URL, video frame, bearer token, face, number plate, or provider-internal model path. It uses fixture asset hashes and synthetic provider envelopes to prove application state, validation, review, retention, audit, and recovery without redistributing imagery or credentials.", "providerBoundary": "The documented POST /predict response is synchronous. Queueing, case state, policy evaluation, reviewer decisions, retention, redaction, retry, and outbox delivery in the reference app are explicitly application-owned; they are not represented as SkyDNN provider features.", "publicEvidence": [ { "label": "Mappls SkyDNN public repository", "url": "https://github.com/mappls-api/skydnn-aiapi-docs", "evidence": "Documents model discovery and synchronous JSON prediction from multipart imagery." }, { "label": "Mappls SkyDNN AI APIs", "url": "https://about.mappls.com/skydnn/ai-apis/", "evidence": "Describes satellite, street, and video-frame inputs plus confidence, label, and geometry outputs." }, { "label": "Mappls SkyDNN platform", "url": "https://about.mappls.com/skydnn/skydnn-platform/", "evidence": "Describes distributed assets, inference visualization, annotation, and human-in-the-loop workflows at product level." } ], "operations": [ { "method": "GET", "path": "/server/whoami", "purpose": "Discover the model keys currently exposed by the entitled server.", "contract": "public-openapi" }, { "method": "GET", "path": "/models", "purpose": "List available model details.", "contract": "public-openapi" }, { "method": "GET", "path": "/models/{api_model_key}", "purpose": "Inspect one selected model before inference.", "contract": "public-openapi" }, { "method": "POST", "path": "/predict", "purpose": "Submit one multipart image and receive a synchronous JSON inference response.", "contract": "public-openapi" }, { "method": "POST", "path": "/predict/polygon", "purpose": "Mentioned in prose but absent from the reviewed OpenAPI; confirm before use.", "contract": "selection-required" } ], "lifecycle": [ { "state": "registered", "owner": "Asset steward", "proof": "Purpose, lawful basis, asset hash, media class, capture time, location context, retention deadline, and no raw media in the case store." }, { "state": "model_locked", "owner": "Vision service", "proof": "Entitled server identity, selected model key, model fingerprint, classes, policy version, and input compatibility." }, { "state": "inference_requested", "owner": "Application worker", "proof": "One idempotent attempt identity, exact asset and model fingerprints, and a secret-safe provider request boundary." }, { "state": "inferred", "owner": "Application adapter", "proof": "Schema-valid status, timing, output hash, labels, confidence, normalized geometry, and provider provenance separated from business policy." }, { "state": "review_pending", "owner": "Decision service", "proof": "Versioned thresholds, reason codes, uncertainty band, required reviewer role, and immutable inference evidence." }, { "state": "accepted_or_rejected", "owner": "Independent reviewer", "proof": "Attributable decision, reason, policy/model/output identities, separation of duties, and no rewritten inference." }, { "state": "redacted", "owner": "Privacy worker", "proof": "Derived detection detail removed at retention deadline while minimal hashes, decision, and audit evidence remain." } ], "durableRecords": [ "Vision case: external identity, purpose, state, optimistic version, policy, and retention boundary.", "Asset envelope: opaque asset reference, SHA-256 content identity, media class, dimensions, capture time, location context, and consent or lawful-basis reference.", "Model lock: server reference, API model key, model fingerprint, class vocabulary, compatibility decision, and lock time.", "Inference attempt: request identity, asset/model fingerprints, lifecycle timing, outcome, safe error class, normalized result, and response hash.", "Policy and review: thresholds, uncertainty reasons, reviewer, disposition, explanation, and immutable linkage to one inference attempt.", "Retention, audit, command receipt, and transactional outbox records committed with every transition." ], "useCases": [ { "industry": "Urban planning", "scenario": "Building-footprint change triage", "proof": "Satellite source/date, polygon validity, confidence band, temporal comparison, and planner review." }, { "industry": "Road operations", "scenario": "Lane and road-furniture survey", "proof": "Sequence/frame identity, camera context, polyline or box normalization, duplicate suppression, and field verification." }, { "industry": "Retail mapping", "scenario": "Shop-sign and POI discovery", "proof": "Purpose-limited imagery, text/box confidence, Mappls place reconciliation, reviewer confirmation, and privacy controls." }, { "industry": "Automotive", "scenario": "ADAS dataset quality gate", "proof": "Model/version lock, scenario coverage, false-negative review, no live safety actuation, and release acceptance outside this API." }, { "industry": "Utilities", "scenario": "Roadside asset inventory", "proof": "Asset class vocabulary, geometry projection, route/date provenance, human verification, and maintenance-system identity." }, { "industry": "Agriculture", "scenario": "Vegetation and water segmentation", "proof": "Imagery resolution/date, area-of-interest identity, polygon topology, seasonal baseline, and agronomist review." }, { "industry": "Insurance", "scenario": "Visual damage triage", "proof": "Explicit consent, no biometric reuse, confidence as triage only, adjuster review, retention, and appeal evidence." }, { "industry": "Privacy operations", "scenario": "Face and plate redaction quality", "proof": "Sensitive-class policy, miss-rate sampling, access restriction, derived-output retention, and independent audit." } ], "releaseTests": [ "Reject image bodies, media URLs, bearer tokens, credentials, faces, plates, and provider-internal file paths at the reference-app boundary.", "Reject malformed asset hashes, unsupported media classes, invalid dimensions, expired lawful basis, and retention deadlines outside policy.", "Lock only a model key observed through the entitled model-discovery boundary and retain its fingerprint across the attempt.", "Never represent an application queue, review, retry, redaction, or terminal business decision as a SkyDNN provider state.", "Normalize rectangles, polygons, and polylines only after bounds, topology, label, score, and source-dimension validation.", "Route low confidence, unsupported labels, malformed geometry, privacy-sensitive classes, and policy ambiguity to independent review.", "Prevent the inference actor from reviewing its own recommendation and preserve rejection or override reasons.", "Make request replay and stale versions unable to duplicate inference attempts, reviews, audit, or outbox work.", "Recover cases, attempts, decisions, command receipts, audit, and outbox atomically after process restart.", "Redact derived detections at retention expiry without deleting minimal decision, policy, hash, and audit evidence." ] } ```